From 2606c692d510fb2c834f0724202aeea2f2f3f024 Mon Sep 17 00:00:00 2001 From: Joel Shapiro Date: Sun, 5 Feb 2017 20:49:14 -0500 Subject: [PATCH 001/659] fix spelling in go tutorials --- go/receive.go | 2 +- go/receive_logs.go | 2 +- go/receive_logs_direct.go | 2 +- go/receive_logs_topic.go | 2 +- go/rpc_client.go | 2 +- go/rpc_server.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go/receive.go b/go/receive.go index 6d25213b..54c25610 100644 --- a/go/receive.go +++ b/go/receive.go @@ -24,7 +24,7 @@ func main() { q, err := ch.QueueDeclare( "hello", // name false, // durable - false, // delete when usused + false, // delete when unused false, // exclusive false, // no-wait nil, // arguments diff --git a/go/receive_logs.go b/go/receive_logs.go index 005e4292..fa6fd131 100644 --- a/go/receive_logs.go +++ b/go/receive_logs.go @@ -35,7 +35,7 @@ func main() { q, err := ch.QueueDeclare( "", // name false, // durable - false, // delete when usused + false, // delete when unused true, // exclusive false, // no-wait nil, // arguments diff --git a/go/receive_logs_direct.go b/go/receive_logs_direct.go index ebf67384..953f43c3 100644 --- a/go/receive_logs_direct.go +++ b/go/receive_logs_direct.go @@ -36,7 +36,7 @@ func main() { q, err := ch.QueueDeclare( "", // name false, // durable - false, // delete when usused + false, // delete when unused true, // exclusive false, // no-wait nil, // arguments diff --git a/go/receive_logs_topic.go b/go/receive_logs_topic.go index 1eef20d1..2d189a2c 100644 --- a/go/receive_logs_topic.go +++ b/go/receive_logs_topic.go @@ -36,7 +36,7 @@ func main() { q, err := ch.QueueDeclare( "", // name false, // durable - false, // delete when usused + false, // delete when unused true, // exclusive false, // no-wait nil, // arguments diff --git a/go/rpc_client.go b/go/rpc_client.go index b75059d3..dfa23882 100644 --- a/go/rpc_client.go +++ b/go/rpc_client.go @@ -41,7 +41,7 @@ func fibonacciRPC(n int) (res int, err error) { q, err := ch.QueueDeclare( "", // name false, // durable - false, // delete when usused + false, // delete when unused true, // exclusive false, // noWait nil, // arguments diff --git a/go/rpc_server.go b/go/rpc_server.go index 830ca27f..017715e0 100644 --- a/go/rpc_server.go +++ b/go/rpc_server.go @@ -35,7 +35,7 @@ func main() { q, err := ch.QueueDeclare( "rpc_queue", // name false, // durable - false, // delete when usused + false, // delete when unused false, // exclusive false, // no-wait nil, // arguments From 59c53ce0d466d1f70fea0a1fbf10318a872caaba Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 15 Mar 2017 19:30:47 +0300 Subject: [PATCH 002/659] Ignore composer.phar --- php/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/.gitignore b/php/.gitignore index 0f180350..06914547 100644 --- a/php/.gitignore +++ b/php/.gitignore @@ -1,4 +1,4 @@ bin/* vendor/* +composer.phar composer.lock - From 3262231aff276ae76cda15299e189e2c0cadb34a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 15 Mar 2017 19:52:01 +0300 Subject: [PATCH 003/659] Update PHP tutorials README After I had to go through them I believe some things are worth clarifying ;) --- php/README.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/php/README.md b/php/README.md index f52db04a..0bdd70e2 100644 --- a/php/README.md +++ b/php/README.md @@ -7,11 +7,21 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -Additionally you need `PHP 5.3` and `php-amqplib`. To get these +### PHP 5.3+ + +You need `PHP 5.3` and `php-amqplib`. To get these dependencies on Ubuntu type: sudo apt-get install git-core php5-cli + +### Composer + +Then [install Composer](https://getcomposer.org/download/) per instructions on their site. + + +### Client Library + Then you can install `php-amqplib` using [Composer](http://getcomposer.org). To do that install Composer and add it to your path, then run the following command @@ -21,35 +31,35 @@ inside this project folder: ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-php.html): +[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorials/tutorial-one-php.html): php send.php php receive.php -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-php.html): +[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorials/tutorial-two-php.html): php new_task.php "A very hard task which takes two seconds.." php worker.php -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-php.html) +[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorials/tutorial-three-php.html) php receive_logs.php php emit_log.php "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-php.html): +[Tutorial four: Routing](http://www.rabbitmq.com/tutorials/tutorial-four-php.html): php receive_logs_direct.php info php emit_log_direct.php info "The message" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-php.html): +[Tutorial five: Topics](http://www.rabbitmq.com/tutorials/tutorial-five-php.html): php receive_logs_topic.php "*.rabbit" php emit_log_topic.php red.rabbit Hello -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-php.html): +[Tutorial six: RPC](http://www.rabbitmq.com/tutorials/tutorial-six-php.html): php rpc_server.php php rpc_client.php From b3e8349e5c467fb2740ad358ea2ddecfdfac4ed5 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 15 Mar 2017 19:52:35 +0300 Subject: [PATCH 004/659] Add a Node port README --- javascript-nodejs/README.md | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 javascript-nodejs/README.md diff --git a/javascript-nodejs/README.md b/javascript-nodejs/README.md new file mode 100644 index 00000000..d1e76043 --- /dev/null +++ b/javascript-nodejs/README.md @@ -0,0 +1,55 @@ +# Node.js code for RabbitMQ tutorials + +Here you can find JavaScript (Node) code examples from [RabbitMQ +tutorials](http://www.rabbitmq.com/getstarted.html). + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +### Node.js + +You need [Node.js](https://nodejs.org/en/download/) and [amqp.node](https://github.com/squaremo/amqp.node) +to run these tutorials. + + +### Client Library + +To install `amqp.node` using npm: + + npm install amqplib -g + +## Code + +[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorials/tutorial-one-javascript.html): + + node src/send.js + node src/receive.js + + +[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorials/tutorial-two-javascript.html): + + node src/new_task.js "A very hard task which takes two seconds.." + node src/worker.js + + +[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorials/tutorial-three-javascript.html) + + node src/receive_logs.js + node src/emit_log.js "info: This is the log message" + +[Tutorial four: Routing](http://www.rabbitmq.com/tutorials/tutorial-four-javascript.html): + + node src/receive_logs_direct.js info + node src/emit_log_direct.js info "The message" + + +[Tutorial five: Topics](http://www.rabbitmq.com/tutorials/tutorial-five-javascript.html): + + node src/receive_logs_topic.js "*.rabbit" + node src/emit_log_topic.js red.rabbit Hello + +[Tutorial six: RPC](http://www.rabbitmq.com/tutorials/tutorial-six-javascript.html): + + node src/rpc_server.js + node src/rpc_client.js From 778ef6c1be5c34bf1b21e01ce130aee66816c01c Mon Sep 17 00:00:00 2001 From: Nikolay Astakhov Date: Mon, 20 Mar 2017 23:53:03 +0300 Subject: [PATCH 005/659] Using self descriptional constant --- php/new_task.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/new_task.php b/php/new_task.php index 1435c3b9..4f7945b2 100644 --- a/php/new_task.php +++ b/php/new_task.php @@ -13,7 +13,7 @@ $data = implode(' ', array_slice($argv, 1)); if(empty($data)) $data = "Hello World!"; $msg = new AMQPMessage($data, - array('delivery_mode' => 2) # make message persistent + array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT) ); $channel->basic_publish($msg, '', 'task_queue'); From 34619a56c05cd8fdd6e908afe54ba55b4985c94c Mon Sep 17 00:00:00 2001 From: Christophe Tafani-Dereeper Date: Tue, 21 Mar 2017 09:44:06 +0100 Subject: [PATCH 006/659] Use the BuiltinExchangeType instead of string literals in Java examples --- java/EmitLog.java | 3 ++- java/EmitLogDirect.java | 3 ++- java/EmitLogHeader.java | 2 +- java/EmitLogTopic.java | 3 ++- java/ReceiveLogHeader.java | 2 +- java/ReceiveLogs.java | 2 +- java/ReceiveLogsDirect.java | 2 +- java/ReceiveLogsTopic.java | 2 +- 8 files changed, 11 insertions(+), 8 deletions(-) diff --git a/java/EmitLog.java b/java/EmitLog.java index cfdfc17f..748355c6 100644 --- a/java/EmitLog.java +++ b/java/EmitLog.java @@ -1,3 +1,4 @@ +import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; @@ -12,7 +13,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); String message = getMessage(argv); diff --git a/java/EmitLogDirect.java b/java/EmitLogDirect.java index a52a93ea..7edce177 100644 --- a/java/EmitLogDirect.java +++ b/java/EmitLogDirect.java @@ -1,3 +1,4 @@ +import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; @@ -13,7 +14,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "direct"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); String severity = getSeverity(argv); String message = getMessage(argv); diff --git a/java/EmitLogHeader.java b/java/EmitLogHeader.java index c21dbbc8..ca181003 100644 --- a/java/EmitLogHeader.java +++ b/java/EmitLogHeader.java @@ -38,7 +38,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "headers"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); diff --git a/java/EmitLogTopic.java b/java/EmitLogTopic.java index 91996e51..646652e3 100644 --- a/java/EmitLogTopic.java +++ b/java/EmitLogTopic.java @@ -1,3 +1,4 @@ +import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; @@ -16,7 +17,7 @@ public static void main(String[] argv) { connection = factory.newConnection(); channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); String routingKey = getRouting(argv); String message = getMessage(argv); diff --git a/java/ReceiveLogHeader.java b/java/ReceiveLogHeader.java index 527009be..b6a4eda5 100644 --- a/java/ReceiveLogHeader.java +++ b/java/ReceiveLogHeader.java @@ -18,7 +18,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "headers"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); // The API requires a routing key, but in fact if you are using a header exchange the // value of the routing key is not used in the routing. You can receive information diff --git a/java/ReceiveLogs.java b/java/ReceiveLogs.java index e46d02b5..fd807a6b 100644 --- a/java/ReceiveLogs.java +++ b/java/ReceiveLogs.java @@ -11,7 +11,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, EXCHANGE_NAME, ""); diff --git a/java/ReceiveLogsDirect.java b/java/ReceiveLogsDirect.java index 64c5f67d..0a13f8d1 100644 --- a/java/ReceiveLogsDirect.java +++ b/java/ReceiveLogsDirect.java @@ -12,7 +12,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "direct"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); String queueName = channel.queueDeclare().getQueue(); if (argv.length < 1){ diff --git a/java/ReceiveLogsTopic.java b/java/ReceiveLogsTopic.java index 17937fcd..f100d34f 100644 --- a/java/ReceiveLogsTopic.java +++ b/java/ReceiveLogsTopic.java @@ -12,7 +12,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); String queueName = channel.queueDeclare().getQueue(); if (argv.length < 1) { From e7434e9431b85e0eb6dac4b7228cb6b2cae9ee89 Mon Sep 17 00:00:00 2001 From: Dave Cottlehuber Date: Thu, 23 Mar 2017 14:53:43 +0100 Subject: [PATCH 007/659] elixir: use a working amqp (pre)release --- elixir/mix.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/elixir/mix.exs b/elixir/mix.exs index 22487417..0f0d2b79 100644 --- a/elixir/mix.exs +++ b/elixir/mix.exs @@ -7,7 +7,7 @@ defmodule RabbitmqTutorials.Mixfile do elixir: "~> 1.1", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, - deps: deps] + deps: deps()] end # Configuration for the OTP application @@ -28,7 +28,7 @@ defmodule RabbitmqTutorials.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:amqp, "~> 0.1.4"}, + {:amqp, "~> 0.2.0-pre.2"}, ] end -end \ No newline at end of file +end From 116708eb9b0ab3782cccffcf0bf1cd3405ec9065 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 3 Apr 2017 00:02:53 +0300 Subject: [PATCH 008/659] Allow for more recent 2.6.x versions Inspired by https://github.com/rabbitmq/rabbitmq-website/pull/360. --- php/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/composer.json b/php/composer.json index 99e6b272..39288364 100644 --- a/php/composer.json +++ b/php/composer.json @@ -1,5 +1,5 @@ { "require": { - "php-amqplib/php-amqplib": "v2.6.1" + "php-amqplib/php-amqplib": ">=2.6.1" } } From 0cbf3a70d559af3e99cb13a48613dda501cf9bde Mon Sep 17 00:00:00 2001 From: kjnilsson Date: Tue, 4 Apr 2017 10:03:59 +0100 Subject: [PATCH 009/659] migrate to new dotnet project format --- dotnet/EmitLog/EmitLog.csproj | 17 ++++++++++++++++ dotnet/EmitLog/project.json | 20 ------------------- dotnet/EmitLogDirect/EmitLogDirect.csproj | 17 ++++++++++++++++ dotnet/EmitLogDirect/project.json | 20 ------------------- dotnet/EmitLogTopic/EmitLogTopic.csproj | 17 ++++++++++++++++ dotnet/EmitLogTopic/project.json | 20 ------------------- dotnet/NewTask/NewTask.csproj | 17 ++++++++++++++++ dotnet/NewTask/project.json | 20 ------------------- dotnet/RPCClient/RPCClient.csproj | 17 ++++++++++++++++ dotnet/RPCClient/project.json | 20 ------------------- dotnet/RPCServer/RPCServer.csproj | 17 ++++++++++++++++ dotnet/RPCServer/project.json | 20 ------------------- dotnet/Receive/Receive.csproj | 17 ++++++++++++++++ dotnet/Receive/project.json | 20 ------------------- dotnet/ReceiveLogs/ReceiveLogs.csproj | 17 ++++++++++++++++ dotnet/ReceiveLogs/project.json | 20 ------------------- .../ReceiveLogsDirect.csproj | 17 ++++++++++++++++ dotnet/ReceiveLogsDirect/project.json | 20 ------------------- .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 17 ++++++++++++++++ dotnet/ReceiveLogsTopic/project.json | 20 ------------------- dotnet/Send/Send.csproj | 17 ++++++++++++++++ dotnet/Send/project.json | 20 ------------------- dotnet/Worker/Worker.csproj | 17 ++++++++++++++++ dotnet/Worker/project.json | 20 ------------------- 24 files changed, 204 insertions(+), 240 deletions(-) create mode 100755 dotnet/EmitLog/EmitLog.csproj delete mode 100755 dotnet/EmitLog/project.json create mode 100755 dotnet/EmitLogDirect/EmitLogDirect.csproj delete mode 100755 dotnet/EmitLogDirect/project.json create mode 100755 dotnet/EmitLogTopic/EmitLogTopic.csproj delete mode 100755 dotnet/EmitLogTopic/project.json create mode 100755 dotnet/NewTask/NewTask.csproj delete mode 100755 dotnet/NewTask/project.json create mode 100755 dotnet/RPCClient/RPCClient.csproj delete mode 100755 dotnet/RPCClient/project.json create mode 100755 dotnet/RPCServer/RPCServer.csproj delete mode 100755 dotnet/RPCServer/project.json create mode 100755 dotnet/Receive/Receive.csproj delete mode 100755 dotnet/Receive/project.json create mode 100755 dotnet/ReceiveLogs/ReceiveLogs.csproj delete mode 100755 dotnet/ReceiveLogs/project.json create mode 100755 dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj delete mode 100755 dotnet/ReceiveLogsDirect/project.json create mode 100755 dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj delete mode 100755 dotnet/ReceiveLogsTopic/project.json create mode 100755 dotnet/Send/Send.csproj delete mode 100755 dotnet/Send/project.json create mode 100755 dotnet/Worker/Worker.csproj delete mode 100755 dotnet/Worker/project.json diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj new file mode 100755 index 00000000..82752b2f --- /dev/null +++ b/dotnet/EmitLog/EmitLog.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + EmitLog + Exe + EmitLog + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/EmitLog/project.json b/dotnet/EmitLog/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/EmitLog/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj new file mode 100755 index 00000000..04c0435d --- /dev/null +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + EmitLogDirect + Exe + EmitLogDirect + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/EmitLogDirect/project.json b/dotnet/EmitLogDirect/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/EmitLogDirect/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj new file mode 100755 index 00000000..357f2c9b --- /dev/null +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + EmitLogTopic + Exe + EmitLogTopic + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/EmitLogTopic/project.json b/dotnet/EmitLogTopic/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/EmitLogTopic/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj new file mode 100755 index 00000000..fe60b782 --- /dev/null +++ b/dotnet/NewTask/NewTask.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + NewTask + Exe + NewTask + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/NewTask/project.json b/dotnet/NewTask/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/NewTask/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj new file mode 100755 index 00000000..1abf2d55 --- /dev/null +++ b/dotnet/RPCClient/RPCClient.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + RPCClient + Exe + RPCClient + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/RPCClient/project.json b/dotnet/RPCClient/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/RPCClient/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj new file mode 100755 index 00000000..c5b46db7 --- /dev/null +++ b/dotnet/RPCServer/RPCServer.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + RPCServer + Exe + RPCServer + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/RPCServer/project.json b/dotnet/RPCServer/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/RPCServer/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj new file mode 100755 index 00000000..d1eecb67 --- /dev/null +++ b/dotnet/Receive/Receive.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + Receive + Exe + Receive + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/Receive/project.json b/dotnet/Receive/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/Receive/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj new file mode 100755 index 00000000..42d6051a --- /dev/null +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + ReceiveLogs + Exe + ReceiveLogs + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/ReceiveLogs/project.json b/dotnet/ReceiveLogs/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/ReceiveLogs/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj new file mode 100755 index 00000000..c1fff11d --- /dev/null +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + ReceiveLogsDirect + Exe + ReceiveLogsDirect + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/ReceiveLogsDirect/project.json b/dotnet/ReceiveLogsDirect/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/ReceiveLogsDirect/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj new file mode 100755 index 00000000..378912e7 --- /dev/null +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + ReceiveLogsTopic + Exe + ReceiveLogsTopic + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/ReceiveLogsTopic/project.json b/dotnet/ReceiveLogsTopic/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/ReceiveLogsTopic/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj new file mode 100755 index 00000000..f8640096 --- /dev/null +++ b/dotnet/Send/Send.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + Send + Exe + Send + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/Send/project.json b/dotnet/Send/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/Send/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj new file mode 100755 index 00000000..b05f420c --- /dev/null +++ b/dotnet/Worker/Worker.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp1.0 + portable + Worker + Exe + Worker + $(PackageTargetFallback);dnxcore50 + 1.0.4 + + + + + + + diff --git a/dotnet/Worker/project.json b/dotnet/Worker/project.json deleted file mode 100755 index 125c11e1..00000000 --- a/dotnet/Worker/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "4.0.*" - }, - "imports": "dnxcore50" - } - } -} From 92bcb239447afcabedffda92c43ba7167c70a49d Mon Sep 17 00:00:00 2001 From: Larry Qu Date: Mon, 10 Apr 2017 22:41:44 +0800 Subject: [PATCH 010/659] Update worker.go fix: Ack should be an the end of loop. --- go/worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/worker.go b/go/worker.go index aa50b236..6b37ea1c 100644 --- a/go/worker.go +++ b/go/worker.go @@ -56,11 +56,11 @@ func main() { go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) - d.Ack(false) dot_count := bytes.Count(d.Body, []byte(".")) t := time.Duration(dot_count) time.Sleep(t * time.Second) log.Printf("Done") + d.Ack(false) } }() From 489f140a8dd0aab35e0946a1b54fa1e505079846 Mon Sep 17 00:00:00 2001 From: Wayne Lund Date: Tue, 11 Apr 2017 11:15:11 -0700 Subject: [PATCH 011/659] migrated spring-amqp-samples-rabbitmq-tutorials to main rabbitmq site --- spring-amqp/README.md | 59 +++++ spring-amqp/mvnw | 233 ++++++++++++++++++ spring-amqp/mvnw.cmd | 145 +++++++++++ spring-amqp/pom.xml | 78 ++++++ spring-amqp/scripts.txt | 18 ++ .../RabbitAmqpTutorialsApplication.java | 58 +++++ .../tutorials/RabbitMQTutorialsRunner.java | 42 ++++ .../amqp/tutorials/tut1/Tut1Config.java | 49 ++++ .../amqp/tutorials/tut1/Tut1Receiver.java | 33 +++ .../amqp/tutorials/tut1/Tut1Sender.java | 42 ++++ .../amqp/tutorials/tut2/Tut2Config.java | 57 +++++ .../amqp/tutorials/tut2/Tut2Receiver.java | 53 ++++ .../amqp/tutorials/tut2/Tut2Sender.java | 54 ++++ .../amqp/tutorials/tut3/Tut3Config.java | 76 ++++++ .../amqp/tutorials/tut3/Tut3Receiver.java | 54 ++++ .../amqp/tutorials/tut3/Tut3Sender.java | 54 ++++ .../amqp/tutorials/tut4/Tut4Config.java | 87 +++++++ .../amqp/tutorials/tut4/Tut4Receiver.java | 54 ++++ .../amqp/tutorials/tut4/Tut4Sender.java | 55 +++++ .../amqp/tutorials/tut5/Tut5Config.java | 81 ++++++ .../amqp/tutorials/tut5/Tut5Receiver.java | 54 ++++ .../amqp/tutorials/tut5/Tut5Sender.java | 57 +++++ .../amqp/tutorials/tut6/Tut6Client.java | 44 ++++ .../amqp/tutorials/tut6/Tut6Config.java | 75 ++++++ .../amqp/tutorials/tut6/Tut6Server.java | 39 +++ .../src/main/resources/application-pcfdev.yml | 6 + .../src/main/resources/application-remote.yml | 5 + .../src/main/resources/application.yml | 11 + spring-amqp/src/main/resources/banner.txt | 4 + 29 files changed, 1677 insertions(+) create mode 100644 spring-amqp/README.md create mode 100755 spring-amqp/mvnw create mode 100644 spring-amqp/mvnw.cmd create mode 100644 spring-amqp/pom.xml create mode 100644 spring-amqp/scripts.txt create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java create mode 100644 spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java create mode 100644 spring-amqp/src/main/resources/application-pcfdev.yml create mode 100644 spring-amqp/src/main/resources/application-remote.yml create mode 100644 spring-amqp/src/main/resources/application.yml create mode 100644 spring-amqp/src/main/resources/banner.txt diff --git a/spring-amqp/README.md b/spring-amqp/README.md new file mode 100644 index 00000000..6de0858f --- /dev/null +++ b/spring-amqp/README.md @@ -0,0 +1,59 @@ +#RabbitMQ Tutorial Sample Application + +This project implements each of the [6 RabbitMQ Tutorials][1] using Spring AMQP. + +It is a CLI app that uses Spring Profiles to control its behavior. Each tutorial is a trio of classes: +sender, receiver, and configuration. + +[1]: https://www.rabbitmq.com/getstarted.html + +##Usage + +The app uses Spring Profiles to control what tutorial it's running, and if it's a +Sender or Receiver. Choose which tutorial to run by using these profiles: + +- {tut1|hello-world},{sender|receiver} +- {tut2|work-queues},{sender|receiver} +- {tut3|pub-sub|publish-subscribe},{sender|receiver} +- {tut4|routing},{sender|receiver} +- {tut5|topics},{sender|receiver} +- {tut6|rpc},{client|server} + +After building with maven, run the app however you like to run boot apps. + +For example: +``` +java -jar rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender +``` + +For tutorials 1-5, run the Receiver followed by the Sender. + +For tutorial 6, run the Server followed by the Client. + +##Configuration + +When running receivers/servers it's useful to set the duration the app runs to a longer time. Do this by setting +the `tutorial.client.duration` property. + +``` +java -jar rabbitmq-tutorials.jar --spring.profiles.active=tut2,receiver,remote --tutorial.client.duration=60000 +``` + +By default, Spring AMQP uses localhost to connect to RabbitMQ. In the sample, the `remote` profile +causes Spring to load the properties in `application-remote.yml` that are used for testing with a +non-local server. Set your own properties in the one in the project, or provide your own on the +command line when you run it. + +To use to a remote RabbitMQ installation set the following properties: + +``` +spring: + rabbitmq: + host: + username: + password: +``` + +To use this at runtime create a file called `application-remote.yml` (or properties) and set the properties in there. Then set the +remote profile as in the example above. See the Spring Boot and Spring AMQP documentation for more information on setting application +properties and AMQP properties specifically. diff --git a/spring-amqp/mvnw b/spring-amqp/mvnw new file mode 100755 index 00000000..a1ba1bf5 --- /dev/null +++ b/spring-amqp/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-amqp/mvnw.cmd b/spring-amqp/mvnw.cmd new file mode 100644 index 00000000..2b934e89 --- /dev/null +++ b/spring-amqp/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml new file mode 100644 index 00000000..cae28e65 --- /dev/null +++ b/spring-amqp/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + org.springframework.amqp + rabbit-tutorials + 1.7.1.RELEASE + jar + + rabbitmq-tutorials + Spring AMQP Implementations for RabbitMQ Tutorials + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + org.springframework.amqp.tutorials.RabbitMQTutorialsApplication + ZIP + + + + + + + + spring-all + Spring Snapshots + https://repo.spring.io/repo + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + diff --git a/spring-amqp/scripts.txt b/spring-amqp/scripts.txt new file mode 100644 index 00000000..4da91af9 --- /dev/null +++ b/spring-amqp/scripts.txt @@ -0,0 +1,18 @@ +#{tut1|hello-world},{sender|receiver} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=hello-world,receiver +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=hello-world,sender +#{tut2|work-queues},{sender|receiver} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=work-queues,receiver +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=work-queues,sender +#{tut3|pub-sub|publish-subscribe},{sender|receiver} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=pub-sub,receiver +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=pub-sub,sender +#{tut4|routing},{sender|receiver} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=routing,receiver +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=routing,sender +#{tut5|topics},{sender|receiver} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=topics,receiver +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=topics,sender +#{tut6|rpc},{client|server} +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=rpc,server +java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=rpc,client diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java new file mode 100644 index 00000000..73e55ea6 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -0,0 +1,58 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * @author Gary Russell + * @author Scott Deeg + * + */ +@SpringBootApplication +@EnableScheduling +public class RabbitMQTutorialsApplication { + + @Profile("usage_message") + @Bean + public CommandLineRunner usage() { + return new CommandLineRunner() { + + @Override + public void run(String... arg0) throws Exception { + System.out.println("This app uses Spring Profiles to control its behavior.\n"); + System.out.println("Sample usage: java -jar rabbit-tutorials.jar --spring.profiles.active=tut1,sender"); + } + + }; + } + + @Profile("!usage_message") + @Bean + public CommandLineRunner tutorial() { + return new RabbitMQTutorialsRunner(); + } + + public static void main(String[] args) throws Exception { + SpringApplication.run(RabbitMQTutorialsApplication.class, args); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java new file mode 100644 index 00000000..e7919b95 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.ConfigurableApplicationContext; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class RabbitMQTutorialsRunner implements CommandLineRunner { + + @Value("${tutorial.client.duration:0}") + private int duration; + + @Autowired + private ConfigurableApplicationContext ctx; + + @Override + public void run(String... arg0) throws Exception { + System.out.println("Ready ... running for " + duration + "ms"); + Thread.sleep(duration); + ctx.close(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java new file mode 100644 index 00000000..6553e9d5 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java @@ -0,0 +1,49 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + * + */ +@Profile({"tut1","hello-world"}) +@Configuration +public class Tut1Config { + + @Bean + public Queue hello() { + return new Queue("tut.hello"); + } + + @Profile("receiver") + @Bean + public Tut1Receiver receiver() { + return new Tut1Receiver(); + } + + @Profile("sender") + @Bean + public Tut1Sender sender() { + return new Tut1Sender(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java new file mode 100644 index 00000000..a535aad4 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java @@ -0,0 +1,33 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +@RabbitListener(queues = "tut.hello") +public class Tut1Receiver { + + @RabbitHandler + public void receive(String in) { + System.out.println(" [x] Received '" + in + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java new file mode 100644 index 00000000..d1010ae5 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut1Sender { + + @Autowired + private RabbitTemplate template; + + @Autowired + private Queue queue; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + String message = "Hello World!"; + this.template.convertAndSend(queue.getName(), message); + System.out.println(" [x] Sent '" + message + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java new file mode 100644 index 00000000..68e47b36 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java @@ -0,0 +1,57 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut2; + +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +@Profile({"tut2", "work-queues"}) +@Configuration +public class Tut2Config { + + @Bean + public Queue hello() { + return new Queue("tut.hello"); + } + + @Profile("receiver") + private static class ReceiverConfig { + + @Bean + public Tut2Receiver receiver1() { + return new Tut2Receiver(1); + } + + @Bean + public Tut2Receiver receiver2() { + return new Tut2Receiver(2); + } + + } + + @Profile("sender") + @Bean + public Tut2Sender sender() { + return new Tut2Sender(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java new file mode 100644 index 00000000..058309dd --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java @@ -0,0 +1,53 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut2; + +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.util.StopWatch; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +@RabbitListener(queues = "tut.hello") +public class Tut2Receiver { + + private final int instance; + + public Tut2Receiver(int i) { + this.instance = i; + } + + @RabbitHandler + public void receive(String in) throws InterruptedException { + StopWatch watch = new StopWatch(); + watch.start(); + System.out.println("instance " + this.instance + " [x] Received '" + in + "'"); + doWork(in); + watch.stop(); + System.out.println("instance " + this.instance + " [x] Done in " + watch.getTotalTimeSeconds() + "s"); + } + + private void doWork(String in) throws InterruptedException { + for (char ch : in.toCharArray()) { + if (ch == '.') { + Thread.sleep(1000); + } + } + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java new file mode 100644 index 00000000..100d113d --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut2; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut2Sender { + + @Autowired + private RabbitTemplate template; + + @Autowired + private Queue queue; + + int dots = 0; + + int count = 0; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + StringBuilder builder = new StringBuilder("Hello"); + if (dots++ == 3) { + dots = 1; + } + for (int i = 0; i < dots; i++) { + builder.append('.'); + } + builder.append(Integer.toString(++count)); + String message = builder.toString(); + template.convertAndSend(queue.getName(), message); + System.out.println(" [x] Sent '" + message + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java new file mode 100644 index 00000000..26fca0ff --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java @@ -0,0 +1,76 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut3; + +import org.springframework.amqp.core.AnonymousQueue; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +@Profile({"tut3", "pub-sub", "publish-subscribe"}) +@Configuration +public class Tut3Config { + + @Bean + public FanoutExchange fanout() { + return new FanoutExchange("tut.fanout"); + } + + @Profile("receiver") + private static class ReceiverConfig { + + @Bean + public Queue autoDeleteQueue1() { + return new AnonymousQueue(); + } + + @Bean + public Queue autoDeleteQueue2() { + return new AnonymousQueue(); + } + + @Bean + public Binding binding1(FanoutExchange fanout, Queue autoDeleteQueue1) { + return BindingBuilder.bind(autoDeleteQueue1).to(fanout); + } + + @Bean + public Binding binding2(FanoutExchange fanout, Queue autoDeleteQueue2) { + return BindingBuilder.bind(autoDeleteQueue2).to(fanout); + } + + @Bean + public Tut3Receiver receiver() { + return new Tut3Receiver(); + } + + } + + @Profile("sender") + @Bean + public Tut3Sender sender() { + return new Tut3Sender(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java new file mode 100644 index 00000000..f2bbe8cb --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut3; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.util.StopWatch; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut3Receiver { + + @RabbitListener(queues = "#{autoDeleteQueue1.name}") + public void receive1(String in) throws InterruptedException { + receive(in, 1); + } + + @RabbitListener(queues = "#{autoDeleteQueue2.name}") + public void receive2(String in) throws InterruptedException { + receive(in, 2); + } + + public void receive(String in, int receiver) throws InterruptedException { + StopWatch watch = new StopWatch(); + watch.start(); + System.out.println("instance " + receiver + " [x] Received '" + in + "'"); + doWork(in); + watch.stop(); + System.out.println("instance " + receiver + " [x] Done in " + watch.getTotalTimeSeconds() + "s"); + } + + private void doWork(String in) throws InterruptedException { + for (char ch : in.toCharArray()) { + if (ch == '.') { + Thread.sleep(1000); + } + } + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java new file mode 100644 index 00000000..126bbfdd --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut3; + +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut3Sender { + + @Autowired + private RabbitTemplate template; + + @Autowired + private FanoutExchange fanout; + + int dots = 0; + + int count = 0; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + StringBuilder builder = new StringBuilder("Hello"); + if (dots++ == 3) { + dots = 1; + } + for (int i = 0; i < dots; i++) { + builder.append('.'); + } + builder.append(Integer.toString(++count)); + String message = builder.toString(); + template.convertAndSend(fanout.getName(), "", message); + System.out.println(" [x] Sent '" + message + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java new file mode 100644 index 00000000..4f5b311e --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java @@ -0,0 +1,87 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut4; + +import org.springframework.amqp.core.AnonymousQueue; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + * + */ +@Profile({"tut4","routing"}) +@Configuration +public class Tut4Config { + + @Bean + public DirectExchange direct() { + return new DirectExchange("tut.direct"); + } + + @Profile("receiver") + private static class ReceiverConfig { + + @Bean + public Queue autoDeleteQueue1() { + return new AnonymousQueue(); + } + + @Bean + public Queue autoDeleteQueue2() { + return new AnonymousQueue(); + } + + @Bean + public Binding binding1a(DirectExchange direct, Queue autoDeleteQueue1) { + return BindingBuilder.bind(autoDeleteQueue1).to(direct).with("orange"); + } + + @Bean + public Binding binding1b(DirectExchange direct, Queue autoDeleteQueue1) { + return BindingBuilder.bind(autoDeleteQueue1).to(direct).with("black"); + } + + @Bean + public Binding binding2a(DirectExchange direct, Queue autoDeleteQueue2) { + return BindingBuilder.bind(autoDeleteQueue2).to(direct).with("green"); + } + + @Bean + public Binding binding2b(DirectExchange direct, Queue autoDeleteQueue2) { + return BindingBuilder.bind(autoDeleteQueue2).to(direct).with("black"); + } + + @Bean + public Tut4Receiver receiver() { + return new Tut4Receiver(); + } + + } + + @Profile("sender") + @Bean + public Tut4Sender sender() { + return new Tut4Sender(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java new file mode 100644 index 00000000..fa384c14 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut4; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.util.StopWatch; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut4Receiver { + + @RabbitListener(queues = "#{autoDeleteQueue1.name}") + public void receive1(String in) throws InterruptedException { + receive(in, 1); + } + + @RabbitListener(queues = "#{autoDeleteQueue2.name}") + public void receive2(String in) throws InterruptedException { + receive(in, 2); + } + + public void receive(String in, int receiver) throws InterruptedException { + StopWatch watch = new StopWatch(); + watch.start(); + System.out.println("instance " + receiver + " [x] Received '" + in + "'"); + doWork(in); + watch.stop(); + System.out.println("instance " + receiver + " [x] Done in " + watch.getTotalTimeSeconds() + "s"); + } + + private void doWork(String in) throws InterruptedException { + for (char ch : in.toCharArray()) { + if (ch == '.') { + Thread.sleep(1000); + } + } + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java new file mode 100644 index 00000000..9d60374a --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java @@ -0,0 +1,55 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut4; + +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut4Sender { + + @Autowired + private RabbitTemplate template; + + @Autowired + private DirectExchange direct; + + private int index; + + private int count; + + private final String[] keys = {"orange", "black", "green"}; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + StringBuilder builder = new StringBuilder("Hello to "); + if (++this.index == 3) { + this.index = 0; + } + String key = keys[this.index]; + builder.append(key).append(' '); + builder.append(Integer.toString(++this.count)); + String message = builder.toString(); + template.convertAndSend(direct.getName(), key, message); + System.out.println(" [x] Sent '" + message + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java new file mode 100644 index 00000000..10253b8a --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java @@ -0,0 +1,81 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut5; + +import org.springframework.amqp.core.AnonymousQueue; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +@Profile({"tut5","topics"}) +@Configuration +public class Tut5Config { + + @Bean + public TopicExchange topic() { + return new TopicExchange("tut.topic"); + } + + @Profile("receiver") + private static class ReceiverConfig { + + @Bean + public Tut5Receiver receiver() { + return new Tut5Receiver(); + } + + @Bean + public Queue autoDeleteQueue1() { + return new AnonymousQueue(); + } + + @Bean + public Queue autoDeleteQueue2() { + return new AnonymousQueue(); + } + + @Bean + public Binding binding1a(TopicExchange topic, Queue autoDeleteQueue1) { + return BindingBuilder.bind(autoDeleteQueue1).to(topic).with("*.orange.*"); + } + + @Bean + public Binding binding1b(TopicExchange topic, Queue autoDeleteQueue1) { + return BindingBuilder.bind(autoDeleteQueue1).to(topic).with("*.*.rabbit"); + } + + @Bean + public Binding binding2a(TopicExchange topic, Queue autoDeleteQueue2) { + return BindingBuilder.bind(autoDeleteQueue2).to(topic).with("lazy.#"); + } + + } + + @Profile("sender") + @Bean + public Tut5Sender sender() { + return new Tut5Sender(); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java new file mode 100644 index 00000000..26460f83 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut5; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.util.StopWatch; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut5Receiver { + + @RabbitListener(queues = "#{autoDeleteQueue1.name}") + public void receive1(String in) throws InterruptedException { + receive(in, 1); + } + + @RabbitListener(queues = "#{autoDeleteQueue2.name}") + public void receive2(String in) throws InterruptedException { + receive(in, 2); + } + + public void receive(String in, int receiver) throws InterruptedException { + StopWatch watch = new StopWatch(); + watch.start(); + System.out.println("instance " + receiver + " [x] Received '" + in + "'"); + doWork(in); + watch.stop(); + System.out.println("instance " + receiver + " [x] Done in " + watch.getTotalTimeSeconds() + "s"); + } + + private void doWork(String in) throws InterruptedException { + for (char ch : in.toCharArray()) { + if (ch == '.') { + Thread.sleep(1000); + } + } + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java new file mode 100644 index 00000000..48a20aa7 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java @@ -0,0 +1,57 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut5; + +import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut5Sender { + + @Autowired + private RabbitTemplate template; + + @Autowired + private TopicExchange topic; + + + private int index; + + private int count; + + private final String[] keys = {"quick.orange.rabbit", "lazy.orange.elephant", "quick.orange.fox", + "lazy.brown.fox", "lazy.pink.rabbit", "quick.brown.fox"}; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + StringBuilder builder = new StringBuilder("Hello to "); + if (++this.index == keys.length) { + this.index = 0; + } + String key = keys[this.index]; + builder.append(key).append(' '); + builder.append(Integer.toString(++this.count)); + String message = builder.toString(); + template.convertAndSend(topic.getName(), key, message); + System.out.println(" [x] Sent '" + message + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java new file mode 100644 index 00000000..3ebaded7 --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java @@ -0,0 +1,44 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut6; + +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut6Client { + + @Autowired + private RabbitTemplate template; + + @Autowired + private DirectExchange exchange; + + int start = 0; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + System.out.println(" [x] Requesting fib(" + start + ")"); + Integer response = (Integer) template.convertSendAndReceive(exchange.getName(), "rpc", start++); + System.out.println(" [.] Got '" + response + "'"); + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java new file mode 100644 index 00000000..ded22fee --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java @@ -0,0 +1,75 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut6; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +/** + * @author Gary Russell + * @author Scott Deeg + * + */ +@Profile({"tut6","rpc"}) +@Configuration +public class Tut6Config { + + @Profile("client") + private static class ClientConfig { + + @Bean + public DirectExchange exchange() { + return new DirectExchange("tut.rpc"); + } + + @Bean + public Tut6Client client() { + return new Tut6Client(); + } + + } + + @Profile("server") + private static class ServerConfig { + + @Bean + public Queue queue() { + return new Queue("tut.rpc.requests"); + } + + @Bean + public DirectExchange exchange() { + return new DirectExchange("tut.rpc"); + } + + @Bean + public Binding binding(DirectExchange exchange, Queue queue) { + return BindingBuilder.bind(queue).to(exchange).with("rpc"); + } + + @Bean + public Tut6Server server() { + return new Tut6Server(); + } + + } + +} diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java new file mode 100644 index 00000000..1c83acfc --- /dev/null +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java @@ -0,0 +1,39 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.amqp.tutorials.tut6; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; + +/** + * @author Gary Russell + * @author Scott Deeg + */ +public class Tut6Server { + + @RabbitListener(queues = "tut.rpc.requests") + // @SendTo("tut.rpc.replies") used when the client doesn't set replyTo. + public int fibonacci(int n) { + System.out.println(" [x] Received request for " + n); + int result = fib(n); + System.out.println(" [.] Returned " + result); + return result; + } + + public int fib(int n) { + return n == 0 ? 0 : n == 1 ? 1 : (fib(n - 1) + fib(n - 2)); + } + +} diff --git a/spring-amqp/src/main/resources/application-pcfdev.yml b/spring-amqp/src/main/resources/application-pcfdev.yml new file mode 100644 index 00000000..1ea622fd --- /dev/null +++ b/spring-amqp/src/main/resources/application-pcfdev.yml @@ -0,0 +1,6 @@ +spring: + rabbitmq: + host: rabbitmq.local.pcfdev.io + username: f5e10385-1db5-4a98-9d96-99600f55a500 + password: u6nog1g1pjadcj95937bk41vgb + virtualHost: 5888c0ff-a99e-4749-90c9-77167abb8616 \ No newline at end of file diff --git a/spring-amqp/src/main/resources/application-remote.yml b/spring-amqp/src/main/resources/application-remote.yml new file mode 100644 index 00000000..6914dca2 --- /dev/null +++ b/spring-amqp/src/main/resources/application-remote.yml @@ -0,0 +1,5 @@ +spring: + rabbitmq: + host: rabbitserver + username: tutorial + password: tutorial diff --git a/spring-amqp/src/main/resources/application.yml b/spring-amqp/src/main/resources/application.yml new file mode 100644 index 00000000..452d6169 --- /dev/null +++ b/spring-amqp/src/main/resources/application.yml @@ -0,0 +1,11 @@ +spring: + profiles: + active: usage_message + +logging: + level: + org: ERROR + +tutorial: + client: + duration: 10000 diff --git a/spring-amqp/src/main/resources/banner.txt b/spring-amqp/src/main/resources/banner.txt new file mode 100644 index 00000000..576a98ea --- /dev/null +++ b/spring-amqp/src/main/resources/banner.txt @@ -0,0 +1,4 @@ + __ __ ___ +|__)_ |_ |_ .|_|\/|/ \ | |_ _ _. _ | _ +| \(_||_)|_)||_| |\_\/ | |_||_(_)| |(_||_) + \ No newline at end of file From 2b12c9cb148e5541d48db4a6d4c557746be0bb9f Mon Sep 17 00:00:00 2001 From: Wayne Lund Date: Tue, 11 Apr 2017 13:45:43 -0700 Subject: [PATCH 012/659] updated the readme to include spring-amqp --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 715c4156..9bf48c9c 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,8 @@ The following ports are available: * [Ruby (with Bunny)](./ruby) * [Scala](./scala) * [Swift](./swift) - + * [Spring Amqp](./spring-amqp) + ## License Released under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt). From 79f6b14d579419e4ce4814b0d8a61c472c554f79 Mon Sep 17 00:00:00 2001 From: Wayne Lund Date: Wed, 12 Apr 2017 18:02:32 -0700 Subject: [PATCH 013/659] minor fixes to match tutorial diagrams --- ...ion.java => RabbitMQTutorialsApplication.java} | 15 ++++++++++++++- .../amqp/tutorials/tut1/Tut1Config.java | 4 ++-- .../amqp/tutorials/tut1/Tut1Receiver.java | 3 ++- spring-amqp/src/main/resources/application.yml | 2 +- 4 files changed, 19 insertions(+), 5 deletions(-) rename spring-amqp/src/main/java/org/springframework/amqp/tutorials/{RabbitAmqpTutorialsApplication.java => RabbitMQTutorialsApplication.java} (57%) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java similarity index 57% rename from spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java rename to spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java index 73e55ea6..405f42aa 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java @@ -39,7 +39,20 @@ public CommandLineRunner usage() { @Override public void run(String... arg0) throws Exception { System.out.println("This app uses Spring Profiles to control its behavior.\n"); - System.out.println("Sample usage: java -jar rabbit-tutorials.jar --spring.profiles.active=tut1,sender"); + System.out.println("Options are: "); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,client"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,server"); + } }; diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java index 6553e9d5..09b87f89 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java @@ -23,7 +23,7 @@ /** * @author Gary Russell * @author Scott Deeg - * + * @author Wayne Lund */ @Profile({"tut1","hello-world"}) @Configuration @@ -31,7 +31,7 @@ public class Tut1Config { @Bean public Queue hello() { - return new Queue("tut.hello"); + return new Queue("hello"); } @Profile("receiver") diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java index a535aad4..fc5721c7 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java @@ -21,8 +21,9 @@ /** * @author Gary Russell * @author Scott Deeg + * @author Wayne Lund */ -@RabbitListener(queues = "tut.hello") +@RabbitListener(queues = "hello") public class Tut1Receiver { @RabbitHandler diff --git a/spring-amqp/src/main/resources/application.yml b/spring-amqp/src/main/resources/application.yml index 452d6169..fce427c5 100644 --- a/spring-amqp/src/main/resources/application.yml +++ b/spring-amqp/src/main/resources/application.yml @@ -8,4 +8,4 @@ logging: tutorial: client: - duration: 10000 + duration: 600000 From 8cb260496fb6ea72ab6a42be805552889ab216c5 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 17 Apr 2017 23:41:48 +0200 Subject: [PATCH 014/659] Explain how to build the tutorials; provide examples that are JAR version-agnostic --- spring-amqp/README.md | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/spring-amqp/README.md b/spring-amqp/README.md index 6de0858f..4bb80b76 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -1,4 +1,4 @@ -#RabbitMQ Tutorial Sample Application +# RabbitMQ Tutorial Using Spring AMQP This project implements each of the [6 RabbitMQ Tutorials][1] using Spring AMQP. @@ -7,10 +7,16 @@ sender, receiver, and configuration. [1]: https://www.rabbitmq.com/getstarted.html -##Usage +## Usage + +These tutorials use Maven. To build them run + +``` +mvn package +``` The app uses Spring Profiles to control what tutorial it's running, and if it's a -Sender or Receiver. Choose which tutorial to run by using these profiles: +Sender or Receiver. Choose which tutorial to run by using these profiles: - {tut1|hello-world},{sender|receiver} - {tut2|work-queues},{sender|receiver} @@ -22,15 +28,26 @@ Sender or Receiver. Choose which tutorial to run by using these profiles: After building with maven, run the app however you like to run boot apps. For example: + ``` -java -jar rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender +java -jar target/rabbit-tutorials-*.jar --spring.profiles.active=work-queues,sender ``` -For tutorials 1-5, run the Receiver followed by the Sender. +will run the publisher part of tutorial 2 (Work Queues). + +For tutorials 1-5, run the consumer (receiver) followed by the publisher (sender): + +``` +# shell 1 +java -jar target/rabbit-tutorials-*.jar --spring.profiles.active=work-queues,receiver + +# shell 2 +java -jar target/rabbit-tutorials-*.jar --spring.profiles.active=work-queues,sender +``` For tutorial 6, run the Server followed by the Client. -##Configuration +##C onfiguration When running receivers/servers it's useful to set the duration the app runs to a longer time. Do this by setting the `tutorial.client.duration` property. @@ -55,5 +72,6 @@ spring: ``` To use this at runtime create a file called `application-remote.yml` (or properties) and set the properties in there. Then set the -remote profile as in the example above. See the Spring Boot and Spring AMQP documentation for more information on setting application +remote profile as in the example above. See the [Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) +and [Spring AMQP documentation](http://docs.spring.io/spring-amqp/reference/html/) for more information on setting application properties and AMQP properties specifically. From 8a65d436c5e2468073600892e847963cf2582476 Mon Sep 17 00:00:00 2001 From: Wayne Lund Date: Mon, 24 Apr 2017 11:23:40 -0700 Subject: [PATCH 015/659] modified src code to match tutorial docs. The name was manual before and I needed it to match the generated application code from spring-initializr --- ...Application.java => RabbitAmqpTutorialsApplication.java} | 6 +++--- ...QTutorialsRunner.java => RabbitAmqpTutorialsRunner.java} | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename spring-amqp/src/main/java/org/springframework/amqp/tutorials/{RabbitMQTutorialsApplication.java => RabbitAmqpTutorialsApplication.java} (94%) rename spring-amqp/src/main/java/org/springframework/amqp/tutorials/{RabbitMQTutorialsRunner.java => RabbitAmqpTutorialsRunner.java} (94%) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java similarity index 94% rename from spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java rename to spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java index 405f42aa..861229ca 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsApplication.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -29,7 +29,7 @@ */ @SpringBootApplication @EnableScheduling -public class RabbitMQTutorialsApplication { +public class RabbitAmqpTutorialsApplication { @Profile("usage_message") @Bean @@ -61,11 +61,11 @@ public void run(String... arg0) throws Exception { @Profile("!usage_message") @Bean public CommandLineRunner tutorial() { - return new RabbitMQTutorialsRunner(); + return new RabbitAmqpTutorialsRunner(); } public static void main(String[] args) throws Exception { - SpringApplication.run(RabbitMQTutorialsApplication.class, args); + SpringApplication.run(RabbitAmqpTutorialsApplication.class, args); } } diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java similarity index 94% rename from spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java rename to spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java index e7919b95..be9b04be 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitMQTutorialsRunner.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java @@ -24,7 +24,7 @@ * @author Gary Russell * @author Scott Deeg */ -public class RabbitMQTutorialsRunner implements CommandLineRunner { +public class RabbitAmqpTutorialsRunner implements CommandLineRunner { @Value("${tutorial.client.duration:0}") private int duration; From c697430d2e81f4df322f01bac2f84e62486a6a2e Mon Sep 17 00:00:00 2001 From: Wayne Lund Date: Tue, 25 Apr 2017 14:01:10 -0700 Subject: [PATCH 016/659] fixing a few bugs reported by fe-west team (Benjamin Kamysz) --- spring-amqp/README.md | 5 +++++ spring-amqp/pom.xml | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/spring-amqp/README.md b/spring-amqp/README.md index 6de0858f..2eb0d9ac 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -7,6 +7,11 @@ sender, receiver, and configuration. [1]: https://www.rabbitmq.com/getstarted.html +##Prerequisites +These tutorials assume RabbitMQ is installed and running +on localhost on standard port (5672). In case you use +a different host, port or credentials, connections settings would require adjusting. + ##Usage The app uses Spring Profiles to control what tutorial it's running, and if it's a diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index cae28e65..84d0c7f9 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 1.4.0.RELEASE + 1.5.2.RELEASE @@ -42,7 +42,7 @@ org.springframework.boot spring-boot-maven-plugin - org.springframework.amqp.tutorials.RabbitMQTutorialsApplication + org.springframework.amqp.tutorials.RabbitAmqpTutorialsApplication ZIP From b324cac960bb981860307062ccc5528ecaff91a6 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 25 Apr 2017 23:27:24 +0200 Subject: [PATCH 017/659] Cosmetics --- spring-amqp/README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/spring-amqp/README.md b/spring-amqp/README.md index d6dadeaf..baca1fb0 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -7,14 +7,15 @@ sender, receiver, and configuration. [1]: https://www.rabbitmq.com/getstarted.html -##Prerequisites -These tutorials assume RabbitMQ is installed and running -on localhost on standard port (5672). In case you use +## Prerequisites +These tutorials assume RabbitMQ is [installed](http://rabbitmq.com/download.html) and running +on `localhost` using the standard port (`5672`). In case you use a different host, port or credentials, connections settings would require adjusting. -##Usage +## Usage These tutorials use Maven. To build them run + ``` mvn package ``` @@ -59,10 +60,11 @@ the `tutorial.client.duration` property. java -jar rabbitmq-tutorials.jar --spring.profiles.active=tut2,receiver,remote --tutorial.client.duration=60000 ``` -By default, Spring AMQP uses localhost to connect to RabbitMQ. In the sample, the `remote` profile -causes Spring to load the properties in `application-remote.yml` that are used for testing with a -non-local server. Set your own properties in the one in the project, or provide your own on the -command line when you run it. +By default, Spring AMQP uses localhost to connect to RabbitMQ. In the +sample, the `remote` profile causes Spring to load the properties in +`application-remote.yml` that are used for testing with a non-local +server. Set your own properties in the one in the project, or provide +your own on the command line when you run it. To use to a remote RabbitMQ installation set the following properties: From 29fd958571c215cf9682f99ea8f4372f4c6cd22f Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 25 Apr 2017 23:27:54 +0200 Subject: [PATCH 018/659] Cosmetics --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9bf48c9c..02d515e3 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The following ports are available: * [Ruby (with Bunny)](./ruby) * [Scala](./scala) * [Swift](./swift) - * [Spring Amqp](./spring-amqp) + * [Spring AMQP](./spring-amqp) ## License From 2e6ccdba965f2f1c9c2f35ce552f4e84afe9690b Mon Sep 17 00:00:00 2001 From: Brandon Shutter Date: Thu, 27 Apr 2017 11:17:09 -0400 Subject: [PATCH 019/659] Update rpc_client.js Comparison msg.properties.correlationId == corr may cause unexpected type coercion --- javascript-nodejs/src/rpc_client.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript-nodejs/src/rpc_client.js b/javascript-nodejs/src/rpc_client.js index d99b21be..f6fd89ec 100755 --- a/javascript-nodejs/src/rpc_client.js +++ b/javascript-nodejs/src/rpc_client.js @@ -4,7 +4,7 @@ var amqp = require('amqplib/callback_api'); var args = process.argv.slice(2); -if (args.length == 0) { +if (args.length === 0) { console.log("Usage: rpc_client.js num"); process.exit(1); } @@ -18,7 +18,7 @@ amqp.connect('amqp://localhost', function(err, conn) { console.log(' [x] Requesting fib(%d)', num); ch.consume(q.queue, function(msg) { - if (msg.properties.correlationId == corr) { + if (msg.properties.correlationId === corr) { console.log(' [.] Got %s', msg.content.toString()); setTimeout(function() { conn.close(); process.exit(0) }, 500); } From 50b68f7263fa1e5aa71dee862357d625d64b48ac Mon Sep 17 00:00:00 2001 From: Brandon Shutter Date: Thu, 27 Apr 2017 11:21:07 -0400 Subject: [PATCH 020/659] Update rpc_server.js Avoid unexpected type coercion --- javascript-nodejs/src/rpc_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript-nodejs/src/rpc_server.js b/javascript-nodejs/src/rpc_server.js index 76f77219..c9e0f121 100755 --- a/javascript-nodejs/src/rpc_server.js +++ b/javascript-nodejs/src/rpc_server.js @@ -26,7 +26,7 @@ amqp.connect('amqp://localhost', function(err, conn) { }); function fibonacci(n) { - if (n == 0 || n == 1) + if (n === 0 || n === 1) return n; else return fibonacci(n - 1) + fibonacci(n - 2); From 42188bcb29bcefd9cb8e661948c41f74bcf1109d Mon Sep 17 00:00:00 2001 From: Dave Cottlehuber Date: Thu, 23 Mar 2017 14:29:37 +0000 Subject: [PATCH 021/659] ignores --- swift/.DS_Store | Bin 6148 -> 0 bytes swift/.gitignore | 1 + swift/tutorial1/.DS_Store | Bin 6148 -> 0 bytes swift/tutorial2/.DS_Store | Bin 6148 -> 0 bytes swift/tutorial3/.DS_Store | Bin 6148 -> 0 bytes swift/tutorial4/.DS_Store | Bin 6148 -> 0 bytes swift/tutorial5/.DS_Store | Bin 6148 -> 0 bytes 7 files changed, 1 insertion(+) delete mode 100644 swift/.DS_Store delete mode 100644 swift/tutorial1/.DS_Store delete mode 100644 swift/tutorial2/.DS_Store delete mode 100644 swift/tutorial3/.DS_Store delete mode 100644 swift/tutorial4/.DS_Store delete mode 100644 swift/tutorial5/.DS_Store diff --git a/swift/.DS_Store b/swift/.DS_Store deleted file mode 100644 index 442796884474b82f4322f60ea75d8d4f2ed17710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOKL(v5UfsI7~Htba<1SF2GJ9E0Rw>`h=Rnd-zw+I(Ng_EBF}6BZbCJ5*Gx~> zJYFqczXo8-^Xmeb1DMhs@#$e~e(pZ9hsqd{&O1)n;RSmvJ~pH3+X?4B;T>oC@hAUu z*dGsXdGl?mvQj__NC7Dz1*E_q6!6|lo6ZsyrGONW0v84R`_Sl)y>Lj3PX|Mc0K^H? zVO+;7L2RBN_QD~N8JZ=Pm{h9~!;;Q?tGZq|BqkkJ!-v(AttJ$Ur}O?6<*=TpC{yTU`_%7~f}aSSz;hO(!v?G^2thXN4a( zdRxO^R6r;9m@es-7PK;dqr#8yz`QU{;RkPGGK3wf^`|4SCv-<1vwx3T&MROg!c#3m z7rB;j58e#93+k^k+f#Z@DIM)e?3YFiib^LJ4<9aO zcJYMbBs=0K(w$tYXr(D&3al%zrI$V4|4%+Y|F4tm$`mjK{*?l*oei@Ah7|YK#^89b tP2d-BHtrV`D+(&I6{9b2#r)4i4DAV5fN8{_h!&WA2#5?;m;%45z&mZBdh-AP diff --git a/swift/tutorial2/.DS_Store b/swift/tutorial2/.DS_Store deleted file mode 100644 index ff5eeaf6464dda4b7c9095d273a187f00a4f2050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG*Sm41LjA47eF^i#`@lYPfmr8^g?Zx0i zL=s57R4S>@gYK#Tkk!yGfdzm$RZ-NK5Oq%u9eMDKC}oZpJmC%-T;P0SqQB_Uy`N%> zfts;k`wSdgccJ(H z6+fBDB7Z+6dci<2@Xr{KS-q}TJe1$9-;SquZKB>%RWxo?gF<`n5x|cAN6yNijVHAk YS2>P`I*a;CIx!vsg^*~1fnQ+Y13ZE}p#T5? diff --git a/swift/tutorial3/.DS_Store b/swift/tutorial3/.DS_Store deleted file mode 100644 index cd89a0f9c62638fa230b2249914b62bf83b1ec65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ait15PhS2Sn#so#bdy`u=oSrQh&hx0i_jn*^(k#@z_uCqx>M>Wa6^L9@dM9 z%)sO&le{E-&?Eyu%D!0w3jlMvqG)BpG(6dLk_XR-lID29Gw!j)HLfNm`imjm`#E;# z=@Ezfe?!ekg9mhsM{Kr_%XJ;w&OT%FdOWj@Rn_#n8u*CiW#S*XW*eJ5b9MU@X7_Zs z+xJBE!WD1@Tme_W6`%sVv(@HjhF-b?u7E4BS3u8)Kvyg>4uYP8M;gG`6OIN@Z7%OmU z&4u3oH~eKLll(EoTdsgB@Xr*GS+%Z8epJ3&zkQzGwSj&|SJQEWR%on`9sz9VIdYLY dtv_g;5re36* zQpyaBo;1>v)3X71%4F=R=??78!fPbab#tDF9KQ(aBiX zTtYb^W0A2pWDiY@N;InE6hn;8c*x_5jJ=`JAvyVwyz*D_B58HbAJTA0Vd$kR;0g>C zm{@bJ_x}}tnb9PFNb!~{;0pXR1!P*T%N0K=->u(1Pw(15zoo0`xLzwX)(4LOHuM}h fPo35uw9auw#@DN3D{gMq-&GaTw0Q8F=FvPy<=e z4MJ!v*>60a=h#n*?ExT*uAT!k08>^)QDda2dvxf?gC|7Eb3EYzH(28W=OYvSMVGGq z6gzaR4ffanjEbHbw`l2a@VLI4uc~I#+BUY!pEEa2S=QaI0$!UXl{$o3e=@J$4q>+U z`>TD))M!G1P#_ct1wsKTU^fw_C!t0t5DJ6>Ulh>uA+ahJj=f<%I@shCfT+*tTxe@9 zp`7GcIQE7dVG*MejVhjEh|%d!9#=T_hDL{Y@*)1^kK{%2*ExU6;gG^G+E5@A7%FgV z-I?D1m;7Z$ll&nidZ9ol@Xr*GNx3Q)+?3y~-?pcBZDPG<)uM5|8Z5L2j{tV`968H_ cHlEaGT;bRo>MZKdbYeUNvLMlf0>7ZZJJ4}G8vp Date: Mon, 1 May 2017 12:29:05 +0000 Subject: [PATCH 022/659] elixir: use 0.2.1 now its released --- elixir/mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elixir/mix.exs b/elixir/mix.exs index 0f0d2b79..631bdf14 100644 --- a/elixir/mix.exs +++ b/elixir/mix.exs @@ -28,7 +28,7 @@ defmodule RabbitmqTutorials.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:amqp, "~> 0.2.0-pre.2"}, + {:amqp, "~> 0.2.1"}, ] end end From bc6d644dfcb4037b2805c94f9fe4218ccc32e9ea Mon Sep 17 00:00:00 2001 From: Matt Baker Date: Mon, 29 May 2017 15:11:21 -0700 Subject: [PATCH 023/659] switch C# to using autoAck argument --- dotnet-visual-studio/1_Receive/Program.cs | 2 +- dotnet-visual-studio/2_Worker/Program.cs | 2 +- dotnet-visual-studio/3_ReceiveLogs/Program.cs | 2 +- dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs | 2 +- dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs | 2 +- dotnet-visual-studio/6_RPCClient/RPCClient.cs | 2 +- dotnet-visual-studio/6_RPCServer/Program.cs | 2 +- dotnet/RPCClient/RPCClient.cs | 2 +- dotnet/RPCServer/RPCServer.cs | 2 +- dotnet/Receive/Receive.cs | 2 +- dotnet/ReceiveLogs/ReceiveLogs.cs | 4 ++-- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 2 +- dotnet/Worker/Worker.cs | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/Program.cs b/dotnet-visual-studio/1_Receive/Program.cs index 53cf375c..608b3bf6 100644 --- a/dotnet-visual-studio/1_Receive/Program.cs +++ b/dotnet-visual-studio/1_Receive/Program.cs @@ -22,7 +22,7 @@ public static void Main() var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; - channel.BasicConsume(queue: "hello", noAck: true, consumer: consumer); + channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet-visual-studio/2_Worker/Program.cs b/dotnet-visual-studio/2_Worker/Program.cs index a83e1ad9..886799fa 100644 --- a/dotnet-visual-studio/2_Worker/Program.cs +++ b/dotnet-visual-studio/2_Worker/Program.cs @@ -32,7 +32,7 @@ public static void Main() channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; - channel.BasicConsume(queue: "task_queue", noAck: false, consumer: consumer); + channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet-visual-studio/3_ReceiveLogs/Program.cs b/dotnet-visual-studio/3_ReceiveLogs/Program.cs index b15e3350..b01ef1aa 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/Program.cs +++ b/dotnet-visual-studio/3_ReceiveLogs/Program.cs @@ -23,7 +23,7 @@ public static void Main() var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] {0}", message); }; - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs index fc2219ea..c67cac1d 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs @@ -38,7 +38,7 @@ public static void Main(string[] args) var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs index 2a8094a4..b10dde8d 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs @@ -31,7 +31,7 @@ public static void Main(string[] args) Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); var consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); while(true) { diff --git a/dotnet-visual-studio/6_RPCClient/RPCClient.cs b/dotnet-visual-studio/6_RPCClient/RPCClient.cs index 62f7d29c..414e414d 100644 --- a/dotnet-visual-studio/6_RPCClient/RPCClient.cs +++ b/dotnet-visual-studio/6_RPCClient/RPCClient.cs @@ -20,7 +20,7 @@ public RPCClient() channel = connection.CreateModel(); replyQueueName = channel.QueueDeclare().QueueName; consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: replyQueueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer); } public string Call(string message) diff --git a/dotnet-visual-studio/6_RPCServer/Program.cs b/dotnet-visual-studio/6_RPCServer/Program.cs index 93bc5321..7a8969d9 100644 --- a/dotnet-visual-studio/6_RPCServer/Program.cs +++ b/dotnet-visual-studio/6_RPCServer/Program.cs @@ -14,7 +14,7 @@ public static void Main() channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); channel.BasicQos(0, 1, false); var consumer = new EventingBasicConsumer(channel); - channel.BasicConsume(queue: "rpc_queue", noAck: false, consumer: consumer); + channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); Console.WriteLine(" [x] Awaiting RPC requests"); consumer.Received += (model, ea) => diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 1c7159d6..6a3737b8 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -20,7 +20,7 @@ public RPCClient() channel = connection.CreateModel(); replyQueueName = channel.QueueDeclare().QueueName; consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: replyQueueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer); } public string Call(string message) diff --git a/dotnet/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs index 12197395..15b9853f 100644 --- a/dotnet/RPCServer/RPCServer.cs +++ b/dotnet/RPCServer/RPCServer.cs @@ -14,7 +14,7 @@ public static void Main() channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); channel.BasicQos(0, 1, false); var consumer = new EventingBasicConsumer(channel); - channel.BasicConsume(queue: "rpc_queue", noAck: false, consumer: consumer); + channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); Console.WriteLine(" [x] Awaiting RPC requests"); consumer.Received += (model, ea) => diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs index 702d2918..034fa9df 100644 --- a/dotnet/Receive/Receive.cs +++ b/dotnet/Receive/Receive.cs @@ -20,7 +20,7 @@ public static void Main() var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; - channel.BasicConsume(queue: "hello", noAck: true, consumer: consumer); + channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs index ba11bc30..67200ee2 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet/ReceiveLogs/ReceiveLogs.cs @@ -17,7 +17,7 @@ public static void Main() channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); Console.WriteLine(" [*] Waiting for logs."); - + var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { @@ -25,7 +25,7 @@ public static void Main() var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] {0}", message); }; - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs index 34602983..ae78cfa4 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -37,7 +37,7 @@ public static int Main(string[] args) var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs index 912ce5c6..b848c483 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -37,7 +37,7 @@ public static int Main(string[] args) var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; - channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index c12e49fb..5773df61 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -32,7 +32,7 @@ public static void Main() channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; - channel.BasicConsume(queue: "task_queue", noAck: false, consumer: consumer); + channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); From cfe6112fbf3f3aa838df2b9151f0c62fdfe9d856 Mon Sep 17 00:00:00 2001 From: Travis Obregon Date: Mon, 5 Jun 2017 18:15:10 +0100 Subject: [PATCH 024/659] Update NewTask.cs Use the Persistent property instead since the setter method is deprecated. The Persistent property is also being used on the online tutorial. --- dotnet/NewTask/NewTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/NewTask/NewTask.cs b/dotnet/NewTask/NewTask.cs index 49bbb1ea..9ee3b664 100644 --- a/dotnet/NewTask/NewTask.cs +++ b/dotnet/NewTask/NewTask.cs @@ -16,7 +16,7 @@ public static void Main(string[] args) var body = Encoding.UTF8.GetBytes(message); var properties = channel.CreateBasicProperties(); - properties.SetPersistent(true); + properties.Persistent = true; channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); Console.WriteLine(" [x] Sent {0}", message); From 4d1bfbc3eae9f88122a21e2ad8fd7931ebe4f905 Mon Sep 17 00:00:00 2001 From: kjnilsson Date: Mon, 24 Jul 2017 17:00:03 +0100 Subject: [PATCH 025/659] Update dotnet to use v5.0 of the client --- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/README.md | 24 +++++++++---------- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- .../ReceiveLogsDirect.csproj | 2 +- .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Receiver | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- 14 files changed, 25 insertions(+), 25 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 82752b2f..2eabb57d 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 04c0435d..8c596aff 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 357f2c9b..35b146c3 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index fe60b782..0ff0415e 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/README.md b/dotnet/README.md index 892958c8..08e2452c 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -30,30 +30,30 @@ on windows cd into each project and run `dotnet restore` manually. #### [Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-dotnet.html) - dotnet run -p Receive - dotnet run -p Send + dotnet run -p Receive/Receive.csproj + dotnet run -p Send/Send.csproj #### [Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-dotnet.html) - dotnet run -p Worker - dotnet run -p NewTask + dotnet run -p Worker/Worker.csproj + dotnet run -p NewTask/NewTask/csproj #### [Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-dotnet.html) - dotnet run -p ReceiveLogs - dotnet run -p EmitLog + dotnet run -p ReceiveLogs/ReceiveLogs.csproj + dotnet run -p EmitLog/EmitLog.csproj #### [Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-dotnet.html) - dotnet run -p ReceiveLogsDirect info - dotnet run -p EmitLogDirect + dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info + dotnet run -p EmitLogDirect/EmitLogDirect.csproj #### [Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-dotnet.html) - dotnet run -p ReceiveLogsTopic anonymous.info - dotnet run -p EmitLogTopic + dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info + dotnet run -p EmitLogTopic/EmitLogTopic.csproj #### [Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-dotnet.html) - dotnet run -p RPCServer - dotnet run -p RPCClient + dotnet run -p RPCServer/RPCServer.csproj + dotnet run -p RPCClient/RPCClient.csproj diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 1abf2d55..5c1a2a15 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index c5b46db7..749b7f56 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index d1eecb67..90cf4040 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 42d6051a..f91282bb 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index c1fff11d..251221fb 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 378912e7..b1545ba1 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Receiver b/dotnet/Receiver index 125c11e1..a05ac538 100755 --- a/dotnet/Receiver +++ b/dotnet/Receiver @@ -12,7 +12,7 @@ "type": "platform", "version": "1.0.0" }, - "RabbitMQ.Client": "4.0.*" + "RabbitMQ.Client": "5.0.*" }, "imports": "dnxcore50" } diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index f8640096..1755ffcf 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index b05f420c..4b72257b 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -11,7 +11,7 @@ - + From 8cd05f2af5432df9f9511a76c54318232682fd8c Mon Sep 17 00:00:00 2001 From: Karl Nilsson Date: Mon, 24 Jul 2017 17:18:05 +0100 Subject: [PATCH 026/659] Update dotnet-visual-studio to use v5.0 of the client. --- dotnet-visual-studio/1_Receive/1_Receive.csproj | 8 +++++--- dotnet-visual-studio/1_Receive/packages.config | 3 ++- dotnet-visual-studio/1_Send/1_Send.csproj | 8 +++++--- dotnet-visual-studio/1_Send/packages.config | 3 ++- dotnet-visual-studio/2_NewTask/2_NewTask.csproj | 8 +++++--- dotnet-visual-studio/2_NewTask/packages.config | 3 ++- dotnet-visual-studio/2_Worker/2_Worker.csproj | 8 +++++--- dotnet-visual-studio/2_Worker/packages.config | 3 ++- dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj | 8 +++++--- dotnet-visual-studio/3_EmitLog/packages.config | 3 ++- dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj | 8 +++++--- dotnet-visual-studio/3_ReceiveLogs/packages.config | 3 ++- .../4_EmitLogDirect/4_EmitLogDirect.csproj | 8 +++++--- dotnet-visual-studio/4_EmitLogDirect/packages.config | 3 ++- .../4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj | 8 +++++--- dotnet-visual-studio/4_ReceiveLogsDirect/packages.config | 3 ++- dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj | 8 +++++--- dotnet-visual-studio/5_EmitLogTopic/packages.config | 3 ++- .../5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj | 8 +++++--- dotnet-visual-studio/5_ReceiveLogsTopic/packages.config | 3 ++- dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj | 8 +++++--- dotnet-visual-studio/6_RPCClient/packages.config | 3 ++- dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj | 8 +++++--- dotnet-visual-studio/6_RPCServer/packages.config | 3 ++- 24 files changed, 84 insertions(+), 48 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index b84eea0d..516c7847 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -50,9 +50,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/1_Receive/packages.config +++ b/dotnet-visual-studio/1_Receive/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index acea3eec..dd0506c9 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/1_Send/packages.config +++ b/dotnet-visual-studio/1_Send/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index d091eb4b..1145afa5 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ b/dotnet-visual-studio/2_NewTask/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index b870819b..0bb9fe5e 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/2_Worker/packages.config +++ b/dotnet-visual-studio/2_Worker/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 5295c8d4..af54e5ce 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ b/dotnet-visual-studio/3_EmitLog/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index 2e13cbe0..5254070d 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ b/dotnet-visual-studio/3_ReceiveLogs/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index 9c4fa3cf..aaaed82f 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ b/dotnet-visual-studio/4_EmitLogDirect/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index 9f78918a..3ec0b58e 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index 8e58ba43..62ede5f7 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ b/dotnet-visual-studio/5_EmitLogTopic/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index b33cf33c..284b6131 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index c94c98af..4c6b4819 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ b/dotnet-visual-studio/6_RPCClient/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index e8b3b0fe..ef21f8bc 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -35,9 +35,11 @@ 4 - - ..\packages\RabbitMQ.Client.4.0.0\lib\net451\RabbitMQ.Client.dll - True + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config index d0b78af3..5b0c07d4 100644 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ b/dotnet-visual-studio/6_RPCServer/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file From b894c8a1ebbcdf87d3414cf8f27643a0410a238a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 4 Aug 2017 02:05:05 +0300 Subject: [PATCH 027/659] Update .travis.yml Don't explicitly list email for Travis notifications. Use Ruby 2.2. --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5322c3a5..8e9edb81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,9 @@ language: ruby -rvm: "1.9.3" +rvm: "2.2" before_install: ./bin/travisci/before_install.sh script: make test-travisci services: - rabbitmq -notifications: - email: michael@rabbitmq.com branches: only: - master From 61f51e4713e30a124b2b83b2d73a5c5240d1574a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 4 Aug 2017 02:05:40 +0300 Subject: [PATCH 028/659] Provision Bunny 2.7.x --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e7e02033..e51e6781 100644 --- a/Makefile +++ b/Makefile @@ -114,7 +114,7 @@ GEM?=gem1.9.1 TOPDIR:=$(PWD) ruby/.ok: (cd ruby && \ - GEM_HOME=gems/gems RUBYLIB=gems/lib $(GEM) install bunny --version "~> 1.7.0" --no-ri --no-rdoc && \ + GEM_HOME=gems/gems RUBYLIB=gems/lib $(GEM) install bunny --version "~> 2.7.0" --no-ri --no-rdoc && \ touch .ok) clean:: (cd ruby && \ From e5222470ca1737c3de0ba8af6e02bc1b505dfc16 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 7 Aug 2017 23:57:20 +0300 Subject: [PATCH 029/659] Closes #143 --- dotnet/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/README.md b/dotnet/README.md index 08e2452c..848f3df3 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -36,7 +36,7 @@ on windows cd into each project and run `dotnet restore` manually. #### [Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-dotnet.html) dotnet run -p Worker/Worker.csproj - dotnet run -p NewTask/NewTask/csproj + dotnet run -p NewTask/NewTask.csproj #### [Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-dotnet.html) From d06dd5da3d137cff3f4c7ad09a0aaafcb473a5ba Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Wed, 16 Aug 2017 12:21:40 +0300 Subject: [PATCH 030/659] Amqp interop based transports. --- php-interop/README.md | 30 +++++++++++++++ php-interop/emit_log.php | 34 +++++++++++++++++ php-interop/emit_log_direct.php | 38 +++++++++++++++++++ php-interop/emit_log_topic.php | 38 +++++++++++++++++++ php-interop/new_task.php | 36 ++++++++++++++++++ php-interop/receive.php | 34 +++++++++++++++++ php-interop/receive_logs.php | 42 +++++++++++++++++++++ php-interop/receive_logs_direct.php | 50 +++++++++++++++++++++++++ php-interop/receive_logs_topic.php | 50 +++++++++++++++++++++++++ php-interop/rpc_client.php | 57 +++++++++++++++++++++++++++++ php-interop/rpc_server.php | 55 ++++++++++++++++++++++++++++ php-interop/send.php | 27 ++++++++++++++ php-interop/worker.php | 39 ++++++++++++++++++++ 13 files changed, 530 insertions(+) create mode 100644 php-interop/README.md create mode 100644 php-interop/emit_log.php create mode 100644 php-interop/emit_log_direct.php create mode 100644 php-interop/emit_log_topic.php create mode 100644 php-interop/new_task.php create mode 100644 php-interop/receive.php create mode 100644 php-interop/receive_logs.php create mode 100644 php-interop/receive_logs_direct.php create mode 100644 php-interop/receive_logs_topic.php create mode 100644 php-interop/rpc_client.php create mode 100644 php-interop/rpc_server.php create mode 100644 php-interop/send.php create mode 100644 php-interop/worker.php diff --git a/php-interop/README.md b/php-interop/README.md new file mode 100644 index 00000000..039bb8a2 --- /dev/null +++ b/php-interop/README.md @@ -0,0 +1,30 @@ +# PHP code for RabbitMQ tutorials based on AMQP interop + +Here you can find PHP code examples from [RabbitMQ +tutorials](http://www.rabbitmq.com/getstarted.html) adopted to [amqp interop](https://github.com/queue-interop/queue-interop#amqp-interop) +These examples will work with any amqp interop compatible transports such as [enqueue/amqp-ext](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp.md), [enqueue/amqp-bunny](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_bunny.md), [enqueue/amqp-lib](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md) + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +### PHP 5.5+ + +You need `PHP 5.5` and one of the amqp interop compatible transport. + + +### Composer + +Then [install Composer](https://getcomposer.org/download/) per instructions on their site. + +### Client Library + +Then you can, for example, install `enqueue/amqp-bunny` using [Composer](http://getcomposer.org). + +To do that install Composer and add it to your path, then run the following command +inside this project folder: + +```bash +$ composer require enqueue/amqp-bunny +``` + diff --git a/php-interop/emit_log.php b/php-interop/emit_log.php new file mode 100644 index 00000000..03941f8b --- /dev/null +++ b/php-interop/emit_log.php @@ -0,0 +1,34 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('logs'); +$topic->setType(AmqpTopic::TYPE_FANOUT); + +$context->declareTopic($topic); + +$data = implode(' ', array_slice($argv, 1)); +if (empty($data)) { + $data = 'info: Hello World!'; +} +$message = $context->createMessage($data); + +$context->createProducer()->send($topic, $message); + +echo ' [x] Sent ', $data, "\n"; + +$context->close(); diff --git a/php-interop/emit_log_direct.php b/php-interop/emit_log_direct.php new file mode 100644 index 00000000..fce648c8 --- /dev/null +++ b/php-interop/emit_log_direct.php @@ -0,0 +1,38 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('direct_logs'); +$topic->setType(AmqpTopic::TYPE_DIRECT); + +$context->declareTopic($topic); + +$severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info'; + +$data = implode(' ', array_slice($argv, 2)); +if (empty($data)) { + $data = 'Hello World!'; +} + +$message = $context->createMessage($data); +$message->setRoutingKey($severity); + +$context->createProducer()->send($topic, $message); + +echo ' [x] Sent ',$severity,':',$data," \n"; + +$context->close(); diff --git a/php-interop/emit_log_topic.php b/php-interop/emit_log_topic.php new file mode 100644 index 00000000..d91c9ec9 --- /dev/null +++ b/php-interop/emit_log_topic.php @@ -0,0 +1,38 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('topic_logs'); +$topic->setType(AmqpTopic::TYPE_TOPIC); + +$context->declareTopic($topic); + +$routing_key = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'anonymous.info'; + +$data = implode(' ', array_slice($argv, 2)); +if (empty($data)) { + $data = 'Hello World!'; +} + +$message = $context->createMessage($data); +$message->setRoutingKey($routing_key); + +$context->createProducer()->send($topic, $message); + +echo ' [x] Sent ',$routing_key,':',$data," \n"; + +$context->close(); diff --git a/php-interop/new_task.php b/php-interop/new_task.php new file mode 100644 index 00000000..bb3ef43d --- /dev/null +++ b/php-interop/new_task.php @@ -0,0 +1,36 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$queue = $context->createQueue('task_queue'); +$queue->addFlag(AmqpQueue::FLAG_DURABLE); + +$context->declareQueue($queue); + +$data = implode(' ', array_slice($argv, 1)); +if (empty($data)) { + $data = 'Hello World!'; +} +$message = $context->createMessage($data); +$message->setDeliveryMode(AmqpMessage::DELIVERY_MODE_PERSISTENT); + +$context->createProducer()->send($queue, $message); + +echo ' [x] Sent ', $data, "\n"; + +$context->close(); diff --git a/php-interop/receive.php b/php-interop/receive.php new file mode 100644 index 00000000..3f06eef3 --- /dev/null +++ b/php-interop/receive.php @@ -0,0 +1,34 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$queue = $context->createQueue('hello'); +$context->declareQueue($queue); + +$consumer = $context->createConsumer($queue); +$consumer->addFlag(AmqpConsumer::FLAG_NOACK); + +echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; + +while (true) { + if ($message = $consumer->receive()) { + echo ' [x] Received ', $message->getBody(), "\n"; + } +} + +$context->close(); diff --git a/php-interop/receive_logs.php b/php-interop/receive_logs.php new file mode 100644 index 00000000..9c4d1b0c --- /dev/null +++ b/php-interop/receive_logs.php @@ -0,0 +1,42 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('logs'); +$topic->setType(AmqpTopic::TYPE_FANOUT); + +$context->declareTopic($topic); + +$queue = $context->createTemporaryQueue(); + +$context->bind(new AmqpBind($topic, $queue)); + +$consumer = $context->createConsumer($queue); +$consumer->addFlag(AmqpConsumer::FLAG_NOACK); + +echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; + +while (true) { + if ($message = $consumer->receive()) { + echo ' [x] ', $message->getBody(), "\n"; + } +} + +$context->close(); diff --git a/php-interop/receive_logs_direct.php b/php-interop/receive_logs_direct.php new file mode 100644 index 00000000..5836301d --- /dev/null +++ b/php-interop/receive_logs_direct.php @@ -0,0 +1,50 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('direct_logs'); +$topic->setType(AmqpTopic::TYPE_DIRECT); + +$context->declareTopic($topic); + +$queue = $context->createTemporaryQueue(); + +$severities = array_slice($argv, 1); +if (empty($severities)) { + file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n"); + exit(1); +} + +foreach ($severities as $severity) { + $context->bind(new AmqpBind($topic, $queue, $severity)); +} + +$consumer = $context->createConsumer($queue); +$consumer->addFlag(AmqpConsumer::FLAG_NOACK); + +echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; + +while (true) { + if ($message = $consumer->receive()) { + echo ' [x] '.$message->getRoutingKey().':'.$message->getBody()."\n"; + } +} + +$context->close(); diff --git a/php-interop/receive_logs_topic.php b/php-interop/receive_logs_topic.php new file mode 100644 index 00000000..a8d7d461 --- /dev/null +++ b/php-interop/receive_logs_topic.php @@ -0,0 +1,50 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$topic = $context->createTopic('topic_logs'); +$topic->setType(AmqpTopic::TYPE_TOPIC); + +$context->declareTopic($topic); + +$queue = $context->createTemporaryQueue(); + +$binding_keys = array_slice($argv, 1); +if (empty($binding_keys)) { + file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n"); + exit(1); +} + +foreach ($binding_keys as $binding_key) { + $context->bind(new AmqpBind($topic, $queue, $binding_key)); +} + +$consumer = $context->createConsumer($queue); +$consumer->addFlag(AmqpConsumer::FLAG_NOACK); + +echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; + +while (true) { + if ($message = $consumer->receive()) { + echo ' [x] '.$message->getRoutingKey().':'.$message->getBody()."\n"; + } +} + +$context->close(); diff --git a/php-interop/rpc_client.php b/php-interop/rpc_client.php new file mode 100644 index 00000000..96ef4016 --- /dev/null +++ b/php-interop/rpc_client.php @@ -0,0 +1,57 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +class FibonacciRpcClient +{ + /** @var \Interop\Amqp\AmqpContext */ + private $context; + + /** @var \Interop\Amqp\AmqpQueue */ + private $callback_queue; + + public function __construct(array $config) + { + $this->context = (new AmqpConnectionFactory($config))->createContext(); + $this->callback_queue = $this->context->createTemporaryQueue(); + } + + public function call($n) + { + $corr_id = uniqid(); + + $message = $this->context->createMessage((string) $n); + $message->setCorrelationId($corr_id); + $message->setReplyTo($this->callback_queue->getQueueName()); + + $this->context->createProducer()->send( + $this->context->createQueue('rpc_queue'), + $message + ); + + $consumer = $this->context->createConsumer($this->callback_queue); + + while (true) { + if ($message = $consumer->receive()) { + if ($message->getCorrelationId() == $corr_id) { + return (int) ($message->getBody()); + } + } + } + } +} + +$fibonacci_rpc = new FibonacciRpcClient($config); +$response = $fibonacci_rpc->call(30); +echo ' [.] Got ', $response, "\n"; diff --git a/php-interop/rpc_server.php b/php-interop/rpc_server.php new file mode 100644 index 00000000..34bc55ac --- /dev/null +++ b/php-interop/rpc_server.php @@ -0,0 +1,55 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +function fib($n) +{ + if ($n == 0) { + return 0; + } + + if ($n == 1) { + return 1; + } + + return fib($n - 1) + fib($n - 2); +} + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); +$context->setQos(0, 1, false); + +$rpc_queue = $context->createQueue('rpc_queue'); +$context->declareQueue($rpc_queue); + +$consumer = $context->createConsumer($rpc_queue); + +echo " [x] Awaiting RPC requests\n"; + +while (true) { + if ($req = $consumer->receive()) { + $n = (int) ($req->getBody()); + echo ' [.] fib(', $n, ")\n"; + + $msg = $context->createMessage((string) fib($n)); + $msg->setCorrelationId($req->getCorrelationId()); + + $reply_queue = $context->createQueue($req->getReplyTo()); + $context->createProducer()->send($reply_queue, $msg); + + $consumer->acknowledge($req); + } +} + +$context->close(); diff --git a/php-interop/send.php b/php-interop/send.php new file mode 100644 index 00000000..ea8870fa --- /dev/null +++ b/php-interop/send.php @@ -0,0 +1,27 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); + +$queue = $context->createQueue('hello'); +$context->declareQueue($queue); + +$message = $context->createMessage('Hello World!'); + +$context->createProducer()->send($queue, $message); + +echo " [x] Sent 'Hello World!'\n"; + +$context->close(); diff --git a/php-interop/worker.php b/php-interop/worker.php new file mode 100644 index 00000000..4ef70d6a --- /dev/null +++ b/php-interop/worker.php @@ -0,0 +1,39 @@ + 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'pass' => 'guest', + 'receive_method' => 'basic_consume', +]; + +$connection = new AmqpConnectionFactory($config); +$context = $connection->createContext(); +$context->setQos(0, 1, false); + +$queue = $context->createQueue('task_queue'); +$queue->addFlag(AmqpQueue::FLAG_DURABLE); + +$context->declareQueue($queue); + +$consumer = $context->createConsumer($queue); + +echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; + +while (true) { + if ($message = $consumer->receive()) { + echo ' [x] Received ', $message->getBody(), "\n"; + sleep(substr_count($message->getBody(), '.')); + echo ' [x] Done', "\n"; + $consumer->acknowledge($message); + } +} + +$context->close(); From a1cf3575024d27db991e145782246cc3549836d0 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 16 Aug 2017 13:33:59 +0300 Subject: [PATCH 031/659] README edits --- php-interop/README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/php-interop/README.md b/php-interop/README.md index 039bb8a2..21bccfbd 100644 --- a/php-interop/README.md +++ b/php-interop/README.md @@ -1,13 +1,15 @@ # PHP code for RabbitMQ tutorials based on AMQP interop -Here you can find PHP code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html) adopted to [amqp interop](https://github.com/queue-interop/queue-interop#amqp-interop) -These examples will work with any amqp interop compatible transports such as [enqueue/amqp-ext](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp.md), [enqueue/amqp-bunny](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_bunny.md), [enqueue/amqp-lib](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md) - -To successfully use the examples you will need a running RabbitMQ server. +This is a [PHP tutorial](./php) port to the [queue-interop](https://github.com/queue-interop/queue-interop#amqp-interop) family +of libraries. +These examples will work with any interop-compatible transport such as [enqueue/amqp-ext](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp.md), +[enqueue/amqp-bunny](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_bunny.md), +or [enqueue/amqp-lib](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md). ## Requirements +As with other ports, to run the tutorials you'd need a RabbitMQ node started on localhost with all defaults. + ### PHP 5.5+ You need `PHP 5.5` and one of the amqp interop compatible transport. @@ -25,6 +27,5 @@ To do that install Composer and add it to your path, then run the following comm inside this project folder: ```bash -$ composer require enqueue/amqp-bunny +composer require enqueue/amqp-bunny ``` - From 0a547038989841d948e9907b1a7f9328c1eb09f6 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 16 Aug 2017 13:41:04 +0300 Subject: [PATCH 032/659] Add queue-interop port to ToC --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 02d515e3..4df817b7 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ The following ports are available: * [Java (with IntelliJ IDEA)](./java-idea) * [PHP (with php-amqplib)](./php) * [PHP (with php-amqp)](./php-amqp) + * [PHP (with queue-interop)](./php-interop) * [Perl](./perl) * [Python (with Pika)](./python) * [Ruby (with Bunny)](./ruby) From 49a1651835aa5085680c7dc1a52038d221bef73a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 16 Aug 2017 13:43:06 +0300 Subject: [PATCH 033/659] Update README.md --- php-interop/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php-interop/README.md b/php-interop/README.md index 21bccfbd..98f3e58e 100644 --- a/php-interop/README.md +++ b/php-interop/README.md @@ -1,6 +1,6 @@ -# PHP code for RabbitMQ tutorials based on AMQP interop +# RabbitMQ tutorials ported to PHP's queue-interop -This is a [PHP tutorial](./php) port to the [queue-interop](https://github.com/queue-interop/queue-interop#amqp-interop) family +This is a [PHP tutorial](https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php) port to the [queue-interop](https://github.com/queue-interop/queue-interop#amqp-interop) family of libraries. These examples will work with any interop-compatible transport such as [enqueue/amqp-ext](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp.md), [enqueue/amqp-bunny](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_bunny.md), From 12028bd8fd85cd7b2d0f962cb07a1503202d3306 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 16 Aug 2017 13:44:05 +0300 Subject: [PATCH 034/659] Update README.md --- php-interop/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php-interop/README.md b/php-interop/README.md index 98f3e58e..c397f765 100644 --- a/php-interop/README.md +++ b/php-interop/README.md @@ -12,7 +12,7 @@ As with other ports, to run the tutorials you'd need a RabbitMQ node started on ### PHP 5.5+ -You need `PHP 5.5` and one of the amqp interop compatible transport. +You need `PHP 5.5` and one of the queue-interop compatible transport libraries. ### Composer From 70f8296267217565388a83ec1cf992e95498de31 Mon Sep 17 00:00:00 2001 From: sb Date: Wed, 13 Sep 2017 13:46:42 -0700 Subject: [PATCH 035/659] Replacing sleep() by wait(). Relevant difference between wait() releases the lock while sleep() doesn't release any lock while waiting. --- java/RPCServer.java | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/java/RPCServer.java b/java/RPCServer.java index 6f6af210..79a2b525 100644 --- a/java/RPCServer.java +++ b/java/RPCServer.java @@ -56,19 +56,25 @@ public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProp } finally { channel.basicPublish( "", properties.getReplyTo(), replyProps, response.getBytes("UTF-8")); - channel.basicAck(envelope.getDeliveryTag(), false); + // RabbitMq consumer worker thread notifies the RPC server owner thread + synchronized(this) { + this.notify(); + } } } }; channel.basicConsume(RPC_QUEUE_NAME, false, consumer); - - //loop to prevent reaching finally block - while(true) { - try { - Thread.sleep(100); - } catch (InterruptedException _ignore) {} + // Wait and be prepared to consume the message from RPC client. + while (true) { + synchronized(consumer) { + try { + consumer.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } catch (IOException | TimeoutException e) { e.printStackTrace(); From b705c87c3fff5a27c8dd7619fb1fe5e6bb9bfdb2 Mon Sep 17 00:00:00 2001 From: sb Date: Wed, 13 Sep 2017 13:53:04 -0700 Subject: [PATCH 036/659] Making channel final --- java/RPCServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/RPCServer.java b/java/RPCServer.java index 79a2b525..b11c44a5 100644 --- a/java/RPCServer.java +++ b/java/RPCServer.java @@ -26,7 +26,7 @@ public static void main(String[] argv) { Connection connection = null; try { connection = factory.newConnection(); - Channel channel = connection.createChannel(); + final Channel channel = connection.createChannel(); channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); From d65ca3beb1b2c187f7f40d72b474dc7bac91e91c Mon Sep 17 00:00:00 2001 From: darrylsk Date: Fri, 15 Sep 2017 15:14:35 -0300 Subject: [PATCH 037/659] Replaced the obsolete QueueingBasicConsumer object with an EventingBasicConsumer --- dotnet/RPCClient/RPCClient.cs | 105 ++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 44 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 6a3737b8..9cc6224a 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -1,64 +1,81 @@ using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Concurrent; using System.Text; -using System.Threading.Tasks; using RabbitMQ.Client; using RabbitMQ.Client.Events; -class RPCClient +namespace RpcClient { - private IConnection connection; - private IModel channel; - private string replyQueueName; - private QueueingBasicConsumer consumer; - - public RPCClient() + public class RpcClient { - var factory = new ConnectionFactory() { HostName = "localhost" }; - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - replyQueueName = channel.QueueDeclare().QueueName; - consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer); - } + private readonly IConnection connection; + private readonly IModel channel; + private readonly string replyQueueName; + private readonly EventingBasicConsumer consumer; + private readonly BlockingCollection respQueue = new BlockingCollection(); + private readonly IBasicProperties props; - public string Call(string message) - { - var corrId = Guid.NewGuid().ToString(); - var props = channel.CreateBasicProperties(); - props.ReplyTo = replyQueueName; - props.CorrelationId = corrId; + public RpcClient() + { + var factory = new ConnectionFactory() { HostName = "localhost" }; - var messageBytes = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "", routingKey: "rpc_queue", basicProperties: props, body: messageBytes); + connection = factory.CreateConnection(); + channel = connection.CreateModel(); + replyQueueName = channel.QueueDeclare().QueueName; + consumer = new EventingBasicConsumer(channel); - while(true) - { - var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); - if(ea.BasicProperties.CorrelationId == corrId) + props = channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = replyQueueName; + + consumer.Received += (model, ea) => { - return Encoding.UTF8.GetString(ea.Body); - } + var body = ea.Body; + var response = Encoding.UTF8.GetString(body); + if (ea.BasicProperties.CorrelationId == correlationId) + { + respQueue.Add(response); + } + }; } - } - public void Close() - { - connection.Close(); + public string Call(string message) + { + + var messageBytes = Encoding.UTF8.GetBytes(message); + channel.BasicPublish( + exchange: "", + routingKey: "rpc_queue", + basicProperties: props, + body: messageBytes); + + + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); + + return respQueue.Take(); ; + } + + public void Close() + { + connection.Close(); + } } -} -class RPC -{ - public static void Main() + public class Rpc { - var rpcClient = new RPCClient(); + public static void Main() + { + var rpcClient = new RpcClient(); - Console.WriteLine(" [x] Requesting fib(30)"); - var response = rpcClient.Call("30"); - Console.WriteLine(" [.] Got '{0}'", response); + Console.WriteLine(" [x] Requesting fib(30)"); + var response = rpcClient.Call("30"); - rpcClient.Close(); + Console.WriteLine(" [.] Got '{0}'", response); + rpcClient.Close(); + } } } From acf6cd1d0af1c4f848b033af7220e5a2c7a8ad64 Mon Sep 17 00:00:00 2001 From: darrylsk Date: Fri, 15 Sep 2017 15:55:19 -0300 Subject: [PATCH 038/659] Remove the namespace --- dotnet/RPCClient/RPCClient.cs | 101 ++++++++++++++-------------------- 1 file changed, 42 insertions(+), 59 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 9cc6224a..a45add13 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -4,78 +4,61 @@ using RabbitMQ.Client; using RabbitMQ.Client.Events; -namespace RpcClient +public class RpcClient { - public class RpcClient - { - private readonly IConnection connection; - private readonly IModel channel; - private readonly string replyQueueName; - private readonly EventingBasicConsumer consumer; - private readonly BlockingCollection respQueue = new BlockingCollection(); - private readonly IBasicProperties props; - - public RpcClient() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; + private readonly IConnection connection; + private readonly IModel channel; + private readonly string replyQueueName; + private readonly EventingBasicConsumer consumer; + private readonly BlockingCollection respQueue = new BlockingCollection(); + private readonly IBasicProperties props; - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - replyQueueName = channel.QueueDeclare().QueueName; - consumer = new EventingBasicConsumer(channel); + public RpcClient() + { + var factory = new ConnectionFactory() { HostName = "localhost" }; - props = channel.CreateBasicProperties(); - var correlationId = Guid.NewGuid().ToString(); - props.CorrelationId = correlationId; - props.ReplyTo = replyQueueName; + connection = factory.CreateConnection(); + channel = connection.CreateModel(); + replyQueueName = channel.QueueDeclare().QueueName; + consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var body = ea.Body; - var response = Encoding.UTF8.GetString(body); - if (ea.BasicProperties.CorrelationId == correlationId) - { - respQueue.Add(response); - } - }; - } + props = channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = replyQueueName; - public string Call(string message) + consumer.Received += (model, ea) => { + var body = ea.Body; + var response = Encoding.UTF8.GetString(body); + if (ea.BasicProperties.CorrelationId == correlationId) + { + respQueue.Add(response); + } + }; + } - var messageBytes = Encoding.UTF8.GetBytes(message); - channel.BasicPublish( - exchange: "", - routingKey: "rpc_queue", - basicProperties: props, - body: messageBytes); + public string Call(string message) + { + var messageBytes = Encoding.UTF8.GetBytes(message); + channel.BasicPublish( + exchange: "", + routingKey: "rpc_queue", + basicProperties: props, + body: messageBytes); - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); - return respQueue.Take(); ; - } + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); - public void Close() - { - connection.Close(); - } + return respQueue.Take(); ; } - public class Rpc + public void Close() { - public static void Main() - { - var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib(30)"); - var response = rpcClient.Call("30"); - - Console.WriteLine(" [.] Got '{0}'", response); - rpcClient.Close(); - } + connection.Close(); } } From c718cada1d1e289ccf7c9da72ad4fc40b9f5cf2d Mon Sep 17 00:00:00 2001 From: darrylsk Date: Fri, 15 Sep 2017 16:24:08 -0300 Subject: [PATCH 039/659] Add back the missing main method --- dotnet/RPCClient/RPCClient.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index a45add13..3b4b56f1 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -62,3 +62,18 @@ public void Close() connection.Close(); } } + +public class Rpc +{ + public static void Main() + { + var rpcClient = new RpcClient(); + + Console.WriteLine(" [x] Requesting fib(30)"); + var response = rpcClient.Call("30"); + + Console.WriteLine(" [.] Got '{0}'", response); + rpcClient.Close(); + } +} + From 6940f6f40456b625271aa83c84241dafda7da5c8 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sun, 17 Sep 2017 13:24:07 -0600 Subject: [PATCH 040/659] Update for Pika 0.11.0 --- python/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/README.md b/python/README.md index f8fb3ff2..a607520a 100644 --- a/python/README.md +++ b/python/README.md @@ -7,9 +7,9 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -To run this code you need `pika` library version 0.10.0 To install it run +To run this code you need to install the `pika` package version 0.10.0 or later. To install it, run - pip install pika==0.10.0 + pip install pika==0.11.0 You may first need to run From 476cead769c77d0c1eaf3cd21929cec2d54bbcc8 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 10 Oct 2017 16:05:01 +0100 Subject: [PATCH 041/659] Commit npm package lock file --- javascript-nodejs/package-lock.json | 68 +++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 javascript-nodejs/package-lock.json diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json new file mode 100644 index 00000000..85d71454 --- /dev/null +++ b/javascript-nodejs/package-lock.json @@ -0,0 +1,68 @@ +{ + "name": "rabbitmq-node-tutorial", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "amqplib": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.3.2.tgz", + "integrity": "sha1-532Ps4QuvK54zxyTDEkNHpVPQpc=", + "requires": { + "bitsyntax": "0.0.4", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.1.14", + "when": "3.6.4" + } + }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "requires": { + "buffer-more-ints": "0.0.2" + } + }, + "buffer-more-ints": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=" + } + } +} From 88ea6c1c6f9f4fa3c33610f2958c06a873ec7b43 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 10 Oct 2017 16:08:49 +0100 Subject: [PATCH 042/659] Link to tutorial texts that list prerequisites and more. References #149. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4df817b7..74618ee6 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,11 @@ This project contains code for [RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html) with their ports to various languages. +This repository only contains runnable code. Please consult [tutorials on the site](http://www.rabbitmq.com/getstarted.html) +to learn more about [the concepts](http://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. + +All tutorials **require a RabbitMQ node running on localhost** with stock (default) settings. + ## Languages The following ports are available: From 30a7ee98d24a53fc4645d864e2ace1fca2a44a0c Mon Sep 17 00:00:00 2001 From: Kurtis Walker Date: Fri, 13 Oct 2017 15:31:41 -0400 Subject: [PATCH 043/659] creating mvn for java implementation --- java-mvn/pom.xml | 26 +++++++++++++++++++ java-mvn/src/main/java/EmitLog.java | 1 + java-mvn/src/main/java/EmitLogDirect.java | 1 + java-mvn/src/main/java/EmitLogHeader.java | 1 + java-mvn/src/main/java/EmitLogTopic.java | 1 + java-mvn/src/main/java/NewTask.java | 1 + java-mvn/src/main/java/RPCClient.java | 1 + java-mvn/src/main/java/RPCServer.java | 1 + java-mvn/src/main/java/ReceiveLogHeader.java | 1 + java-mvn/src/main/java/ReceiveLogs.java | 1 + java-mvn/src/main/java/ReceiveLogsDirect.java | 1 + java-mvn/src/main/java/ReceiveLogsTopic.java | 1 + java-mvn/src/main/java/Recv.java | 1 + java-mvn/src/main/java/Send.java | 1 + java-mvn/src/main/java/Worker.java | 1 + 15 files changed, 40 insertions(+) create mode 100644 java-mvn/pom.xml create mode 120000 java-mvn/src/main/java/EmitLog.java create mode 120000 java-mvn/src/main/java/EmitLogDirect.java create mode 120000 java-mvn/src/main/java/EmitLogHeader.java create mode 120000 java-mvn/src/main/java/EmitLogTopic.java create mode 120000 java-mvn/src/main/java/NewTask.java create mode 120000 java-mvn/src/main/java/RPCClient.java create mode 120000 java-mvn/src/main/java/RPCServer.java create mode 120000 java-mvn/src/main/java/ReceiveLogHeader.java create mode 120000 java-mvn/src/main/java/ReceiveLogs.java create mode 120000 java-mvn/src/main/java/ReceiveLogsDirect.java create mode 120000 java-mvn/src/main/java/ReceiveLogsTopic.java create mode 120000 java-mvn/src/main/java/Recv.java create mode 120000 java-mvn/src/main/java/Send.java create mode 120000 java-mvn/src/main/java/Worker.java diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml new file mode 100644 index 00000000..6cbdcd97 --- /dev/null +++ b/java-mvn/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + + com.rabbitmq + rabbitmq-tutorial + 1.0-SNAPSHOT + jar + + rabbitmq-tutorial + https://github.com/rabbitmq/rabbitmq-tutorials + + + UTF-8 + 1.8 + 1.8 + + + + + com.rabbitmq + amqp-client + LATEST + + + diff --git a/java-mvn/src/main/java/EmitLog.java b/java-mvn/src/main/java/EmitLog.java new file mode 120000 index 00000000..f65914c3 --- /dev/null +++ b/java-mvn/src/main/java/EmitLog.java @@ -0,0 +1 @@ +../../../../java/EmitLog.java \ No newline at end of file diff --git a/java-mvn/src/main/java/EmitLogDirect.java b/java-mvn/src/main/java/EmitLogDirect.java new file mode 120000 index 00000000..ab4bd7ba --- /dev/null +++ b/java-mvn/src/main/java/EmitLogDirect.java @@ -0,0 +1 @@ +../../../../java/EmitLogDirect.java \ No newline at end of file diff --git a/java-mvn/src/main/java/EmitLogHeader.java b/java-mvn/src/main/java/EmitLogHeader.java new file mode 120000 index 00000000..0c818354 --- /dev/null +++ b/java-mvn/src/main/java/EmitLogHeader.java @@ -0,0 +1 @@ +../../../../java/EmitLogHeader.java \ No newline at end of file diff --git a/java-mvn/src/main/java/EmitLogTopic.java b/java-mvn/src/main/java/EmitLogTopic.java new file mode 120000 index 00000000..b4662bb9 --- /dev/null +++ b/java-mvn/src/main/java/EmitLogTopic.java @@ -0,0 +1 @@ +../../../../java/EmitLogTopic.java \ No newline at end of file diff --git a/java-mvn/src/main/java/NewTask.java b/java-mvn/src/main/java/NewTask.java new file mode 120000 index 00000000..160b6504 --- /dev/null +++ b/java-mvn/src/main/java/NewTask.java @@ -0,0 +1 @@ +../../../../java/NewTask.java \ No newline at end of file diff --git a/java-mvn/src/main/java/RPCClient.java b/java-mvn/src/main/java/RPCClient.java new file mode 120000 index 00000000..41a0d676 --- /dev/null +++ b/java-mvn/src/main/java/RPCClient.java @@ -0,0 +1 @@ +../../../../java/RPCClient.java \ No newline at end of file diff --git a/java-mvn/src/main/java/RPCServer.java b/java-mvn/src/main/java/RPCServer.java new file mode 120000 index 00000000..40dd9654 --- /dev/null +++ b/java-mvn/src/main/java/RPCServer.java @@ -0,0 +1 @@ +../../../../java/RPCServer.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogHeader.java b/java-mvn/src/main/java/ReceiveLogHeader.java new file mode 120000 index 00000000..96653bbc --- /dev/null +++ b/java-mvn/src/main/java/ReceiveLogHeader.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogs.java b/java-mvn/src/main/java/ReceiveLogs.java new file mode 120000 index 00000000..c37ec06b --- /dev/null +++ b/java-mvn/src/main/java/ReceiveLogs.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogs.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogsDirect.java b/java-mvn/src/main/java/ReceiveLogsDirect.java new file mode 120000 index 00000000..00a7cf55 --- /dev/null +++ b/java-mvn/src/main/java/ReceiveLogsDirect.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogsDirect.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogsTopic.java b/java-mvn/src/main/java/ReceiveLogsTopic.java new file mode 120000 index 00000000..b1dbe53a --- /dev/null +++ b/java-mvn/src/main/java/ReceiveLogsTopic.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogsTopic.java \ No newline at end of file diff --git a/java-mvn/src/main/java/Recv.java b/java-mvn/src/main/java/Recv.java new file mode 120000 index 00000000..8e871235 --- /dev/null +++ b/java-mvn/src/main/java/Recv.java @@ -0,0 +1 @@ +../../../../java/Recv.java \ No newline at end of file diff --git a/java-mvn/src/main/java/Send.java b/java-mvn/src/main/java/Send.java new file mode 120000 index 00000000..16b12d58 --- /dev/null +++ b/java-mvn/src/main/java/Send.java @@ -0,0 +1 @@ +../../../../java/Send.java \ No newline at end of file diff --git a/java-mvn/src/main/java/Worker.java b/java-mvn/src/main/java/Worker.java new file mode 120000 index 00000000..39830cc6 --- /dev/null +++ b/java-mvn/src/main/java/Worker.java @@ -0,0 +1 @@ +../../../../java/Worker.java \ No newline at end of file From 2551cb07fc7f4e47b2fbbb6701a4869bde68e47f Mon Sep 17 00:00:00 2001 From: getong Date: Tue, 16 Jan 2018 13:18:45 +0800 Subject: [PATCH 044/659] add recon --- .gitignore | 1 + erlang/README.md | 16 ++++++++++------ erlang/emit_log.erl | 2 +- erlang/emit_log_direct.erl | 2 +- erlang/emit_log_topic.erl | 2 +- erlang/new_task.erl | 2 +- erlang/receive.erl | 2 +- erlang/receive_logs.erl | 2 +- erlang/receive_logs_direct.erl | 2 +- erlang/receive_logs_topic.erl | 2 +- erlang/send.erl | 2 +- erlang/worker.erl | 2 +- 12 files changed, 21 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 1dbc24fa..a345f396 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.zip erlang/amqp_client* erlang/rabbit_common* +erlang/recon* python/venv dotnet/*.exe dotnet/lib diff --git a/erlang/README.md b/erlang/README.md index a2d7eab5..666a4121 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -17,13 +17,17 @@ using apt: You need Erlang Client binaries: - wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/rabbit_common-2.7.0.ez - unzip rabbit_common-2.7.0.ez - ln -s rabbit_common-2.7.0 rabbit_common + wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/rabbit_common-3.6.14.ez + unzip rabbit_common-3.6.14.ez + ln -s rabbit_common-3.6.14 rabbit_common - wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/amqp_client-2.7.0.ez - unzip amqp_client-2.7.0.ez - ln -s amqp_client-2.7.0 amqp_client + wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/amqp_client-3.6.14.ez + unzip amqp_client-3.6.14.ez + ln -s amqp_client-3.6.14 amqp_client + + wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/recon-2.3.2.ez + unzip recon-2.3.2.ez + ln -s recon-2.3.2 recon ## Code diff --git a/erlang/emit_log.erl b/erlang/emit_log.erl index 5c593ffb..2c29e00d 100755 --- a/erlang/emit_log.erl +++ b/erlang/emit_log.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_direct.erl b/erlang/emit_log_direct.erl index 7b5096b9..721e984f 100755 --- a/erlang/emit_log_direct.erl +++ b/erlang/emit_log_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_topic.erl b/erlang/emit_log_topic.erl index b967392a..4fcdd15a 100755 --- a/erlang/emit_log_topic.erl +++ b/erlang/emit_log_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/new_task.erl b/erlang/new_task.erl index b44afd60..8b5ad0f9 100755 --- a/erlang/new_task.erl +++ b/erlang/new_task.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive.erl b/erlang/receive.erl index 144c50c0..640b4295 100755 --- a/erlang/receive.erl +++ b/erlang/receive.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs.erl b/erlang/receive_logs.erl index 46530535..25b2b852 100755 --- a/erlang/receive_logs.erl +++ b/erlang/receive_logs.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_direct.erl b/erlang/receive_logs_direct.erl index beeb8bd6..956653f6 100755 --- a/erlang/receive_logs_direct.erl +++ b/erlang/receive_logs_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_topic.erl b/erlang/receive_logs_topic.erl index 55aafa3b..3c01fe70 100755 --- a/erlang/receive_logs_topic.erl +++ b/erlang/receive_logs_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/send.erl b/erlang/send.erl index 0733dc37..f5a0f4e2 100755 --- a/erlang/send.erl +++ b/erlang/send.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/worker.erl b/erlang/worker.erl index 9ce9dd32..866397a9 100755 --- a/erlang/worker.erl +++ b/erlang/worker.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin +%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). From 13652ae13eeb42bd19e977b92701bc849bada069 Mon Sep 17 00:00:00 2001 From: krdlab Date: Tue, 23 Jan 2018 13:23:45 +0900 Subject: [PATCH 045/659] Add Haskell RPC example --- haskell/README.md | 3 ++- haskell/rpcClient.hs | 57 ++++++++++++++++++++++++++++++++++++++++++++ haskell/rpcServer.hs | 47 ++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100755 haskell/rpcClient.hs create mode 100755 haskell/rpcServer.hs diff --git a/haskell/README.md b/haskell/README.md index 0084b7ff..ae2a0feb 100644 --- a/haskell/README.md +++ b/haskell/README.md @@ -43,6 +43,7 @@ Code examples are executed via `runhaskell`: [Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-python.html) - TBD + runhaskell rpcServer.hs + runhaskell rpcClient.hs To learn more, see [Network.AMQP](https://github.com/hreinhardt/amqp). diff --git a/haskell/rpcClient.hs b/haskell/rpcClient.hs new file mode 100755 index 00000000..f5d3c765 --- /dev/null +++ b/haskell/rpcClient.hs @@ -0,0 +1,57 @@ +#!/usr/bin/env stack +-- stack --install-ghc runghc --package bytestring --package text --package amqp --package uuid +{-# LANGUAGE OverloadedStrings #-} + +import Control.Concurrent (MVar, newEmptyMVar, putMVar, + takeMVar) +import Control.Monad (when) +import qualified Data.ByteString.Lazy.Char8 as BL +import Data.Maybe (fromJust) +import Data.Text (Text) +import Data.UUID (toText) +import Data.UUID.V4 (nextRandom) +import Network.AMQP + +type QueueName = Text + +main :: IO () +main = do + conn <- openConnection "127.0.0.1" "/" "guest" "guest" + ch <- openChannel conn + + putStrLn " [x] Requesting fib(30)" + res <- callFib ch rpcQueue 30 + putStrLn $ " [.] Got '" ++ show res ++ "'" + + closeConnection conn + where + rpcQueue = "rpc_queue" + +callFib :: Channel -> QueueName -> Int -> IO Int +callFib ch queue n = do + cid <- genCorrelationId + rqn <- declareReplyQueue + + let body = BL.pack . show $ n + let message = newMsg {msgCorrelationID = Just cid, msgReplyTo = Just rqn, msgBody = body} + publishMsg ch "" queue message + + m <- newEmptyMVar + consumeMsgs ch rqn Ack $ handleResponse cid m + + res <- takeMVar m + return res + where + genCorrelationId = toText <$> nextRandom + declareReplyQueue = do + let opts = newQueue {queueAutoDelete = True, queueExclusive = True} + (rqn, _, _) <- declareQueue ch opts + return rqn + +handleResponse :: Text -> MVar Int -> (Message, Envelope) -> IO () +handleResponse corrId m (msg, envelope) = do + let msgCorrId = fromJust (msgCorrelationID msg) + when (msgCorrId == corrId) $ do + res <- readIO (BL.unpack . msgBody $ msg) + putMVar m res + ackEnv envelope diff --git a/haskell/rpcServer.hs b/haskell/rpcServer.hs new file mode 100755 index 00000000..7d7a8f96 --- /dev/null +++ b/haskell/rpcServer.hs @@ -0,0 +1,47 @@ +#!/usr/bin/env stack +-- stack --install-ghc runghc --package bytestring --package text --package amqp +{-# LANGUAGE OverloadedStrings #-} + +import Control.Concurrent (MVar, newEmptyMVar, putMVar, + takeMVar) +import qualified Data.ByteString.Lazy.Char8 as BL +import Data.Maybe (fromJust) +import Network.AMQP + +main :: IO () +main = do + conn <- openConnection "127.0.0.1" "/" "guest" "guest" + ch <- openChannel conn + + qos ch 0 1 False + declareQueue ch newQueue {queueName = rpcQueue} + + m <- newEmptyMVar + consumeMsgs ch rpcQueue Ack $ handleRequest ch m + putStrLn " [x] Awaiting RPC requests" + takeMVar m + + closeConnection conn + where + rpcQueue = "rpc_queue" + +handleRequest :: Channel -> MVar () -> (Message, Envelope) -> IO () +handleRequest ch m (msg, envelope) = do + n <- readIO . BL.unpack . msgBody $ msg + putStrLn $ " [.] fib(" ++ show n ++ ")" + + let result = fib n + let response = newMsg { msgCorrelationID = msgCorrelationID msg + , msgBody = BL.pack . show $ result + } + publishMsg ch "" replyTo response + ackEnv envelope + putMVar m () + where + replyTo = fromJust $ msgReplyTo msg + +fib :: Int -> Int +fib n + | n >= 2 = fib (n - 1) + fib (n - 2) + | n == 1 = 1 + | otherwise = 0 From 7a4de0393f0edbc726035cd3c007ecabf2a7c4d6 Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 16:19:52 -0300 Subject: [PATCH 046/659] Update ruby tutorial one --- ruby/receive.rb | 18 ++++++++---------- ruby/send.rb | 16 +++++++--------- ruby/worker.rb | 26 ++++++++++++-------------- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/ruby/receive.rb b/ruby/receive.rb index c7dbffc7..684c2c2b 100644 --- a/ruby/receive.rb +++ b/ruby/receive.rb @@ -1,21 +1,19 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start - -ch = conn.create_channel -q = ch.queue("hello") +channel = connection.create_channel +queue = channel.queue('hello') begin - puts " [*] Waiting for messages. To exit press CTRL+C" - q.subscribe(:block => true) do |delivery_info, properties, body| + puts ' [*] Waiting for messages. To exit press CTRL+C' + queue.subscribe(block: true) do |_delivery_info, _properties, body| puts " [x] Received #{body}" end rescue Interrupt => _ - conn.close + connection.close exit(0) end diff --git a/ruby/send.rb b/ruby/send.rb index 1499cd3e..c20872f3 100644 --- a/ruby/send.rb +++ b/ruby/send.rb @@ -1,15 +1,13 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start +channel = connection.create_channel +queue = channel.queue('hello') -ch = conn.create_channel -q = ch.queue("hello") - -ch.default_exchange.publish("Hello World!", :routing_key => q.name) +channel.default_exchange.publish('Hello World!', routing_key: queue.name) puts " [x] Sent 'Hello World!'" -conn.close +connection.close diff --git a/ruby/worker.rb b/ruby/worker.rb index 19f2da2d..3d1bd2a1 100644 --- a/ruby/worker.rb +++ b/ruby/worker.rb @@ -1,25 +1,23 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start +channel = connection.create_channel +queue = channel.queue('task_queue', durable: true) -ch = conn.create_channel -q = ch.queue("task_queue", :durable => true) - -ch.prefetch(1) -puts " [*] Waiting for messages. To exit press CTRL+C" +channel.prefetch(1) +puts ' [*] Waiting for messages. To exit press CTRL+C' begin - q.subscribe(:manual_ack => true, :block => true) do |delivery_info, properties, body| + queue.subscribe(manual_ack: true, block: true) do |delivery_info, _properties, body| puts " [x] Received '#{body}'" # imitate some work - sleep body.count(".").to_i - puts " [x] Done" - ch.ack(delivery_info.delivery_tag) + sleep body.count('.').to_i + puts ' [x] Done' + channel.ack(delivery_info.delivery_tag) end rescue Interrupt => _ - conn.close + connection.close end From 6c2539d737d8220e5cbb6c9f3c3db55044947c01 Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 16:26:28 -0300 Subject: [PATCH 047/659] Update ruby tutorial two --- ruby/new_task.rb | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/ruby/new_task.rb b/ruby/new_task.rb index 1476c73b..743a35d5 100644 --- a/ruby/new_task.rb +++ b/ruby/new_task.rb @@ -1,17 +1,15 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start +channel = connection.create_channel +queue = channel.queue('task_queue', durable: true) -ch = conn.create_channel -q = ch.queue("task_queue", :durable => true) +message = ARGV.empty? ? 'Hello World!' : ARGV.join(' ') -msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ") +queue.publish(message, persistent: true) +puts " [x] Sent #{message}" -q.publish(msg, :persistent => true) -puts " [x] Sent #{msg}" - -conn.close +connection.close From 175d37c95115b531aaa552f964743abec696538c Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 16:32:08 -0300 Subject: [PATCH 048/659] Update ruby tutorial three --- ruby/emit_log.rb | 19 +++++++++---------- ruby/receive_logs.rb | 25 +++++++++++-------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/ruby/emit_log.rb b/ruby/emit_log.rb index 0ca4e2f4..8b6c3c93 100644 --- a/ruby/emit_log.rb +++ b/ruby/emit_log.rb @@ -1,17 +1,16 @@ #!/usr/bin/env ruby -# encoding: utf-8 -require "bunny" +require 'bunny' -conn = Bunny.new(:automatically_recover => false) -conn.start +connection = Bunny.new +connection.start -ch = conn.create_channel -x = ch.fanout("logs") +channel = connection.create_channel +exchange = channel.fanout('logs') -msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ") +message = ARGV.empty? ? 'Hello World!' : ARGV.join(' ') -x.publish(msg) -puts " [x] Sent #{msg}" +exchange.publish(message) +puts " [x] Sent #{message}" -conn.close +connection.close diff --git a/ruby/receive_logs.rb b/ruby/receive_logs.rb index a9db9235..4290020e 100644 --- a/ruby/receive_logs.rb +++ b/ruby/receive_logs.rb @@ -1,26 +1,23 @@ #!/usr/bin/env ruby -# encoding: utf-8 -require "bunny" +require 'bunny' -conn = Bunny.new(:automatically_recover => false) -conn.start +connection = Bunny.new +connection.start -ch = conn.create_channel -x = ch.fanout("logs") -q = ch.queue("", :exclusive => true) +channel = connection.create_channel +exchange = channel.fanout('logs') +queue = channel.queue('', exclusive: true) -q.bind(x) +queue.bind(exchange) -puts " [*] Waiting for logs. To exit press CTRL+C" +puts ' [*] Waiting for logs. To exit press CTRL+C' begin - q.subscribe(:block => true) do |delivery_info, properties, body| + queue.subscribe(block: true) do |_delivery_info, _properties, body| puts " [x] #{body}" end rescue Interrupt => _ - ch.close - conn.close - - exit(0) + channel.close + connection.close end From 30f0e187d7540ec2ae10057571cf0988012bb3a3 Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 16:46:27 -0300 Subject: [PATCH 049/659] Update ruby tutorial four --- ruby/emit_log_direct.rb | 22 ++++++++++------------ ruby/receive_logs_direct.rb | 28 ++++++++++++---------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/ruby/emit_log_direct.rb b/ruby/emit_log_direct.rb index 4fd8f0fe..14de3134 100644 --- a/ruby/emit_log_direct.rb +++ b/ruby/emit_log_direct.rb @@ -1,17 +1,15 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start +channel = connection.create_channel +exchange = channel.direct('direct_logs') +severity = ARGV.shift || 'info' +message = ARGV.empty? ? 'Hello World!' : ARGV.join(' ') -ch = conn.create_channel -x = ch.direct("direct_logs") -severity = ARGV.shift || "info" -msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ") +exchange.publish(message, routing_key: severity) +puts " [x] Sent '#{message}'" -x.publish(msg, :routing_key => severity) -puts " [x] Sent '#{msg}'" - -conn.close +connection.close diff --git a/ruby/receive_logs_direct.rb b/ruby/receive_logs_direct.rb index 6a3b6302..da2ebbce 100644 --- a/ruby/receive_logs_direct.rb +++ b/ruby/receive_logs_direct.rb @@ -1,32 +1,28 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +abort "Usage: #{$PROGRAM_NAME} [info] [warning] [error]" if ARGV.empty? -if ARGV.empty? - abort "Usage: #{$0} [info] [warning] [error]" -end - -conn = Bunny.new(:automatically_recover => false) -conn.start +connection = Bunny.new(automatically_recover: false) +connection.start -ch = conn.create_channel -x = ch.direct("direct_logs") -q = ch.queue("", :exclusive => true) +channel = connection.create_channel +exchange = channel.direct('direct_logs') +queue = channel.queue('', exclusive: true) ARGV.each do |severity| - q.bind(x, :routing_key => severity) + queue.bind(exchange, routing_key: severity) end -puts " [*] Waiting for logs. To exit press CTRL+C" +puts ' [*] Waiting for logs. To exit press CTRL+C' begin - q.subscribe(:block => true) do |delivery_info, properties, body| + queue.subscribe(block: true) do |delivery_info, _properties, body| puts " [x] #{delivery_info.routing_key}:#{body}" end rescue Interrupt => _ - ch.close - conn.close + channel.close + connection.close exit(0) end From d2417069769cf76c881cab1efb1fa1ea6d8e49e3 Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 16:52:11 -0300 Subject: [PATCH 050/659] Update ruby tutorial five --- ruby/emit_log_topic.rb | 22 ++++++++++------------ ruby/receive_logs_topic.rb | 28 ++++++++++++---------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/ruby/emit_log_topic.rb b/ruby/emit_log_topic.rb index cbb01b9d..ca9abf9d 100644 --- a/ruby/emit_log_topic.rb +++ b/ruby/emit_log_topic.rb @@ -1,17 +1,15 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +connection = Bunny.new(automatically_recover: false) +connection.start -conn = Bunny.new(:automatically_recover => false) -conn.start +channel = connection.create_channel +exchange = channel.topic('topic_logs') +severity = ARGV.shift || 'anonymous.info' +message = ARGV.empty? ? 'Hello World!' : ARGV.join(' ') -ch = conn.create_channel -x = ch.topic("topic_logs") -severity = ARGV.shift || "anonymous.info" -msg = ARGV.empty? ? "Hello World!" : ARGV.join(" ") +exchange.publish(message, routing_key: severity) +puts " [x] Sent #{severity}:#{message}" -x.publish(msg, :routing_key => severity) -puts " [x] Sent #{severity}:#{msg}" - -conn.close +connection.close diff --git a/ruby/receive_logs_topic.rb b/ruby/receive_logs_topic.rb index df173f0d..1028624d 100644 --- a/ruby/receive_logs_topic.rb +++ b/ruby/receive_logs_topic.rb @@ -1,32 +1,28 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' -require "bunny" +abort "Usage: #{$PROGRAM_NAME} [binding key]" if ARGV.empty? -if ARGV.empty? - abort "Usage: #{$0} [binding key]" -end - -conn = Bunny.new(:automatically_recover => false) -conn.start +connection = Bunny.new(automatically_recover: false) +connection.start -ch = conn.create_channel -x = ch.topic("topic_logs") -q = ch.queue("", :exclusive => true) +channel = connection.create_channel +exchange = channel.topic('topic_logs') +queue = channel.queue('', exclusive: true) ARGV.each do |severity| - q.bind(x, :routing_key => severity) + queue.bind(exchange, routing_key: severity) end -puts " [*] Waiting for logs. To exit press CTRL+C" +puts ' [*] Waiting for logs. To exit press CTRL+C' begin - q.subscribe(:block => true) do |delivery_info, properties, body| + queue.subscribe(block: true) do |delivery_info, _properties, body| puts " [x] #{delivery_info.routing_key}:#{body}" end rescue Interrupt => _ - ch.close - conn.close + channel.close + connection.close exit(0) end From 1f9dbc5a1b6d173cb94ee835940c9954367e6a35 Mon Sep 17 00:00:00 2001 From: Caique Hitoshi Mitsuoka Date: Mon, 19 Feb 2018 17:07:57 -0300 Subject: [PATCH 051/659] Update ruby tutorial six --- ruby/rpc_client.rb | 82 ++++++++++++++++++++++++---------------------- ruby/rpc_server.rb | 65 ++++++++++++++++++------------------ 2 files changed, 76 insertions(+), 71 deletions(-) diff --git a/ruby/rpc_client.rb b/ruby/rpc_client.rb index 8338c773..9c6cd499 100644 --- a/ruby/rpc_client.rb +++ b/ruby/rpc_client.rb @@ -1,66 +1,70 @@ #!/usr/bin/env ruby -# encoding: utf-8 +require 'bunny' +require 'thread' -require "bunny" -require "thread" +class FibonacciClient + attr_accessor :call_id, :response, :lock, :condition, :connection, + :channel, :server_queue_name, :reply_queue, :exchange -conn = Bunny.new(:automatically_recover => false) -conn.start + def initialize(server_queue_name) + @connection = Bunny.new(automatically_recover: false) + @connection.start -ch = conn.create_channel + @channel = connection.create_channel + @exchange = channel.default_exchange + @server_queue_name = server_queue_name + setup_reply_queue + end -class FibonacciClient - attr_reader :reply_queue - attr_accessor :response, :call_id - attr_reader :lock, :condition + def call(n) + @call_id = generate_uuid + + exchange.publish(n.to_s, + routing_key: server_queue_name, + correlation_id: call_id, + reply_to: reply_queue.name) - def initialize(ch, server_queue) - @ch = ch - @x = ch.default_exchange + # wait for the signal to continue the execution + lock.synchronize { condition.wait(lock) } - @server_queue = server_queue - @reply_queue = ch.queue("", :exclusive => true) + response + end + + def stop + channel.close + connection.close + end + private - @lock = Mutex.new + def setup_reply_queue + @lock = Mutex.new @condition = ConditionVariable.new - that = self + that = self + @reply_queue = channel.queue('', exclusive: true) - @reply_queue.subscribe do |delivery_info, properties, payload| + reply_queue.subscribe do |_delivery_info, properties, payload| if properties[:correlation_id] == that.call_id that.response = payload.to_i - that.lock.synchronize{that.condition.signal} + + # sends the signal to continue the execution of #call + that.lock.synchronize { that.condition.signal } end end end - def call(n) - self.call_id = self.generate_uuid - - @x.publish(n.to_s, - :routing_key => @server_queue, - :correlation_id => call_id, - :reply_to => @reply_queue.name) - - lock.synchronize{condition.wait(lock)} - response - end - - protected - def generate_uuid - # very naive but good enough for code - # examples + # very naive but good enough for code examples "#{rand}#{rand}#{rand}" end end +client = FibonacciClient.new('rpc_queue') -client = FibonacciClient.new(ch, "rpc_queue") -puts " [x] Requesting fib(30)" +puts ' [x] Requesting fib(30)' response = client.call(30) + puts " [.] Got #{response}" -ch.close -conn.close +client.stop diff --git a/ruby/rpc_server.rb b/ruby/rpc_server.rb index b991d71c..0f957084 100644 --- a/ruby/rpc_server.rb +++ b/ruby/rpc_server.rb @@ -1,51 +1,52 @@ #!/usr/bin/env ruby -# encoding: utf-8 - -require "bunny" - -conn = Bunny.new(:automatically_recover => false) -conn.start - -ch = conn.create_channel +require 'bunny' class FibonacciServer - - def initialize(ch) - @ch = ch + def initialize + @connection = Bunny.new + @connection.start + @channel = @connection.create_channel end def start(queue_name) - @q = @ch.queue(queue_name) - @x = @ch.default_exchange + @queue = channel.queue(queue_name) + @exchange = channel.default_exchange + subscribe_to_queue + end - @q.subscribe(:block => true) do |delivery_info, properties, payload| - n = payload.to_i - r = self.class.fib(n) + def stop + channel.close + connection.close + end - puts " [.] fib(#{n})" + private - @x.publish(r.to_s, :routing_key => properties.reply_to, :correlation_id => properties.correlation_id) + attr_reader :channel, :exchange, :queue, :connection + + def subscribe_to_queue + queue.subscribe(block: true) do |_delivery_info, properties, payload| + result = fibonacci(payload.to_i) + + exchange.publish( + result.to_s, + routing_key: properties.reply_to, + correlation_id: properties.correlation_id + ) end end + def fibonacci(value) + return value if value.zero? || value == 1 - def self.fib(n) - case n - when 0 then 0 - when 1 then 1 - else - fib(n - 1) + fib(n - 2) - end + fibonacci(value - 1) + fibonacci(value - 2) end end begin - server = FibonacciServer.new(ch) - puts " [x] Awaiting RPC requests" - server.start("rpc_queue") -rescue Interrupt => _ - ch.close - conn.close + server = FibonacciServer.new - exit(0) + puts ' [x] Awaiting RPC requests' + server.start('rpc_queue') +rescue Interrupt => _ + server.stop end From 707019963a4a642db58cbe6deacc97caf9093b36 Mon Sep 17 00:00:00 2001 From: Gevorg Harutyunyan Date: Sat, 10 Mar 2018 16:28:58 +0400 Subject: [PATCH 052/659] corrId is accessed from within inner class corrId is accessed from within inner class; needs to be declared final --- java/RPCClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/RPCClient.java b/java/RPCClient.java index 227001db..3d586d0b 100644 --- a/java/RPCClient.java +++ b/java/RPCClient.java @@ -29,7 +29,7 @@ public RPCClient() throws IOException, TimeoutException { } public String call(String message) throws IOException, InterruptedException { - String corrId = UUID.randomUUID().toString(); + final String corrId = UUID.randomUUID().toString(); AMQP.BasicProperties props = new AMQP.BasicProperties .Builder() From a41daa6bfe12f54e2dbef9e6db023b61268dfeb4 Mon Sep 17 00:00:00 2001 From: Dorian Date: Sat, 31 Mar 2018 22:42:12 +0200 Subject: [PATCH 053/659] Remove unnecessary to_i in worker.rb in ruby tutorials --- ruby/worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/worker.rb b/ruby/worker.rb index 3d1bd2a1..fc3748f7 100644 --- a/ruby/worker.rb +++ b/ruby/worker.rb @@ -14,7 +14,7 @@ queue.subscribe(manual_ack: true, block: true) do |delivery_info, _properties, body| puts " [x] Received '#{body}'" # imitate some work - sleep body.count('.').to_i + sleep body.count('.') puts ' [x] Done' channel.ack(delivery_info.delivery_tag) end From 0ea96992d9470aaebe3a189a056d54d0799a729d Mon Sep 17 00:00:00 2001 From: Brian Short Date: Sun, 27 May 2018 22:02:26 -0400 Subject: [PATCH 054/659] PHP Tutorial sources conform to PSR-2 standard The code in the PHP tutorials was sometimes a bit messy. With these changes the code conforms to standards outlined here: https://www.php-fig.org/psr/psr-2/ --- php/emit_log.php | 7 ++- php/emit_log_direct.php | 6 +-- php/emit_log_topic.php | 7 ++- php/new_task.php | 14 +++--- php/receive.php | 9 ++-- php/receive_logs.php | 9 ++-- php/receive_logs_direct.php | 16 +++--- php/receive_logs_topic.php | 18 +++---- php/rpc_client.php | 99 +++++++++++++++++++++++-------------- php/rpc_server.php | 49 +++++++++--------- php/send.php | 3 -- php/worker.php | 14 +++--- 12 files changed, 131 insertions(+), 120 deletions(-) diff --git a/php/emit_log.php b/php/emit_log.php index e9079199..adc3a196 100644 --- a/php/emit_log.php +++ b/php/emit_log.php @@ -7,11 +7,12 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->exchange_declare('logs', 'fanout', false, false, false); $data = implode(' ', array_slice($argv, 1)); -if(empty($data)) $data = "info: Hello World!"; +if (empty($data)) { + $data = "info: Hello World!"; +} $msg = new AMQPMessage($data); $channel->basic_publish($msg, 'logs'); @@ -20,5 +21,3 @@ $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/emit_log_direct.php b/php/emit_log_direct.php index 417a7b11..db438d21 100644 --- a/php/emit_log_direct.php +++ b/php/emit_log_direct.php @@ -12,7 +12,9 @@ $severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info'; $data = implode(' ', array_slice($argv, 2)); -if(empty($data)) $data = "Hello World!"; +if (empty($data)) { + $data = "Hello World!"; +} $msg = new AMQPMessage($data); @@ -22,5 +24,3 @@ $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/emit_log_topic.php b/php/emit_log_topic.php index dd5cea2b..02f04cfe 100644 --- a/php/emit_log_topic.php +++ b/php/emit_log_topic.php @@ -7,12 +7,13 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->exchange_declare('topic_logs', 'topic', false, false, false); $routing_key = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'anonymous.info'; $data = implode(' ', array_slice($argv, 2)); -if(empty($data)) $data = "Hello World!"; +if (empty($data)) { + $data = "Hello World!"; +} $msg = new AMQPMessage($data); @@ -22,5 +23,3 @@ $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/new_task.php b/php/new_task.php index 4f7945b2..7f44da01 100644 --- a/php/new_task.php +++ b/php/new_task.php @@ -7,14 +7,16 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->queue_declare('task_queue', false, true, false, false); $data = implode(' ', array_slice($argv, 1)); -if(empty($data)) $data = "Hello World!"; -$msg = new AMQPMessage($data, - array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT) - ); +if (empty($data)) { + $data = "Hello World!"; +} +$msg = new AMQPMessage( + $data, + array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT) +); $channel->basic_publish($msg, '', 'task_queue'); @@ -22,5 +24,3 @@ $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/receive.php b/php/receive.php index c3dc5a87..b4f6853c 100644 --- a/php/receive.php +++ b/php/receive.php @@ -6,22 +6,19 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->queue_declare('hello', false, false, false, false); echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; -$callback = function($msg) { - echo " [x] Received ", $msg->body, "\n"; +$callback = function ($msg) { + echo " [x] Received ", $msg->body, "\n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/receive_logs.php b/php/receive_logs.php index 538d42de..37eba80f 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -6,7 +6,6 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->exchange_declare('logs', 'fanout', false, false, false); list($queue_name, ,) = $channel->queue_declare("", false, false, true, false); @@ -15,17 +14,15 @@ echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; -$callback = function($msg){ - echo ' [x] ', $msg->body, "\n"; +$callback = function ($msg) { + echo ' [x] ', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index 5e44def4..26467e53 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -11,28 +11,26 @@ list($queue_name, ,) = $channel->queue_declare("", false, false, true, false); $severities = array_slice($argv, 1); -if(empty($severities )) { - file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n"); - exit(1); +if (empty($severities)) { + file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n"); + exit(1); } -foreach($severities as $severity) { +foreach ($severities as $severity) { $channel->queue_bind($queue_name, 'direct_logs', $severity); } echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; -$callback = function($msg){ - echo ' [x] '.$msg->delivery_info['routing_key'].':'.$msg->body."\n"; +$callback = function ($msg) { + echo ' [x] '.$msg->delivery_info['routing_key'].':'.$msg->body."\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index b9403e10..7168588c 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -11,28 +11,26 @@ list($queue_name, ,) = $channel->queue_declare("", false, false, true, false); $binding_keys = array_slice($argv, 1); -if( empty($binding_keys )) { - file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n"); - exit(1); +if (empty($binding_keys)) { + file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n"); + exit(1); } -foreach($binding_keys as $binding_key) { - $channel->queue_bind($queue_name, 'topic_logs', $binding_key); +foreach ($binding_keys as $binding_key) { + $channel->queue_bind($queue_name, 'topic_logs', $binding_key); } echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; -$callback = function($msg){ - echo ' [x] ',$msg->delivery_info['routing_key'], ':', $msg->body, "\n"; +$callback = function ($msg) { + echo ' [x] ',$msg->delivery_info['routing_key'], ':', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/rpc_client.php b/php/rpc_client.php index 5e9e0dbf..5dc7044f 100644 --- a/php/rpc_client.php +++ b/php/rpc_client.php @@ -4,48 +4,71 @@ use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; -class FibonacciRpcClient { - private $connection; - private $channel; - private $callback_queue; - private $response; - private $corr_id; +class FibonacciRpcClient +{ + private $connection; + private $channel; + private $callback_queue; + private $response; + private $corr_id; - public function __construct() { - $this->connection = new AMQPStreamConnection( - 'localhost', 5672, 'guest', 'guest'); - $this->channel = $this->connection->channel(); - list($this->callback_queue, ,) = $this->channel->queue_declare( - "", false, false, true, false); - $this->channel->basic_consume( - $this->callback_queue, '', false, false, false, false, - array($this, 'on_response')); - } - public function on_response($rep) { - if($rep->get('correlation_id') == $this->corr_id) { - $this->response = $rep->body; - } - } + public function __construct() + { + $this->connection = new AMQPStreamConnection( + 'localhost', + 5672, + 'guest', + 'guest' + ); + $this->channel = $this->connection->channel(); + list($this->callback_queue, ,) = $this->channel->queue_declare( + "", + false, + false, + true, + false + ); + $this->channel->basic_consume( + $this->callback_queue, + '', + false, + false, + false, + false, + array( + $this, + 'onResponse' + ) + ); + } - public function call($n) { - $this->response = null; - $this->corr_id = uniqid(); + public function onResponse($rep) + { + if ($rep->get('correlation_id') == $this->corr_id) { + $this->response = $rep->body; + } + } - $msg = new AMQPMessage( - (string) $n, - array('correlation_id' => $this->corr_id, - 'reply_to' => $this->callback_queue) - ); - $this->channel->basic_publish($msg, '', 'rpc_queue'); - while(!$this->response) { - $this->channel->wait(); - } - return intval($this->response); - } -}; + public function call($n) + { + $this->response = null; + $this->corr_id = uniqid(); + + $msg = new AMQPMessage( + (string) $n, + array( + 'correlation_id' => $this->corr_id, + 'reply_to' => $this->callback_queue + ) + ); + $this->channel->basic_publish($msg, '', 'rpc_queue'); + while (!$this->response) { + $this->channel->wait(); + } + return intval($this->response); + } +} $fibonacci_rpc = new FibonacciRpcClient(); $response = $fibonacci_rpc->call(30); echo " [.] Got ", $response, "\n"; - -?> diff --git a/php/rpc_server.php b/php/rpc_server.php index 8604882d..19fcf6c3 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -9,38 +9,43 @@ $channel->queue_declare('rpc_queue', false, false, false, false); -function fib($n) { - if ($n == 0) - return 0; - if ($n == 1) - return 1; - return fib($n-1) + fib($n-2); +function fib($n) +{ + if ($n == 0) { + return 0; + } + if ($n == 1) { + return 1; + } + return fib($n-1) + fib($n-2); } echo " [x] Awaiting RPC requests\n"; -$callback = function($req) { - $n = intval($req->body); - echo " [.] fib(", $n, ")\n"; - - $msg = new AMQPMessage( - (string) fib($n), - array('correlation_id' => $req->get('correlation_id')) - ); - - $req->delivery_info['channel']->basic_publish( - $msg, '', $req->get('reply_to')); - $req->delivery_info['channel']->basic_ack( - $req->delivery_info['delivery_tag']); +$callback = function ($req) { + $n = intval($req->body); + echo " [.] fib(", $n, ")\n"; + + $msg = new AMQPMessage( + (string) fib($n), + array('correlation_id' => $req->get('correlation_id')) + ); + + $req->delivery_info['channel']->basic_publish( + $msg, + '', + $req->get('reply_to') + ); + $req->delivery_info['channel']->basic_ack( + $req->delivery_info['delivery_tag'] + ); }; $channel->basic_qos(null, 1, null); $channel->basic_consume('rpc_queue', '', false, false, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> diff --git a/php/send.php b/php/send.php index 64679bba..00c42b3a 100644 --- a/php/send.php +++ b/php/send.php @@ -7,7 +7,6 @@ $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); - $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); @@ -17,5 +16,3 @@ $channel->close(); $connection->close(); - -?> \ No newline at end of file diff --git a/php/worker.php b/php/worker.php index 6c15e619..fa1ddf4b 100644 --- a/php/worker.php +++ b/php/worker.php @@ -10,21 +10,19 @@ echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; -$callback = function($msg){ - echo " [x] Received ", $msg->body, "\n"; - sleep(substr_count($msg->body, '.')); - echo " [x] Done", "\n"; - $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); +$callback = function ($msg) { + echo " [x] Received ", $msg->body, "\n"; + sleep(substr_count($msg->body, '.')); + echo " [x] Done", "\n"; + $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); }; $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); -while(count($channel->callbacks)) { +while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); - -?> \ No newline at end of file From 45d10d8205a919aa6e7f2c96aa37553a44eff2cc Mon Sep 17 00:00:00 2001 From: Brian Short Date: Sun, 27 May 2018 23:44:54 -0400 Subject: [PATCH 055/659] Clean up inconsistent echo statements in PHP Echo statements were inconsistent in the use of double quotes vs. single quotes. Some echo statements had spaces between arguments, some did not. --- php/emit_log.php | 2 +- php/emit_log_direct.php | 2 +- php/emit_log_topic.php | 2 +- php/new_task.php | 2 +- php/receive.php | 4 ++-- php/receive_logs.php | 2 +- php/receive_logs_direct.php | 4 ++-- php/receive_logs_topic.php | 4 ++-- php/rpc_client.php | 2 +- php/rpc_server.php | 2 +- php/worker.php | 6 +++--- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/php/emit_log.php b/php/emit_log.php index adc3a196..aafcd2d5 100644 --- a/php/emit_log.php +++ b/php/emit_log.php @@ -17,7 +17,7 @@ $channel->basic_publish($msg, 'logs'); -echo " [x] Sent ", $data, "\n"; +echo ' [x] Sent ', $data, "\n"; $channel->close(); $connection->close(); diff --git a/php/emit_log_direct.php b/php/emit_log_direct.php index db438d21..e68d662f 100644 --- a/php/emit_log_direct.php +++ b/php/emit_log_direct.php @@ -20,7 +20,7 @@ $channel->basic_publish($msg, 'direct_logs', $severity); -echo " [x] Sent ",$severity,':',$data," \n"; +echo ' [x] Sent ', $severity, ':', $data, "\n"; $channel->close(); $connection->close(); diff --git a/php/emit_log_topic.php b/php/emit_log_topic.php index 02f04cfe..c39e2ff2 100644 --- a/php/emit_log_topic.php +++ b/php/emit_log_topic.php @@ -19,7 +19,7 @@ $channel->basic_publish($msg, 'topic_logs', $routing_key); -echo " [x] Sent ",$routing_key,':',$data," \n"; +echo ' [x] Sent ', $routing_key, ':', $data, "\n"; $channel->close(); $connection->close(); diff --git a/php/new_task.php b/php/new_task.php index 7f44da01..7be98db3 100644 --- a/php/new_task.php +++ b/php/new_task.php @@ -20,7 +20,7 @@ $channel->basic_publish($msg, '', 'task_queue'); -echo " [x] Sent ", $data, "\n"; +echo ' [x] Sent ', $data, "\n"; $channel->close(); $connection->close(); diff --git a/php/receive.php b/php/receive.php index b4f6853c..047617ea 100644 --- a/php/receive.php +++ b/php/receive.php @@ -8,10 +8,10 @@ $channel->queue_declare('hello', false, false, false, false); -echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; +echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { - echo " [x] Received ", $msg->body, "\n"; + echo ' [x] Received ', $msg->body, "\n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); diff --git a/php/receive_logs.php b/php/receive_logs.php index 37eba80f..34e3a257 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -12,7 +12,7 @@ $channel->queue_bind($queue_name, 'logs'); -echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; +echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { echo ' [x] ', $msg->body, "\n"; diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index 26467e53..a93547bf 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -20,10 +20,10 @@ $channel->queue_bind($queue_name, 'direct_logs', $severity); } -echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; +echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] '.$msg->delivery_info['routing_key'].':'.$msg->body."\n"; + echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index 7168588c..22266270 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -20,10 +20,10 @@ $channel->queue_bind($queue_name, 'topic_logs', $binding_key); } -echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; +echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] ',$msg->delivery_info['routing_key'], ':', $msg->body, "\n"; + echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); diff --git a/php/rpc_client.php b/php/rpc_client.php index 5dc7044f..8799c4f2 100644 --- a/php/rpc_client.php +++ b/php/rpc_client.php @@ -71,4 +71,4 @@ public function call($n) $fibonacci_rpc = new FibonacciRpcClient(); $response = $fibonacci_rpc->call(30); -echo " [.] Got ", $response, "\n"; +echo ' [.] Got ', $response, "\n"; diff --git a/php/rpc_server.php b/php/rpc_server.php index 19fcf6c3..c8a5b0f8 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -23,7 +23,7 @@ function fib($n) echo " [x] Awaiting RPC requests\n"; $callback = function ($req) { $n = intval($req->body); - echo " [.] fib(", $n, ")\n"; + echo ' [.] fib(', $n, ")\n"; $msg = new AMQPMessage( (string) fib($n), diff --git a/php/worker.php b/php/worker.php index fa1ddf4b..7f425a23 100644 --- a/php/worker.php +++ b/php/worker.php @@ -8,12 +8,12 @@ $channel->queue_declare('task_queue', false, true, false, false); -echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; +echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { - echo " [x] Received ", $msg->body, "\n"; + echo ' [x] Received ', $msg->body, "\n"; sleep(substr_count($msg->body, '.')); - echo " [x] Done", "\n"; + echo " [x] Done\n"; $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); }; From 1e8cf3e2f9a011babebeba2a79bcdc3bb4e4f86e Mon Sep 17 00:00:00 2001 From: Mohsen Kashi Date: Thu, 31 May 2018 10:52:06 +0430 Subject: [PATCH 056/659] rewrite with Java7 & 8 APIs (Try with resource and Streams) Less lines of code, more readability! (because of lack of rabbit-mq API we can't use lambada expressions) --- java8-maven/pom.xml | 26 ++++++ java8-maven/src/main/java/EmitLog.java | 35 ++++++++ java8-maven/src/main/java/EmitLogDirect.java | 45 +++++++++++ java8-maven/src/main/java/EmitLogHeader.java | 61 ++++++++++++++ java8-maven/src/main/java/EmitLogTopic.java | 48 +++++++++++ java8-maven/src/main/java/NewTask.java | 36 +++++++++ java8-maven/src/main/java/RPCClient.java | 72 +++++++++++++++++ java8-maven/src/main/java/RPCServer.java | 80 +++++++++++++++++++ .../src/main/java/ReceiveLogHeader.java | 62 ++++++++++++++ java8-maven/src/main/java/ReceiveLogs.java | 31 +++++++ .../src/main/java/ReceiveLogsDirect.java | 39 +++++++++ .../src/main/java/ReceiveLogsTopic.java | 40 ++++++++++ java8-maven/src/main/java/Recv.java | 28 +++++++ java8-maven/src/main/java/Send.java | 21 +++++ java8-maven/src/main/java/Worker.java | 49 ++++++++++++ 15 files changed, 673 insertions(+) create mode 100644 java8-maven/pom.xml create mode 100644 java8-maven/src/main/java/EmitLog.java create mode 100644 java8-maven/src/main/java/EmitLogDirect.java create mode 100644 java8-maven/src/main/java/EmitLogHeader.java create mode 100644 java8-maven/src/main/java/EmitLogTopic.java create mode 100644 java8-maven/src/main/java/NewTask.java create mode 100644 java8-maven/src/main/java/RPCClient.java create mode 100644 java8-maven/src/main/java/RPCServer.java create mode 100644 java8-maven/src/main/java/ReceiveLogHeader.java create mode 100644 java8-maven/src/main/java/ReceiveLogs.java create mode 100644 java8-maven/src/main/java/ReceiveLogsDirect.java create mode 100644 java8-maven/src/main/java/ReceiveLogsTopic.java create mode 100644 java8-maven/src/main/java/Recv.java create mode 100644 java8-maven/src/main/java/Send.java create mode 100644 java8-maven/src/main/java/Worker.java diff --git a/java8-maven/pom.xml b/java8-maven/pom.xml new file mode 100644 index 00000000..6cbdcd97 --- /dev/null +++ b/java8-maven/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + + com.rabbitmq + rabbitmq-tutorial + 1.0-SNAPSHOT + jar + + rabbitmq-tutorial + https://github.com/rabbitmq/rabbitmq-tutorials + + + UTF-8 + 1.8 + 1.8 + + + + + com.rabbitmq + amqp-client + LATEST + + + diff --git a/java8-maven/src/main/java/EmitLog.java b/java8-maven/src/main/java/EmitLog.java new file mode 100644 index 00000000..48830cd1 --- /dev/null +++ b/java8-maven/src/main/java/EmitLog.java @@ -0,0 +1,35 @@ +import com.rabbitmq.client.BuiltinExchangeType; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.Channel; + +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class EmitLog { + + private static final String EXCHANGE_NAME = "logs"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); + + String message = getMessage(argv); + + channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } + } + + private static String getMessage(String[] strings) { + if (strings.length < 1) + return "info: Hello World!"; + return Stream.of(strings).collect(Collectors.joining(" ")); + } + +} + diff --git a/java8-maven/src/main/java/EmitLogDirect.java b/java8-maven/src/main/java/EmitLogDirect.java new file mode 100644 index 00000000..e7257696 --- /dev/null +++ b/java8-maven/src/main/java/EmitLogDirect.java @@ -0,0 +1,45 @@ +import com.rabbitmq.client.BuiltinExchangeType; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.Channel; + +import java.util.Arrays; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class EmitLogDirect { + + private static final String EXCHANGE_NAME = "direct_logs"; + + public static void main(String[] argv) throws Exception { + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); + + String severity = getSeverity(argv); + String message = getMessage(argv); + + channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + severity + "':'" + message + "'"); + } + } + + private static String getSeverity(String[] strings) { + if (strings.length < 1) + return "info"; + return strings[0]; + } + + private static String getMessage(String[] strings) { + if (strings.length < 2) + return "Hello World!"; + return Stream.of(Arrays.copyOfRange(strings, 1, strings.length)) + .collect(Collectors.joining(" ")); + } + +} + diff --git a/java8-maven/src/main/java/EmitLogHeader.java b/java8-maven/src/main/java/EmitLogHeader.java new file mode 100644 index 00000000..ca181003 --- /dev/null +++ b/java8-maven/src/main/java/EmitLogHeader.java @@ -0,0 +1,61 @@ +import com.rabbitmq.client.*; + +import java.util.HashMap; +import java.util.Map; + +public class EmitLogHeader { + + private static final String EXCHANGE_NAME = "header_test"; + + public static void main(String[] argv) throws Exception { + if (argv.length < 1) { + System.err.println("Usage: EmitLogHeader message queueName [headers]..."); + System.exit(1); + } + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can store information + // for the receiver here as the routing key is still available in the received message. + String routingKey = "ourTestRoutingKey"; + + // Argument processing: the first arg is the message, the rest are + // key value pairs for headers. + String message = argv[0]; + + // The map for the headers. + Map headers = new HashMap(); + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + for (int i = 1; i < argv.length; i++) { + System.out.println("Adding header " + argv[i] + " with value " + argv[i + 1] + " to Map"); + headers.put(argv[i], argv[i + 1]); + i++; + } + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); + + AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); + + // MessageProperties.PERSISTENT_TEXT_PLAIN is a static instance of AMQP.BasicProperties + // that contains a delivery mode and a priority. So we pass them to the builder. + builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.getDeliveryMode()); + builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.getPriority()); + + // Add the headers to the builder. + builder.headers(headers); + + // Use the builder to create the BasicProperties object. + AMQP.BasicProperties theProps = builder.build(); + + // Now we add the headers. This example only uses string headers, but they can also be integers + channel.basicPublish(EXCHANGE_NAME, routingKey, theProps, message.getBytes("UTF-8")); + System.out.println(" [x] Sent message: '" + message + "'"); + } +} + diff --git a/java8-maven/src/main/java/EmitLogTopic.java b/java8-maven/src/main/java/EmitLogTopic.java new file mode 100644 index 00000000..c08e3753 --- /dev/null +++ b/java8-maven/src/main/java/EmitLogTopic.java @@ -0,0 +1,48 @@ +import com.rabbitmq.client.BuiltinExchangeType; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.Channel; + +import java.util.Arrays; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class EmitLogTopic { + + private static final String EXCHANGE_NAME = "topic_logs"; + + public static void main(String[] argv) { + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); + + String routingKey = getRouting(argv); + String message = getMessage(argv); + + channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'"); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static String getRouting(String[] strings) { + if (strings.length < 1) + return "anonymous.info"; + return strings[0]; + } + + private static String getMessage(String[] strings) { + if (strings.length < 2) + return "Hello World!"; + return Stream.of(Arrays.copyOfRange(strings, 1, strings.length)) + .collect(Collectors.joining(" ")); + } +} + diff --git a/java8-maven/src/main/java/NewTask.java b/java8-maven/src/main/java/NewTask.java new file mode 100644 index 00000000..c9b1409f --- /dev/null +++ b/java8-maven/src/main/java/NewTask.java @@ -0,0 +1,36 @@ +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.MessageProperties; + +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class NewTask { + + private static final String TASK_QUEUE_NAME = "task_queue"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); + + String message = getMessage(argv); + + channel.basicPublish("", TASK_QUEUE_NAME, + MessageProperties.PERSISTENT_TEXT_PLAIN, + message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } + } + + private static String getMessage(String[] strings) { + if (strings.length < 1) + return "Hello World!"; + return Stream.of(strings).collect(Collectors.joining(" ")); + } + +} diff --git a/java8-maven/src/main/java/RPCClient.java b/java8-maven/src/main/java/RPCClient.java new file mode 100644 index 00000000..1eafea05 --- /dev/null +++ b/java8-maven/src/main/java/RPCClient.java @@ -0,0 +1,72 @@ +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.DefaultConsumer; +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Envelope; + +import java.io.IOException; +import java.util.UUID; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.TimeoutException; + +public class RPCClient implements AutoCloseable { + + private Connection connection; + private Channel channel; + private String requestQueueName = "rpc_queue"; + private String replyQueueName; + + public RPCClient() throws IOException, TimeoutException { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + + connection = factory.newConnection(); + channel = connection.createChannel(); + + replyQueueName = channel.queueDeclare().getQueue(); + } + + public String call(String message) throws IOException, InterruptedException { + final String corrId = UUID.randomUUID().toString(); + + AMQP.BasicProperties props = new AMQP.BasicProperties + .Builder() + .correlationId(corrId) + .replyTo(replyQueueName) + .build(); + + channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")); + + final BlockingQueue response = new ArrayBlockingQueue(1); + + channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { + if (properties.getCorrelationId().equals(corrId)) { + response.offer(new String(body, "UTF-8")); + } + } + }); + + return response.take(); + } + + public void close() throws IOException { + connection.close(); + } + + public static void main(String[] argv) { + try (RPCClient fibonacciRpc = new RPCClient()) { + System.out.println(" [x] Requesting fib(30)"); + + final String response = fibonacciRpc.call("30"); + System.out.println(" [.] Got '" + response + "'"); + + } catch (IOException | TimeoutException | InterruptedException e) { + e.printStackTrace(); + } + } +} + diff --git a/java8-maven/src/main/java/RPCServer.java b/java8-maven/src/main/java/RPCServer.java new file mode 100644 index 00000000..a9a76bd1 --- /dev/null +++ b/java8-maven/src/main/java/RPCServer.java @@ -0,0 +1,80 @@ +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Consumer; +import com.rabbitmq.client.DefaultConsumer; +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Envelope; + +import java.io.IOException; +import java.util.concurrent.TimeoutException; + +public class RPCServer { + + private static final String RPC_QUEUE_NAME = "rpc_queue"; + + private static int fib(int n) { + if (n == 0) return 0; + if (n == 1) return 1; + return fib(n - 1) + fib(n - 2); + } + + public static void main(String[] argv) { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + + + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); + + channel.basicQos(1); + + System.out.println(" [x] Awaiting RPC requests"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { + AMQP.BasicProperties replyProps = new AMQP.BasicProperties + .Builder() + .correlationId(properties.getCorrelationId()) + .build(); + + String response = ""; + + try { + String message = new String(body, "UTF-8"); + int n = Integer.parseInt(message); + + System.out.println(" [.] fib(" + message + ")"); + response += fib(n); + } catch (RuntimeException e) { + System.out.println(" [.] " + e.toString()); + } finally { + channel.basicPublish("", properties.getReplyTo(), replyProps, response.getBytes("UTF-8")); + channel.basicAck(envelope.getDeliveryTag(), false); + // RabbitMq consumer worker thread notifies the RPC server owner thread + synchronized (this) { + this.notify(); + } + } + } + }; + + channel.basicConsume(RPC_QUEUE_NAME, false, consumer); + // Wait and be prepared to consume the message from RPC client. + while (true) { + synchronized (consumer) { + try { + consumer.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } catch (IOException | TimeoutException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/java8-maven/src/main/java/ReceiveLogHeader.java b/java8-maven/src/main/java/ReceiveLogHeader.java new file mode 100644 index 00000000..b6a4eda5 --- /dev/null +++ b/java8-maven/src/main/java/ReceiveLogHeader.java @@ -0,0 +1,62 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class ReceiveLogHeader { + private static final String EXCHANGE_NAME = "header_test"; + + public static void main(String[] argv) throws Exception { + if (argv.length < 1) { + System.err.println("Usage: ReceiveLogsHeader queueName [headers]..."); + System.exit(1); + } + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can receive information + // from the sender here as the routing key is still available in the received message. + String routingKeyFromUser = "ourTestRoutingKey"; + + // Argument processing: the first arg is the local queue name, the rest are + // key value pairs for headers. + String queueInputName = argv[0]; + + // The map for the headers. + Map headers = new HashMap(); + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + // Note that when you run this code you should include the x-match header on the command + // line. Example: + // java -cp $CP ReceiveLogsHeader testQueue1 x-match any header1 value1 + for (int i = 1; i < argv.length; i++) { + headers.put(argv[i], argv[i + 1]); + System.out.println("Binding header " + argv[i] + " and value " + argv[i + 1] + " to queue " + queueInputName); + i++; + } + + String queueName = channel.queueDeclare(queueInputName, true, false, false, null).getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, routingKeyFromUser, headers); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, + AMQP.BasicProperties properties, byte[] body) throws IOException { + String message = new String(body, "UTF-8"); + System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); + } + }; + channel.basicConsume(queueName, true, consumer); + } +} + diff --git a/java8-maven/src/main/java/ReceiveLogs.java b/java8-maven/src/main/java/ReceiveLogs.java new file mode 100644 index 00000000..fd807a6b --- /dev/null +++ b/java8-maven/src/main/java/ReceiveLogs.java @@ -0,0 +1,31 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; + +public class ReceiveLogs { + private static final String EXCHANGE_NAME = "logs"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); + String queueName = channel.queueDeclare().getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, ""); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, + AMQP.BasicProperties properties, byte[] body) throws IOException { + String message = new String(body, "UTF-8"); + System.out.println(" [x] Received '" + message + "'"); + } + }; + channel.basicConsume(queueName, true, consumer); + } +} + diff --git a/java8-maven/src/main/java/ReceiveLogsDirect.java b/java8-maven/src/main/java/ReceiveLogsDirect.java new file mode 100644 index 00000000..0a13f8d1 --- /dev/null +++ b/java8-maven/src/main/java/ReceiveLogsDirect.java @@ -0,0 +1,39 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; + +public class ReceiveLogsDirect { + + private static final String EXCHANGE_NAME = "direct_logs"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); + String queueName = channel.queueDeclare().getQueue(); + + if (argv.length < 1){ + System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]"); + System.exit(1); + } + + for(String severity : argv){ + channel.queueBind(queueName, EXCHANGE_NAME, severity); + } + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, + AMQP.BasicProperties properties, byte[] body) throws IOException { + String message = new String(body, "UTF-8"); + System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); + } + }; + channel.basicConsume(queueName, true, consumer); + } +} + diff --git a/java8-maven/src/main/java/ReceiveLogsTopic.java b/java8-maven/src/main/java/ReceiveLogsTopic.java new file mode 100644 index 00000000..f100d34f --- /dev/null +++ b/java8-maven/src/main/java/ReceiveLogsTopic.java @@ -0,0 +1,40 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; + +public class ReceiveLogsTopic { + + private static final String EXCHANGE_NAME = "topic_logs"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); + String queueName = channel.queueDeclare().getQueue(); + + if (argv.length < 1) { + System.err.println("Usage: ReceiveLogsTopic [binding_key]..."); + System.exit(1); + } + + for (String bindingKey : argv) { + channel.queueBind(queueName, EXCHANGE_NAME, bindingKey); + } + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, + AMQP.BasicProperties properties, byte[] body) throws IOException { + String message = new String(body, "UTF-8"); + System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); + } + }; + channel.basicConsume(queueName, true, consumer); + } +} + diff --git a/java8-maven/src/main/java/Recv.java b/java8-maven/src/main/java/Recv.java new file mode 100644 index 00000000..355397c5 --- /dev/null +++ b/java8-maven/src/main/java/Recv.java @@ -0,0 +1,28 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; + +public class Recv { + + private final static String QUEUE_NAME = "hello"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.queueDeclare(QUEUE_NAME, false, false, false, null); + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) + throws IOException { + String message = new String(body, "UTF-8"); + System.out.println(" [x] Received '" + message + "'"); + } + }; + channel.basicConsume(QUEUE_NAME, true, consumer); + } +} diff --git a/java8-maven/src/main/java/Send.java b/java8-maven/src/main/java/Send.java new file mode 100644 index 00000000..e0d470c5 --- /dev/null +++ b/java8-maven/src/main/java/Send.java @@ -0,0 +1,21 @@ +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; + +public class Send { + + private final static String QUEUE_NAME = "hello"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + + channel.queueDeclare(QUEUE_NAME, false, false, false, null); + String message = "Hello World!"; + channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } + } +} diff --git a/java8-maven/src/main/java/Worker.java b/java8-maven/src/main/java/Worker.java new file mode 100644 index 00000000..ca679d93 --- /dev/null +++ b/java8-maven/src/main/java/Worker.java @@ -0,0 +1,49 @@ +import com.rabbitmq.client.*; + +import java.io.IOException; + +public class Worker { + + private static final String TASK_QUEUE_NAME = "task_queue"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + final Connection connection = factory.newConnection(); + final Channel channel = connection.createChannel(); + + channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + channel.basicQos(1); + + final Consumer consumer = new DefaultConsumer(channel) { + @Override + public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { + String message = new String(body, "UTF-8"); + + System.out.println(" [x] Received '" + message + "'"); + try { + doWork(message); + } finally { + System.out.println(" [x] Done"); + channel.basicAck(envelope.getDeliveryTag(), false); + } + } + }; + channel.basicConsume(TASK_QUEUE_NAME, false, consumer); + } + + private static void doWork(String task) { + for (char ch : task.toCharArray()) { + if (ch == '.') { + try { + Thread.sleep(1000); + } catch (InterruptedException _ignored) { + Thread.currentThread().interrupt(); + } + } + } + } +} + From d42af4eea536eaf85187a5640239d379056b5b5c Mon Sep 17 00:00:00 2001 From: Mohsen Kashi Date: Thu, 31 May 2018 13:52:41 +0430 Subject: [PATCH 057/659] refactor string concatenation (user String.join instead of stream) --- java8-maven/src/main/java/EmitLog.java | 2 +- java8-maven/src/main/java/EmitLogDirect.java | 3 +-- java8-maven/src/main/java/EmitLogTopic.java | 3 +-- java8-maven/src/main/java/NewTask.java | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/java8-maven/src/main/java/EmitLog.java b/java8-maven/src/main/java/EmitLog.java index 48830cd1..301d6918 100644 --- a/java8-maven/src/main/java/EmitLog.java +++ b/java8-maven/src/main/java/EmitLog.java @@ -28,7 +28,7 @@ public static void main(String[] argv) throws Exception { private static String getMessage(String[] strings) { if (strings.length < 1) return "info: Hello World!"; - return Stream.of(strings).collect(Collectors.joining(" ")); + return String.join(" ", strings); } } diff --git a/java8-maven/src/main/java/EmitLogDirect.java b/java8-maven/src/main/java/EmitLogDirect.java index e7257696..cb3418a4 100644 --- a/java8-maven/src/main/java/EmitLogDirect.java +++ b/java8-maven/src/main/java/EmitLogDirect.java @@ -37,8 +37,7 @@ private static String getSeverity(String[] strings) { private static String getMessage(String[] strings) { if (strings.length < 2) return "Hello World!"; - return Stream.of(Arrays.copyOfRange(strings, 1, strings.length)) - .collect(Collectors.joining(" ")); + return String.join(" ",Arrays.copyOfRange(strings, 1, strings.length)); } } diff --git a/java8-maven/src/main/java/EmitLogTopic.java b/java8-maven/src/main/java/EmitLogTopic.java index c08e3753..cf5f2697 100644 --- a/java8-maven/src/main/java/EmitLogTopic.java +++ b/java8-maven/src/main/java/EmitLogTopic.java @@ -41,8 +41,7 @@ private static String getRouting(String[] strings) { private static String getMessage(String[] strings) { if (strings.length < 2) return "Hello World!"; - return Stream.of(Arrays.copyOfRange(strings, 1, strings.length)) - .collect(Collectors.joining(" ")); + return String.join(" ", Arrays.copyOfRange(strings, 1, strings.length)); } } diff --git a/java8-maven/src/main/java/NewTask.java b/java8-maven/src/main/java/NewTask.java index c9b1409f..868067ea 100644 --- a/java8-maven/src/main/java/NewTask.java +++ b/java8-maven/src/main/java/NewTask.java @@ -30,7 +30,7 @@ public static void main(String[] argv) throws Exception { private static String getMessage(String[] strings) { if (strings.length < 1) return "Hello World!"; - return Stream.of(strings).collect(Collectors.joining(" ")); + return String.join(" ", strings); } } From 56c4b008b98a241e14c231d5a7d66f4f4a9d0e54 Mon Sep 17 00:00:00 2001 From: JiangYongKang Date: Fri, 8 Jun 2018 17:54:12 +0800 Subject: [PATCH 058/659] add kotlin example --- kotlin-gradle/build.gradle | 31 ++++ kotlin-gradle/gradlew | 172 ++++++++++++++++++ kotlin-gradle/gradlew.bat | 84 +++++++++ kotlin-gradle/settings.gradle | 2 + kotlin-gradle/src/main/kotlin/EmitLog.kt | 45 +++++ .../src/main/kotlin/EmitLogDirect.kt | 52 ++++++ .../src/main/kotlin/EmitLogHeader.kt | 70 +++++++ kotlin-gradle/src/main/kotlin/EmitLogTopic.kt | 51 ++++++ kotlin-gradle/src/main/kotlin/NewTask.kt | 47 +++++ kotlin-gradle/src/main/kotlin/RPCClient.kt | 60 ++++++ kotlin-gradle/src/main/kotlin/RPCServer.kt | 58 ++++++ .../src/main/kotlin/ReceiveLogHeader.kt | 68 +++++++ kotlin-gradle/src/main/kotlin/ReceiveLogs.kt | 35 ++++ .../src/main/kotlin/ReceiveLogsDirect.kt | 42 +++++ .../src/main/kotlin/ReceiveLogsTopic.kt | 43 +++++ kotlin-gradle/src/main/kotlin/Recv.kt | 34 ++++ kotlin-gradle/src/main/kotlin/Send.kt | 28 +++ kotlin-gradle/src/main/kotlin/Worker.kt | 57 ++++++ 18 files changed, 979 insertions(+) create mode 100644 kotlin-gradle/build.gradle create mode 100755 kotlin-gradle/gradlew create mode 100644 kotlin-gradle/gradlew.bat create mode 100644 kotlin-gradle/settings.gradle create mode 100644 kotlin-gradle/src/main/kotlin/EmitLog.kt create mode 100644 kotlin-gradle/src/main/kotlin/EmitLogDirect.kt create mode 100644 kotlin-gradle/src/main/kotlin/EmitLogHeader.kt create mode 100644 kotlin-gradle/src/main/kotlin/EmitLogTopic.kt create mode 100644 kotlin-gradle/src/main/kotlin/NewTask.kt create mode 100644 kotlin-gradle/src/main/kotlin/RPCClient.kt create mode 100644 kotlin-gradle/src/main/kotlin/RPCServer.kt create mode 100644 kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt create mode 100644 kotlin-gradle/src/main/kotlin/ReceiveLogs.kt create mode 100644 kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt create mode 100644 kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt create mode 100644 kotlin-gradle/src/main/kotlin/Recv.kt create mode 100644 kotlin-gradle/src/main/kotlin/Send.kt create mode 100644 kotlin-gradle/src/main/kotlin/Worker.kt diff --git a/kotlin-gradle/build.gradle b/kotlin-gradle/build.gradle new file mode 100644 index 00000000..a775e5d9 --- /dev/null +++ b/kotlin-gradle/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.2.31' + + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +group 'com.rabbitmq' +version '1.0-SNAPSHOT' + +apply plugin: 'kotlin' + +repositories { + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + compile "com.rabbitmq:amqp-client:latest.release" +} + +compileKotlin { + kotlinOptions.jvmTarget = "1.8" +} +compileTestKotlin { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/kotlin-gradle/gradlew b/kotlin-gradle/gradlew new file mode 100755 index 00000000..cccdd3d5 --- /dev/null +++ b/kotlin-gradle/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/kotlin-gradle/gradlew.bat b/kotlin-gradle/gradlew.bat new file mode 100644 index 00000000..e95643d6 --- /dev/null +++ b/kotlin-gradle/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kotlin-gradle/settings.gradle b/kotlin-gradle/settings.gradle new file mode 100644 index 00000000..a61ed433 --- /dev/null +++ b/kotlin-gradle/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'rabbitmq-tutorial' + diff --git a/kotlin-gradle/src/main/kotlin/EmitLog.kt b/kotlin-gradle/src/main/kotlin/EmitLog.kt new file mode 100644 index 00000000..bd32b1d0 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/EmitLog.kt @@ -0,0 +1,45 @@ +import com.rabbitmq.client.BuiltinExchangeType +import com.rabbitmq.client.ConnectionFactory + + +/** + * Author: vincent + * Date: 2018-06-08 16:49:00 + * Comment: + */ + +class EmitLog { + companion object { + const val EXCHANGE_NAME = "logs" + + fun getMessage(strings: Array): String { + return if (strings.isEmpty()) "info: Hello World!" else joinStrings(strings, " ") + } + + private fun joinStrings(strings: Array, delimiter: String): String { + val length = strings.size + if (length == 0) return "" + val words = StringBuilder(strings[0]) + for (i in 1 until length) { + words.append(delimiter).append(strings[i]) + } + return words.toString() + } + } +} + +fun main(args: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + channel.exchangeDeclare(EmitLog.EXCHANGE_NAME, BuiltinExchangeType.FANOUT) + + val message = EmitLog.getMessage(args) + channel.basicPublish(EmitLog.EXCHANGE_NAME, "", null, message.toByteArray()) + System.out.println(" [x] Sent '$message'") + + channel.close() + connection.close() +} + diff --git a/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt b/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt new file mode 100644 index 00000000..2de5eb9e --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt @@ -0,0 +1,52 @@ + +import com.rabbitmq.client.BuiltinExchangeType +import com.rabbitmq.client.ConnectionFactory + +/** + * Author: vincent + * Date: 2018-06-08 17:08:00 + * Comment: + */ + +class EmitLogDirect { + companion object { + const val EXCHANGE_NAME = "direct_logs" + + fun getSeverity(strings: Array): String { + return if (strings.isEmpty()) "info" else strings[0] + } + + fun getMessage(strings: Array): String { + return if (strings.size < 2) "Hello World!" else joinStrings(strings, " ", 1) + } + + private fun joinStrings(strings: Array, delimiter: String, startIndex: Int): String { + val length = strings.size + if (length == 0) return "" + if (length < startIndex) return "" + val words = StringBuilder(strings[startIndex]) + for (i in startIndex + 1 until length) { + words.append(delimiter).append(strings[i]) + } + return words.toString() + } + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(EmitLogDirect.EXCHANGE_NAME, BuiltinExchangeType.DIRECT) + + val severity = EmitLogDirect.getSeverity(argv) + val message = EmitLogDirect.getMessage(argv) + + channel.basicPublish(EmitLogDirect.EXCHANGE_NAME, severity, null, message.toByteArray(charset("UTF-8"))) + println(" [x] Sent '$severity':'$message'") + + channel.close() + connection.close() +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt b/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt new file mode 100644 index 00000000..12760469 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt @@ -0,0 +1,70 @@ +import com.rabbitmq.client.AMQP +import com.rabbitmq.client.BuiltinExchangeType +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.MessageProperties +import java.util.* + +/** + * Author: vincent + * Date: 2018-06-08 17:09:00 + * Comment: + */ + +class EmitLogHeader { + companion object { + const val EXCHANGE_NAME = "header_test" + } +} + +fun main(argv: Array) { + if (argv.isEmpty()) { + System.err.println("Usage: EmitLogHeader message queueName [headers]...") + System.exit(1) + } + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can store information + // for the receiver here as the routing key is still available in the received message. + val routingKey = "ourTestRoutingKey" + + // Argument processing: the first arg is the message, the rest are + // key value pairs for headers. + val message = argv[0] + + // The map for the headers. + val headers = HashMap() + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + var i = 1 + while (i < argv.size) { + println("Adding header " + argv[i] + " with value " + argv[i + 1] + " to Map") + headers[argv[i]] = argv[i + 1] + i++ + i++ + } + + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(EmitLogHeader.EXCHANGE_NAME, BuiltinExchangeType.HEADERS) + + val builder = AMQP.BasicProperties.Builder() + + // MessageProperties.PERSISTENT_TEXT_PLAIN is a static instance of AMQP.BasicProperties + // that contains a delivery mode and a priority. So we pass them to the builder. + builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.deliveryMode) + builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.priority) + + // Add the headers to the builder. + builder.headers(headers) + + // Use the builder to create the BasicProperties object. + val theProps = builder.build() + + // Now we add the headers. This example only uses string headers, but they can also be integers + channel.basicPublish(EmitLogHeader.EXCHANGE_NAME, routingKey, theProps, message.toByteArray(charset("UTF-8"))) + println(" [x] Sent message: '$message'") +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt new file mode 100644 index 00000000..29aa166a --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt @@ -0,0 +1,51 @@ + +import com.rabbitmq.client.BuiltinExchangeType +import com.rabbitmq.client.Channel +import com.rabbitmq.client.Connection +import com.rabbitmq.client.ConnectionFactory + +/** + * Author: vincent + * Date: 2018-06-08 17:13:00 + * Comment: + */ + +class EmitLogTopic { + companion object { + const val EXCHANGE_NAME = "topic_logs" + + fun getRouting(strings: Array): String { + return if (strings.isEmpty()) "anonymous.info" else strings[0] + } + + fun getMessage(strings: Array): String { + return if (strings.size < 2) "Hello World!" else joinStrings(strings, " ", 1) + } + + private fun joinStrings(strings: Array, delimiter: String, startIndex: Int): String { + val length = strings.size + if (length == 0) return "" + if (length < startIndex) return "" + val words = StringBuilder(strings[startIndex]) + for (i in startIndex + 1 until length) { + words.append(delimiter).append(strings[i]) + } + return words.toString() + } + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection: Connection = factory.newConnection() + val channel: Channel = connection.createChannel() + + channel.exchangeDeclare(EmitLogTopic.EXCHANGE_NAME, BuiltinExchangeType.TOPIC) + + val routingKey = EmitLogTopic.getRouting(argv) + val message = EmitLogTopic.getMessage(argv) + + channel.basicPublish(EmitLogTopic.EXCHANGE_NAME, routingKey, null, message.toByteArray(charset("UTF-8"))) + println(" [x] Sent '$routingKey':'$message'") +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/NewTask.kt b/kotlin-gradle/src/main/kotlin/NewTask.kt new file mode 100644 index 00000000..134c5278 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/NewTask.kt @@ -0,0 +1,47 @@ +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.MessageProperties + +/** + * Author: vincent + * Date: 2018-06-08 17:17:00 + * Comment: + */ + +class NewTask { + companion object { + const val TASK_QUEUE_NAME = "task_queue" + + fun getMessage(strings: Array): String { + return if (strings.isEmpty()) "Hello World!" else joinStrings(strings, " ") + } + + private fun joinStrings(strings: Array, delimiter: String): String { + val length = strings.size + if (length == 0) return "" + val words = StringBuilder(strings[0]) + for (i in 1 until length) { + words.append(delimiter).append(strings[i]) + } + return words.toString() + } + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.queueDeclare(NewTask.TASK_QUEUE_NAME, true, false, false, null) + + val message = NewTask.getMessage(argv) + + channel.basicPublish("", NewTask.TASK_QUEUE_NAME, + MessageProperties.PERSISTENT_TEXT_PLAIN, + message.toByteArray(charset("UTF-8"))) + println(" [x] Sent '$message'") + + channel.close() + connection.close() +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/RPCClient.kt b/kotlin-gradle/src/main/kotlin/RPCClient.kt new file mode 100644 index 00000000..27dfc238 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/RPCClient.kt @@ -0,0 +1,60 @@ +import com.rabbitmq.client.* +import java.util.* +import java.util.concurrent.ArrayBlockingQueue + + +/** + * Author: vincent + * Date: 2018-06-08 17:30:00 + * Comment: + */ + +class RPCClient { + private var connection: Connection + private var channel: Channel + private val requestQueueName = "rpc_queue" + private var replyQueueName: String + + init { + val factory = ConnectionFactory() + factory.host = "localhost" + connection = factory.newConnection() + channel = connection.createChannel() + replyQueueName = channel.queueDeclare().queue + } + + fun call(message: String): String { + val corrId = UUID.randomUUID().toString() + + val props = AMQP.BasicProperties.Builder() + .correlationId(corrId) + .replyTo(replyQueueName) + .build() + + channel.basicPublish("", requestQueueName, props, message.toByteArray(charset("UTF-8"))) + + val response = ArrayBlockingQueue(1) + + channel.basicConsume(replyQueueName, true, object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: ByteArray) { + if (properties.correlationId == corrId) { + response.offer(String(body, charset("UTF-8"))) + } + } + }) + + return response.take() + } + + fun close() { + connection.close() + } +} + +fun main(args: Array) { + val fibonacciRpc = RPCClient() + val response: String = fibonacciRpc.call("30") + println(" [x] Requesting fib(30)") + println(" [.] Got '$response'") + fibonacciRpc.close() +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/RPCServer.kt b/kotlin-gradle/src/main/kotlin/RPCServer.kt new file mode 100644 index 00000000..b1f63d79 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/RPCServer.kt @@ -0,0 +1,58 @@ +import com.rabbitmq.client.AMQP +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.DefaultConsumer +import com.rabbitmq.client.Envelope +import sun.jvm.hotspot.HelloWorld.fib + + +/** + * Author: vincent + * Date: 2018-06-08 17:35:00 + * Comment: + */ + +class RPCServer { + companion object { + const val RPC_QUEUE_NAME = "rpc_queue" + + fun fib(n: Int): Int { + if (n == 0) return 0 + return if (n == 1) 1 else fib(n - 1) + fib(n - 2) + } + } +} + +fun main(args: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.queueDeclare(RPCServer.RPC_QUEUE_NAME, false, false, false, null) + + channel.basicQos(1) + + System.out.println(" [x] Awaiting RPC requests") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: ByteArray) { + val replyProps = AMQP.BasicProperties.Builder() + .correlationId(properties.correlationId) + .build() + val message = String(body, charset("UTF-8")) + val n = Integer.parseInt(message) + println(" [.] fib($message)") + val response = fib(n).toString() + channel.basicPublish("", properties.replyTo, replyProps, response.toByteArray()) + channel.basicAck(envelope.deliveryTag, false) + } + } + + channel.basicConsume(RPCServer.RPC_QUEUE_NAME, false, consumer) + // Wait and be prepared to consume the message from RPC client. + while (true) { + synchronized(consumer) { + (consumer as Object).wait() + } + } +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt new file mode 100644 index 00000000..bcb84712 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt @@ -0,0 +1,68 @@ +import com.rabbitmq.client.* +import java.util.* + + +/** + * Author: vincent + * Date: 2018-06-08 17:19:00 + * Comment: + */ + +class ReceiveLogHeader { + companion object { + const val EXCHANGE_NAME = "header_test" + } +} + +fun main(argv: Array) { + if (argv.isEmpty()) { + System.err.println("Usage: ReceiveLogsHeader queueName [headers]...") + System.exit(1) + } + + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(ReceiveLogHeader.EXCHANGE_NAME, BuiltinExchangeType.HEADERS) + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can receive information + // from the sender here as the routing key is still available in the received message. + val routingKeyFromUser = "ourTestRoutingKey" + + // Argument processing: the first arg is the local queue name, the rest are + // key value pairs for headers. + val queueInputName = argv[0] + + // The map for the headers. + val headers = HashMap() + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + // Note that when you run this code you should include the x-match header on the command + // line. Example: + // java -cp $CP ReceiveLogsHeader testQueue1 x-match any header1 value1 + var i = 1 + while (i < argv.size) { + headers[argv[i]] = argv[i + 1] + println("Binding header " + argv[i] + " and value " + argv[i + 1] + " to queue " + queueInputName) + i++ + i++ + } + + val queueName = channel.queueDeclare(queueInputName, true, false, false, null).queue + channel.queueBind(queueName, ReceiveLogHeader.EXCHANGE_NAME, routingKeyFromUser, headers) + + println(" [*] Waiting for messages. To exit press CTRL+C") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, + properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + System.out.println(" [x] Received '" + envelope.routingKey + "':'" + message + "'") + } + } + channel.basicConsume(queueName, true, consumer) +} diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt new file mode 100644 index 00000000..a3163311 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt @@ -0,0 +1,35 @@ +import com.rabbitmq.client.* + +/** + * Author: vincent + * Date: 2018-06-08 17:25:00 + * Comment: + */ + +class ReceiveLogs { + companion object { + const val EXCHANGE_NAME = "logs" + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(ReceiveLogs.EXCHANGE_NAME, BuiltinExchangeType.FANOUT) + val queueName = channel.queueDeclare().queue + channel.queueBind(queueName, ReceiveLogs.EXCHANGE_NAME, "") + + println(" [*] Waiting for messages. To exit press CTRL+C") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, + properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + println(" [x] Received '$message'") + } + } + channel.basicConsume(queueName, true, consumer) +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt new file mode 100644 index 00000000..38b4758d --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt @@ -0,0 +1,42 @@ +import com.rabbitmq.client.* + +/** + * Author: vincent + * Date: 2018-06-08 17:27:00 + * Comment: + */ + +class ReceiveLogsDirect { + companion object { + const val EXCHANGE_NAME = "direct_logs" + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(ReceiveLogsDirect.EXCHANGE_NAME, BuiltinExchangeType.DIRECT) + val queueName = channel.queueDeclare().queue + + if (argv.isEmpty()) { + System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]") + System.exit(1) + } + + for (severity in argv) { + channel.queueBind(queueName, ReceiveLogsDirect.EXCHANGE_NAME, severity) + } + println(" [*] Waiting for messages. To exit press CTRL+C") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, + properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + System.out.println(" [x] Received '" + envelope.routingKey + "':'" + message + "'") + } + } + channel.basicConsume(queueName, true, consumer) +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt new file mode 100644 index 00000000..29e4883f --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt @@ -0,0 +1,43 @@ +import com.rabbitmq.client.* + +/** + * Author: vincent + * Date: 2018-06-08 17:28:00 + * Comment: + */ + +class ReceiveLogsTopic { + companion object { + const val EXCHANGE_NAME = "topic_logs" + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.exchangeDeclare(ReceiveLogsTopic.EXCHANGE_NAME, BuiltinExchangeType.TOPIC) + val queueName = channel.queueDeclare().queue + + if (argv.isEmpty()) { + System.err.println("Usage: ReceiveLogsTopic [binding_key]...") + System.exit(1) + } + + for (bindingKey in argv) { + channel.queueBind(queueName, ReceiveLogsTopic.EXCHANGE_NAME, bindingKey) + } + + println(" [*] Waiting for messages. To exit press CTRL+C") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, + properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + System.out.println(" [x] Received '" + envelope.routingKey + "':'" + message + "'") + } + } + channel.basicConsume(queueName, true, consumer) +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/Recv.kt b/kotlin-gradle/src/main/kotlin/Recv.kt new file mode 100644 index 00000000..6fa8413c --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/Recv.kt @@ -0,0 +1,34 @@ +import com.rabbitmq.client.AMQP +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.DefaultConsumer +import com.rabbitmq.client.Envelope + +/** + * Author: vincent + * Date: 2018-06-08 17:29:00 + * Comment: + */ + +class Recv { + companion object { + const val QUEUE_NAME = "hello" + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.queueDeclare(Recv.QUEUE_NAME, false, false, false, null) + println(" [*] Waiting for messages. To exit press CTRL+C") + + val consumer = object : DefaultConsumer(channel) { + override fun handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + println(" [x] Received '$message'") + } + } + channel.basicConsume(Recv.QUEUE_NAME, true, consumer) +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/Send.kt b/kotlin-gradle/src/main/kotlin/Send.kt new file mode 100644 index 00000000..2e90e7c1 --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/Send.kt @@ -0,0 +1,28 @@ +import com.rabbitmq.client.ConnectionFactory + +/** + * Author: vincent + * Date: 2018-06-08 17:47:00 + * Comment: + */ + +class Send { + companion object { + const val QUEUE_NAME = "hello" + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.queueDeclare(Send.QUEUE_NAME, false, false, false, null) + val message = "Hello World!" + channel.basicPublish("", Send.QUEUE_NAME, null, message.toByteArray(charset("UTF-8"))) + println(" [x] Sent '$message'") + + channel.close() + connection.close() +} \ No newline at end of file diff --git a/kotlin-gradle/src/main/kotlin/Worker.kt b/kotlin-gradle/src/main/kotlin/Worker.kt new file mode 100644 index 00000000..250dd7fe --- /dev/null +++ b/kotlin-gradle/src/main/kotlin/Worker.kt @@ -0,0 +1,57 @@ +import com.rabbitmq.client.AMQP +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.DefaultConsumer +import com.rabbitmq.client.Envelope +import java.io.IOException + +/** + * Author: vincent + * Date: 2018-06-08 17:48:00 + * Comment: + */ + +class Worker { + companion object { + const val TASK_QUEUE_NAME = "task_queue" + + fun doWork(task: String) { + for (ch in task.toCharArray()) { + if (ch == '.') { + try { + Thread.sleep(1000) + } catch (_ignored: InterruptedException) { + Thread.currentThread().interrupt() + } + } + } + } + } +} + +fun main(argv: Array) { + val factory = ConnectionFactory() + factory.host = "localhost" + val connection = factory.newConnection() + val channel = connection.createChannel() + + channel.queueDeclare(Worker.TASK_QUEUE_NAME, true, false, false, null) + println(" [*] Waiting for messages. To exit press CTRL+C") + + channel.basicQos(1) + + val consumer = object : DefaultConsumer(channel) { + @Throws(IOException::class) + override fun handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: ByteArray) { + val message = String(body, charset("UTF-8")) + + println(" [x] Received '$message'") + try { + Worker.doWork(message) + } finally { + println(" [x] Done") + channel.basicAck(envelope.deliveryTag, false) + } + } + } + channel.basicConsume(Worker.TASK_QUEUE_NAME, false, consumer) +} \ No newline at end of file From e754ba6e777e77d0574a5877ea7974791cc75774 Mon Sep 17 00:00:00 2001 From: JiangYongKang Date: Sat, 9 Jun 2018 10:54:38 +0800 Subject: [PATCH 059/659] remove authorship information --- kotlin-gradle/src/main/kotlin/EmitLog.kt | 6 ------ kotlin-gradle/src/main/kotlin/EmitLogDirect.kt | 5 ----- kotlin-gradle/src/main/kotlin/EmitLogHeader.kt | 5 ----- kotlin-gradle/src/main/kotlin/EmitLogTopic.kt | 5 ----- kotlin-gradle/src/main/kotlin/NewTask.kt | 5 ----- kotlin-gradle/src/main/kotlin/RPCClient.kt | 6 ------ kotlin-gradle/src/main/kotlin/RPCServer.kt | 6 ------ kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt | 6 ------ kotlin-gradle/src/main/kotlin/ReceiveLogs.kt | 5 ----- kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt | 5 ----- kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt | 5 ----- kotlin-gradle/src/main/kotlin/Recv.kt | 5 ----- kotlin-gradle/src/main/kotlin/Send.kt | 5 ----- kotlin-gradle/src/main/kotlin/Worker.kt | 5 ----- 14 files changed, 74 deletions(-) diff --git a/kotlin-gradle/src/main/kotlin/EmitLog.kt b/kotlin-gradle/src/main/kotlin/EmitLog.kt index bd32b1d0..e984f788 100644 --- a/kotlin-gradle/src/main/kotlin/EmitLog.kt +++ b/kotlin-gradle/src/main/kotlin/EmitLog.kt @@ -2,12 +2,6 @@ import com.rabbitmq.client.BuiltinExchangeType import com.rabbitmq.client.ConnectionFactory -/** - * Author: vincent - * Date: 2018-06-08 16:49:00 - * Comment: - */ - class EmitLog { companion object { const val EXCHANGE_NAME = "logs" diff --git a/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt b/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt index 2de5eb9e..bc001aea 100644 --- a/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt +++ b/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt @@ -2,11 +2,6 @@ import com.rabbitmq.client.BuiltinExchangeType import com.rabbitmq.client.ConnectionFactory -/** - * Author: vincent - * Date: 2018-06-08 17:08:00 - * Comment: - */ class EmitLogDirect { companion object { diff --git a/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt b/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt index 12760469..612709c1 100644 --- a/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt +++ b/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt @@ -4,11 +4,6 @@ import com.rabbitmq.client.ConnectionFactory import com.rabbitmq.client.MessageProperties import java.util.* -/** - * Author: vincent - * Date: 2018-06-08 17:09:00 - * Comment: - */ class EmitLogHeader { companion object { diff --git a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt index 29aa166a..0238eef7 100644 --- a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt +++ b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt @@ -4,11 +4,6 @@ import com.rabbitmq.client.Channel import com.rabbitmq.client.Connection import com.rabbitmq.client.ConnectionFactory -/** - * Author: vincent - * Date: 2018-06-08 17:13:00 - * Comment: - */ class EmitLogTopic { companion object { diff --git a/kotlin-gradle/src/main/kotlin/NewTask.kt b/kotlin-gradle/src/main/kotlin/NewTask.kt index 134c5278..c3afa54f 100644 --- a/kotlin-gradle/src/main/kotlin/NewTask.kt +++ b/kotlin-gradle/src/main/kotlin/NewTask.kt @@ -1,11 +1,6 @@ import com.rabbitmq.client.ConnectionFactory import com.rabbitmq.client.MessageProperties -/** - * Author: vincent - * Date: 2018-06-08 17:17:00 - * Comment: - */ class NewTask { companion object { diff --git a/kotlin-gradle/src/main/kotlin/RPCClient.kt b/kotlin-gradle/src/main/kotlin/RPCClient.kt index 27dfc238..84932646 100644 --- a/kotlin-gradle/src/main/kotlin/RPCClient.kt +++ b/kotlin-gradle/src/main/kotlin/RPCClient.kt @@ -3,12 +3,6 @@ import java.util.* import java.util.concurrent.ArrayBlockingQueue -/** - * Author: vincent - * Date: 2018-06-08 17:30:00 - * Comment: - */ - class RPCClient { private var connection: Connection private var channel: Channel diff --git a/kotlin-gradle/src/main/kotlin/RPCServer.kt b/kotlin-gradle/src/main/kotlin/RPCServer.kt index b1f63d79..0d9f2d39 100644 --- a/kotlin-gradle/src/main/kotlin/RPCServer.kt +++ b/kotlin-gradle/src/main/kotlin/RPCServer.kt @@ -5,12 +5,6 @@ import com.rabbitmq.client.Envelope import sun.jvm.hotspot.HelloWorld.fib -/** - * Author: vincent - * Date: 2018-06-08 17:35:00 - * Comment: - */ - class RPCServer { companion object { const val RPC_QUEUE_NAME = "rpc_queue" diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt index bcb84712..477c6196 100644 --- a/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt @@ -2,12 +2,6 @@ import com.rabbitmq.client.* import java.util.* -/** - * Author: vincent - * Date: 2018-06-08 17:19:00 - * Comment: - */ - class ReceiveLogHeader { companion object { const val EXCHANGE_NAME = "header_test" diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt index a3163311..f394831c 100644 --- a/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt @@ -1,10 +1,5 @@ import com.rabbitmq.client.* -/** - * Author: vincent - * Date: 2018-06-08 17:25:00 - * Comment: - */ class ReceiveLogs { companion object { diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt index 38b4758d..6cd11d4a 100644 --- a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt @@ -1,10 +1,5 @@ import com.rabbitmq.client.* -/** - * Author: vincent - * Date: 2018-06-08 17:27:00 - * Comment: - */ class ReceiveLogsDirect { companion object { diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt index 29e4883f..7e641ef2 100644 --- a/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt @@ -1,10 +1,5 @@ import com.rabbitmq.client.* -/** - * Author: vincent - * Date: 2018-06-08 17:28:00 - * Comment: - */ class ReceiveLogsTopic { companion object { diff --git a/kotlin-gradle/src/main/kotlin/Recv.kt b/kotlin-gradle/src/main/kotlin/Recv.kt index 6fa8413c..b5042d6d 100644 --- a/kotlin-gradle/src/main/kotlin/Recv.kt +++ b/kotlin-gradle/src/main/kotlin/Recv.kt @@ -3,11 +3,6 @@ import com.rabbitmq.client.ConnectionFactory import com.rabbitmq.client.DefaultConsumer import com.rabbitmq.client.Envelope -/** - * Author: vincent - * Date: 2018-06-08 17:29:00 - * Comment: - */ class Recv { companion object { diff --git a/kotlin-gradle/src/main/kotlin/Send.kt b/kotlin-gradle/src/main/kotlin/Send.kt index 2e90e7c1..fc1f5bd6 100644 --- a/kotlin-gradle/src/main/kotlin/Send.kt +++ b/kotlin-gradle/src/main/kotlin/Send.kt @@ -1,10 +1,5 @@ import com.rabbitmq.client.ConnectionFactory -/** - * Author: vincent - * Date: 2018-06-08 17:47:00 - * Comment: - */ class Send { companion object { diff --git a/kotlin-gradle/src/main/kotlin/Worker.kt b/kotlin-gradle/src/main/kotlin/Worker.kt index 250dd7fe..e22ae601 100644 --- a/kotlin-gradle/src/main/kotlin/Worker.kt +++ b/kotlin-gradle/src/main/kotlin/Worker.kt @@ -4,11 +4,6 @@ import com.rabbitmq.client.DefaultConsumer import com.rabbitmq.client.Envelope import java.io.IOException -/** - * Author: vincent - * Date: 2018-06-08 17:48:00 - * Comment: - */ class Worker { companion object { From 6ecc26fdf25cbf8514b276866dbc61656fa9c294 Mon Sep 17 00:00:00 2001 From: JiangYongKang Date: Sat, 9 Jun 2018 11:03:04 +0800 Subject: [PATCH 060/659] remove gradlew and gradlew.bat --- kotlin-gradle/gradlew | 172 -------------------------------------- kotlin-gradle/gradlew.bat | 84 ------------------- 2 files changed, 256 deletions(-) delete mode 100755 kotlin-gradle/gradlew delete mode 100644 kotlin-gradle/gradlew.bat diff --git a/kotlin-gradle/gradlew b/kotlin-gradle/gradlew deleted file mode 100755 index cccdd3d5..00000000 --- a/kotlin-gradle/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/kotlin-gradle/gradlew.bat b/kotlin-gradle/gradlew.bat deleted file mode 100644 index e95643d6..00000000 --- a/kotlin-gradle/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega From a109c0d4497a2ca580dcebd59a94c84e86791fa4 Mon Sep 17 00:00:00 2001 From: JiangYongKang Date: Sun, 10 Jun 2018 01:27:29 +0800 Subject: [PATCH 061/659] add a gradle task for running the main function --- kotlin-gradle/build.gradle | 9 +++++++++ kotlin-gradle/gradle.properties | 2 ++ kotlin-gradle/src/main/kotlin/RPCServer.kt | 4 +--- 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 kotlin-gradle/gradle.properties diff --git a/kotlin-gradle/build.gradle b/kotlin-gradle/build.gradle index a775e5d9..cc1b7245 100644 --- a/kotlin-gradle/build.gradle +++ b/kotlin-gradle/build.gradle @@ -21,6 +21,7 @@ repositories { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "com.rabbitmq:amqp-client:latest.release" + compile "org.slf4j:slf4j-simple:1.7.25" } compileKotlin { @@ -28,4 +29,12 @@ compileKotlin { } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" +} + +task run(type: JavaExec, dependsOn: classes) { + if ("$argv".trim().size() > 0) + args = "$argv".split(",").toList() + if ("$main".trim().size() > 0) + main = "${project.getProperty('main')}Kt" + classpath = sourceSets.main.runtimeClasspath } \ No newline at end of file diff --git a/kotlin-gradle/gradle.properties b/kotlin-gradle/gradle.properties new file mode 100644 index 00000000..19b3681c --- /dev/null +++ b/kotlin-gradle/gradle.properties @@ -0,0 +1,2 @@ +main = +argv = diff --git a/kotlin-gradle/src/main/kotlin/RPCServer.kt b/kotlin-gradle/src/main/kotlin/RPCServer.kt index 0d9f2d39..1696e1d7 100644 --- a/kotlin-gradle/src/main/kotlin/RPCServer.kt +++ b/kotlin-gradle/src/main/kotlin/RPCServer.kt @@ -2,8 +2,6 @@ import com.rabbitmq.client.AMQP import com.rabbitmq.client.ConnectionFactory import com.rabbitmq.client.DefaultConsumer import com.rabbitmq.client.Envelope -import sun.jvm.hotspot.HelloWorld.fib - class RPCServer { companion object { @@ -36,7 +34,7 @@ fun main(args: Array) { val message = String(body, charset("UTF-8")) val n = Integer.parseInt(message) println(" [.] fib($message)") - val response = fib(n).toString() + val response = RPCServer.fib(n).toString() channel.basicPublish("", properties.replyTo, replyProps, response.toByteArray()) channel.basicAck(envelope.deliveryTag, false) } From 466b3216ec7bd6a97f79ab672ba6a6314226f038 Mon Sep 17 00:00:00 2001 From: JiangYongKang Date: Sun, 10 Jun 2018 01:27:44 +0800 Subject: [PATCH 062/659] add README.md --- kotlin-gradle/README.md | 75 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 kotlin-gradle/README.md diff --git a/kotlin-gradle/README.md b/kotlin-gradle/README.md new file mode 100644 index 00000000..b796303c --- /dev/null +++ b/kotlin-gradle/README.md @@ -0,0 +1,75 @@ +# RabbitMQ Tutorials in Kotlin + +This is a minimalistic Kotlin port of the RabbitMQ tutorials in Java. +The port is admittedly quite close to Java in terms of code style. +This is primarily to the fact that RabbitMQ Java client still supports +JDK 8 and doesn't have a lambda-friendly API. + + +## Compiling the Code + +```console +$ gradle clean compileKotlin +``` + +## Running Examples + +### Hello World + +Execute the following command to receive a hello world: + +```console +$ gradle run -P main=Recv +``` + +Execute the following in a separate shell to send a hello world: + +```console +$ gradle run -P main=Send +``` + +### Work Queues + +Send a message which will be finshed immediately: + +```console +$ gradle run -P main=NewTask +``` + +Send a message which need some second to execute each . is one second. + +```console +$ gradle run -P main=NewTask -P argv="rabbit1 ...." +``` + +To start a worker (run in a separate shell): + +```console +$ gradle run -P main=Worker +``` + +Add more workers to the same queue, message will be distributed in the +round robin manner. + +### Publish and Subscriber + +```console +$ gradle run -P main=EmitLog -P argv="rabbit1, msg1" +``` +```console +$ gradle run -P main=ReceiveLogs +``` + +### RPC + +In one shell: + +```console +$ gradle run -P main=RPCServer +``` + +In another shell: + +```console +$ gradle run -P main=RPCClient +``` From 6a815b74a845f5cff1da822d9b41ed10da8bfefb Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sun, 10 Jun 2018 20:27:29 +0300 Subject: [PATCH 063/659] Update Ruby tutorial README --- ruby/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby/README.md b/ruby/README.md index 0ba631fb..638cdfaa 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -5,13 +5,13 @@ Here you can find Ruby code examples from ## Requirements -To run this code you need [Bunny](http://rubybunny.info). +These tutorials require [Bunny](http://rubybunny.info) to be installed. -You can install it via RubyGems: +To install it with RubyGems: - gem install bunny --version ">= 2.5.1" + gem install bunny --version ">= 2.10.0" -Bunny supports Ruby 2.0 and later versions. +Bunny supports Ruby 2.2 and later versions. ## Code From bc29e794306c6ef69e4835254039e7e337f8d924 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 12 Jun 2018 02:14:36 +0300 Subject: [PATCH 064/659] Close connection and channel here so that the program finishes --- kotlin-gradle/src/main/kotlin/EmitLogTopic.kt | 6 ++++-- kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt index 0238eef7..235227f8 100644 --- a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt +++ b/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt @@ -1,4 +1,3 @@ - import com.rabbitmq.client.BuiltinExchangeType import com.rabbitmq.client.Channel import com.rabbitmq.client.Connection @@ -43,4 +42,7 @@ fun main(argv: Array) { channel.basicPublish(EmitLogTopic.EXCHANGE_NAME, routingKey, null, message.toByteArray(charset("UTF-8"))) println(" [x] Sent '$routingKey':'$message'") -} \ No newline at end of file + + channel.close() + connection.close() +} diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt index 6cd11d4a..512bf17b 100644 --- a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt +++ b/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt @@ -34,4 +34,4 @@ fun main(argv: Array) { } } channel.basicConsume(queueName, true, consumer) -} \ No newline at end of file +} From 3a5035cc652fff85ce7fa9c35d89fdc2abd88b64 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 12 Jun 2018 02:14:54 +0300 Subject: [PATCH 065/659] Kotlin port README edits --- kotlin-gradle/README.md | 86 +++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/kotlin-gradle/README.md b/kotlin-gradle/README.md index b796303c..aa52deb3 100644 --- a/kotlin-gradle/README.md +++ b/kotlin-gradle/README.md @@ -1,75 +1,95 @@ # RabbitMQ Tutorials in Kotlin -This is a minimalistic Kotlin port of the RabbitMQ tutorials in Java. +This is a minimalistic Kotlin port of the [RabbitMQ tutorials in Java](http://www.rabbitmq.com/getstarted.html). The port is admittedly quite close to Java in terms of code style. -This is primarily to the fact that RabbitMQ Java client still supports -JDK 8 and doesn't have a lambda-friendly API. ## Compiling the Code -```console -$ gradle clean compileKotlin +``` shell +gradle clean compileKotlin ``` -## Running Examples +## Running the Tutorials -### Hello World +### Tutorial 1 -Execute the following command to receive a hello world: +Execute the following command to start a Hello, world consumer -```console -$ gradle run -P main=Recv +``` shell +gradle run -P main=Recv ``` -Execute the following in a separate shell to send a hello world: +Execute the following in a separate shell to publish a Hello, world messge: -```console -$ gradle run -P main=Send +``` shell +gradle run -P main=Send ``` -### Work Queues +### Tutorial 2 -Send a message which will be finshed immediately: +Send a task message. The task will be completed immediately -```console -$ gradle run -P main=NewTask +``` shell +gradle run -P main=NewTask ``` -Send a message which need some second to execute each . is one second. +To start a worker (run in a separate shell): -```console -$ gradle run -P main=NewTask -P argv="rabbit1 ...." +``` shell +gradle run -P main=Worker ``` -To start a worker (run in a separate shell): +Send a task message. It will wait for 1 second for each dot in the payload. -```console -$ gradle run -P main=Worker +``` shell +gradle run -P main=NewTask -P argv="rabbit1 ...." ``` Add more workers to the same queue, message will be distributed in the round robin manner. -### Publish and Subscriber +### Tutorial 3 + +``` shell +gradle run -P main=ReceiveLogs +``` + + +``` shell +gradle run -P main=EmitLog -P argv="rabbit1, msg1" +``` + +### Tutorial 4 + +``` shell +gradle run -P main="ReceiveLogsDirect" -P argv="info,error" +``` -```console -$ gradle run -P main=EmitLog -P argv="rabbit1, msg1" +``` shell +gradle run -P main=EmitLogDirect" ``` -```console -$ gradle run -P main=ReceiveLogs + +### Tutorial 5 + +``` shell +gradle run -P main=ReceiveLogsTopic -P argv="anonymous.*" +``` + +``` shell +gradle run -P main=EmitLogTopic -P argv="anonymous.info" ``` -### RPC +### Tutorial 6 In one shell: -```console -$ gradle run -P main=RPCServer +``` shell +gradle run -P main=RPCServer ``` In another shell: -```console -$ gradle run -P main=RPCClient +``` shell +gradle run -P main=RPCClient ``` From 98ec14b3778a16147202b798a871e3225769aed6 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 12 Jun 2018 02:15:36 +0300 Subject: [PATCH 066/659] Add Gradle ignores --- kotlin-gradle/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 kotlin-gradle/.gitignore diff --git a/kotlin-gradle/.gitignore b/kotlin-gradle/.gitignore new file mode 100644 index 00000000..e51bc30b --- /dev/null +++ b/kotlin-gradle/.gitignore @@ -0,0 +1,2 @@ +build/* +.gradle/* From 949d94ba475bc98736313632ac954461f2b05e36 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 12 Jun 2018 02:16:39 +0300 Subject: [PATCH 067/659] kotlin-gradle => kotlin --- README.md | 1 + {kotlin-gradle => kotlin}/.gitignore | 0 {kotlin-gradle => kotlin}/README.md | 0 {kotlin-gradle => kotlin}/build.gradle | 0 {kotlin-gradle => kotlin}/gradle.properties | 0 {kotlin-gradle => kotlin}/settings.gradle | 0 {kotlin-gradle => kotlin}/src/main/kotlin/EmitLog.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogDirect.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogHeader.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogTopic.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/NewTask.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/RPCClient.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/RPCServer.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogHeader.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogs.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogsDirect.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogsTopic.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/Recv.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/Send.kt | 0 {kotlin-gradle => kotlin}/src/main/kotlin/Worker.kt | 0 20 files changed, 1 insertion(+) rename {kotlin-gradle => kotlin}/.gitignore (100%) rename {kotlin-gradle => kotlin}/README.md (100%) rename {kotlin-gradle => kotlin}/build.gradle (100%) rename {kotlin-gradle => kotlin}/gradle.properties (100%) rename {kotlin-gradle => kotlin}/settings.gradle (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/EmitLog.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogDirect.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogHeader.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/EmitLogTopic.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/NewTask.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/RPCClient.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/RPCServer.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogHeader.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogs.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogsDirect.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/ReceiveLogsTopic.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/Recv.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/Send.kt (100%) rename {kotlin-gradle => kotlin}/src/main/kotlin/Worker.kt (100%) diff --git a/README.md b/README.md index 74618ee6..25b66931 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ The following ports are available: * [JavaScript (with Node and amqp-node)](https://github.com/squaremo/amqp.node/tree/master/examples) (using promises/futures) * [Java](./java) * [Java (with IntelliJ IDEA)](./java-idea) + * [Kotlin](./kotlin) * [PHP (with php-amqplib)](./php) * [PHP (with php-amqp)](./php-amqp) * [PHP (with queue-interop)](./php-interop) diff --git a/kotlin-gradle/.gitignore b/kotlin/.gitignore similarity index 100% rename from kotlin-gradle/.gitignore rename to kotlin/.gitignore diff --git a/kotlin-gradle/README.md b/kotlin/README.md similarity index 100% rename from kotlin-gradle/README.md rename to kotlin/README.md diff --git a/kotlin-gradle/build.gradle b/kotlin/build.gradle similarity index 100% rename from kotlin-gradle/build.gradle rename to kotlin/build.gradle diff --git a/kotlin-gradle/gradle.properties b/kotlin/gradle.properties similarity index 100% rename from kotlin-gradle/gradle.properties rename to kotlin/gradle.properties diff --git a/kotlin-gradle/settings.gradle b/kotlin/settings.gradle similarity index 100% rename from kotlin-gradle/settings.gradle rename to kotlin/settings.gradle diff --git a/kotlin-gradle/src/main/kotlin/EmitLog.kt b/kotlin/src/main/kotlin/EmitLog.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/EmitLog.kt rename to kotlin/src/main/kotlin/EmitLog.kt diff --git a/kotlin-gradle/src/main/kotlin/EmitLogDirect.kt b/kotlin/src/main/kotlin/EmitLogDirect.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/EmitLogDirect.kt rename to kotlin/src/main/kotlin/EmitLogDirect.kt diff --git a/kotlin-gradle/src/main/kotlin/EmitLogHeader.kt b/kotlin/src/main/kotlin/EmitLogHeader.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/EmitLogHeader.kt rename to kotlin/src/main/kotlin/EmitLogHeader.kt diff --git a/kotlin-gradle/src/main/kotlin/EmitLogTopic.kt b/kotlin/src/main/kotlin/EmitLogTopic.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/EmitLogTopic.kt rename to kotlin/src/main/kotlin/EmitLogTopic.kt diff --git a/kotlin-gradle/src/main/kotlin/NewTask.kt b/kotlin/src/main/kotlin/NewTask.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/NewTask.kt rename to kotlin/src/main/kotlin/NewTask.kt diff --git a/kotlin-gradle/src/main/kotlin/RPCClient.kt b/kotlin/src/main/kotlin/RPCClient.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/RPCClient.kt rename to kotlin/src/main/kotlin/RPCClient.kt diff --git a/kotlin-gradle/src/main/kotlin/RPCServer.kt b/kotlin/src/main/kotlin/RPCServer.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/RPCServer.kt rename to kotlin/src/main/kotlin/RPCServer.kt diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt b/kotlin/src/main/kotlin/ReceiveLogHeader.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/ReceiveLogHeader.kt rename to kotlin/src/main/kotlin/ReceiveLogHeader.kt diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogs.kt b/kotlin/src/main/kotlin/ReceiveLogs.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/ReceiveLogs.kt rename to kotlin/src/main/kotlin/ReceiveLogs.kt diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt b/kotlin/src/main/kotlin/ReceiveLogsDirect.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/ReceiveLogsDirect.kt rename to kotlin/src/main/kotlin/ReceiveLogsDirect.kt diff --git a/kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt b/kotlin/src/main/kotlin/ReceiveLogsTopic.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/ReceiveLogsTopic.kt rename to kotlin/src/main/kotlin/ReceiveLogsTopic.kt diff --git a/kotlin-gradle/src/main/kotlin/Recv.kt b/kotlin/src/main/kotlin/Recv.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/Recv.kt rename to kotlin/src/main/kotlin/Recv.kt diff --git a/kotlin-gradle/src/main/kotlin/Send.kt b/kotlin/src/main/kotlin/Send.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/Send.kt rename to kotlin/src/main/kotlin/Send.kt diff --git a/kotlin-gradle/src/main/kotlin/Worker.kt b/kotlin/src/main/kotlin/Worker.kt similarity index 100% rename from kotlin-gradle/src/main/kotlin/Worker.kt rename to kotlin/src/main/kotlin/Worker.kt From 4077b056cd840b8348590a1260764c9d1b3467a8 Mon Sep 17 00:00:00 2001 From: Miroslav Parvanov Date: Wed, 27 Jun 2018 04:02:27 +0300 Subject: [PATCH 068/659] Fixed RPCClient to send a new correlationId on each request --- dotnet/RPCClient/RPCClient.cs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 3b4b56f1..9702b041 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -10,8 +10,6 @@ public class RpcClient private readonly IModel channel; private readonly string replyQueueName; private readonly EventingBasicConsumer consumer; - private readonly BlockingCollection respQueue = new BlockingCollection(); - private readonly IBasicProperties props; public RpcClient() { @@ -21,25 +19,31 @@ public RpcClient() channel = connection.CreateModel(); replyQueueName = channel.QueueDeclare().QueueName; consumer = new EventingBasicConsumer(channel); + } - props = channel.CreateBasicProperties(); + public string Call(string message) + { + var respQueue = new BlockingCollection(); var correlationId = Guid.NewGuid().ToString(); + + IBasicProperties props = channel.CreateBasicProperties(); props.CorrelationId = correlationId; props.ReplyTo = replyQueueName; - consumer.Received += (model, ea) => + EventHandler handler = null; + handler = (model, ea) => { - var body = ea.Body; - var response = Encoding.UTF8.GetString(body); if (ea.BasicProperties.CorrelationId == correlationId) { + consumer.Received -= handler; + + var body = ea.Body; + var response = Encoding.UTF8.GetString(body); + respQueue.Add(response); } }; - } - - public string Call(string message) - { + consumer.Received += handler; var messageBytes = Encoding.UTF8.GetBytes(message); channel.BasicPublish( From 5296da876d17f4821acbd467e50d7a2e1a544a92 Mon Sep 17 00:00:00 2001 From: Miroslav Parvanov Date: Wed, 27 Jun 2018 19:58:12 +0300 Subject: [PATCH 069/659] Amended code to use Task object for the result instead of BlockingCollection as we only expect one result per request --- dotnet/RPCClient/RPCClient.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 9702b041..a683d8f3 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Concurrent; +using System.Threading.Tasks; using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; @@ -23,7 +23,9 @@ public RpcClient() public string Call(string message) { - var respQueue = new BlockingCollection(); + var tcs = new TaskCompletionSource(); + var resultTask = tcs.Task; + var correlationId = Guid.NewGuid().ToString(); IBasicProperties props = channel.CreateBasicProperties(); @@ -40,7 +42,7 @@ public string Call(string message) var body = ea.Body; var response = Encoding.UTF8.GetString(body); - respQueue.Add(response); + tcs.SetResult(response); } }; consumer.Received += handler; @@ -58,7 +60,7 @@ public string Call(string message) queue: replyQueueName, autoAck: true); - return respQueue.Take(); ; + return resultTask.Result; } public void Close() From 8e21d8453c8cb0d3d3e52cc6d375928a0db03409 Mon Sep 17 00:00:00 2001 From: Jeff Weiss Date: Wed, 11 Jul 2018 09:25:28 -0600 Subject: [PATCH 070/659] update for later versions of elixir and amqp lib --- elixir/config/config.exs | 6 ++++++ elixir/mix.exs | 4 ++-- elixir/receive.exs | 4 ++-- elixir/worker.exs | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 elixir/config/config.exs diff --git a/elixir/config/config.exs b/elixir/config/config.exs new file mode 100644 index 00000000..b5025a60 --- /dev/null +++ b/elixir/config/config.exs @@ -0,0 +1,6 @@ +use Mix.Config + +config :lager, + handlers: [ + lager_console_backend: [{:level, :warning}] + ] diff --git a/elixir/mix.exs b/elixir/mix.exs index 631bdf14..e6ac1b0f 100644 --- a/elixir/mix.exs +++ b/elixir/mix.exs @@ -14,7 +14,7 @@ defmodule RabbitmqTutorials.Mixfile do # # Type "mix help compile.app" for more information def application do - [applications: [:logger, :amqp]] + [applications: [:amqp]] end # Dependencies can be Hex packages: @@ -28,7 +28,7 @@ defmodule RabbitmqTutorials.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:amqp, "~> 0.2.1"}, + {:amqp, "~> 1.0"}, ] end end diff --git a/elixir/receive.exs b/elixir/receive.exs index 9d06f241..692f1359 100644 --- a/elixir/receive.exs +++ b/elixir/receive.exs @@ -3,7 +3,7 @@ defmodule Receive do receive do {:basic_deliver, payload, _meta} -> IO.puts " [x] Received #{payload}" - wait_for_messages + wait_for_messages() end end end @@ -14,4 +14,4 @@ AMQP.Queue.declare(channel, "hello") AMQP.Basic.consume(channel, "hello", nil, no_ack: true) IO.puts " [*] Waiting for messages. To exit press CTRL+C, CTRL+C" -Receive.wait_for_messages +Receive.wait_for_messages() diff --git a/elixir/worker.exs b/elixir/worker.exs index 79837aad..f59b1ec2 100644 --- a/elixir/worker.exs +++ b/elixir/worker.exs @@ -4,7 +4,7 @@ defmodule Worker do {:basic_deliver, payload, meta} -> IO.puts " [x] Received #{payload}" payload - |> to_char_list + |> to_charlist |> Enum.count(fn x -> x == ?. end) |> Kernel.*(1000) |> :timer.sleep From 25e0a20a3ab2b5a6abe944e266cc9d37f6a7194c Mon Sep 17 00:00:00 2001 From: Dirk Lipjes Date: Fri, 3 Aug 2018 09:53:39 +0200 Subject: [PATCH 071/659] Update send.js in regard to the NodeJS versions 8 --- javascript-nodejs/src/send.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript-nodejs/src/send.js b/javascript-nodejs/src/send.js index 948e5688..92da2ad6 100755 --- a/javascript-nodejs/src/send.js +++ b/javascript-nodejs/src/send.js @@ -8,8 +8,7 @@ amqp.connect('amqp://localhost', function(err, conn) { var msg = 'Hello World!'; ch.assertQueue(q, {durable: false}); - // Note: on Node 6 Buffer.from(msg) should be used - ch.sendToQueue(q, new Buffer(msg)); + ch.sendToQueue(q, Buffer.from(msg)); console.log(" [x] Sent %s", msg); }); setTimeout(function() { conn.close(); process.exit(0) }, 500); From e42c76dc7438b0bb3ff06db882b393f58036ffed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 7 Aug 2018 18:04:31 +0200 Subject: [PATCH 072/659] Use dedicated reply queue for RPC client If different requests uses the same reply queue, the consumers can steal responses from each other. The reply consumer is cancelled after the response has arrived so the reply queue can be auto-deleted. References #174 --- java/RPCClient.java | 10 +++++----- java/RPCServer.java | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/java/RPCClient.java b/java/RPCClient.java index 3d586d0b..360743c0 100644 --- a/java/RPCClient.java +++ b/java/RPCClient.java @@ -16,7 +16,6 @@ public class RPCClient { private Connection connection; private Channel channel; private String requestQueueName = "rpc_queue"; - private String replyQueueName; public RPCClient() throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); @@ -24,13 +23,12 @@ public RPCClient() throws IOException, TimeoutException { connection = factory.newConnection(); channel = connection.createChannel(); - - replyQueueName = channel.queueDeclare().getQueue(); } public String call(String message) throws IOException, InterruptedException { final String corrId = UUID.randomUUID().toString(); + String replyQueueName = channel.queueDeclare().getQueue(); AMQP.BasicProperties props = new AMQP.BasicProperties .Builder() .correlationId(corrId) @@ -41,7 +39,7 @@ public String call(String message) throws IOException, InterruptedException { final BlockingQueue response = new ArrayBlockingQueue(1); - channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) { + String ctag = channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { if (properties.getCorrelationId().equals(corrId)) { @@ -50,7 +48,9 @@ public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProp } }); - return response.take(); + String result = response.take(); + channel.basicCancel(ctag); + return result; } public void close() throws IOException { diff --git a/java/RPCServer.java b/java/RPCServer.java index b11c44a5..0575e601 100644 --- a/java/RPCServer.java +++ b/java/RPCServer.java @@ -29,6 +29,7 @@ public static void main(String[] argv) { final Channel channel = connection.createChannel(); channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); + channel.queuePurge(RPC_QUEUE_NAME); channel.basicQos(1); From 433bf2a32db009eaf542120018b0a893889dc36c Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Thu, 9 Aug 2018 14:41:18 -0700 Subject: [PATCH 073/659] Make RPCClient a little more interesting --- java/RPCClient.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/java/RPCClient.java b/java/RPCClient.java index 360743c0..e7d2802c 100644 --- a/java/RPCClient.java +++ b/java/RPCClient.java @@ -63,9 +63,12 @@ public static void main(String[] argv) { try { fibonacciRpc = new RPCClient(); - System.out.println(" [x] Requesting fib(30)"); - response = fibonacciRpc.call("30"); - System.out.println(" [.] Got '" + response + "'"); + for (int i = 0; i < 32; i++) { + String i_str = Integer.toString(i); + System.out.println(" [x] Requesting fib(" + i_str + ")"); + response = fibonacciRpc.call(i_str); + System.out.println(" [.] Got '" + response + "'"); + } } catch (IOException | TimeoutException | InterruptedException e) { e.printStackTrace(); From 11a1b3cae620104310e6fbc4b9eae21595be96ff Mon Sep 17 00:00:00 2001 From: JinBeom Hong Date: Mon, 13 Aug 2018 13:37:02 +0900 Subject: [PATCH 074/659] fix typo --- go/send.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/send.go b/go/send.go index a8a5406a..c1d23939 100644 --- a/go/send.go +++ b/go/send.go @@ -31,7 +31,7 @@ func main() { ) failOnError(err, "Failed to declare a queue") - body := "hello" + body := "Hello World!" err = ch.Publish( "", // exchange q.Name, // routing key From 5849ff543903d5cf2476715b0eff9e11b82779a6 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 14 Sep 2018 21:13:32 +0200 Subject: [PATCH 075/659] Depend on .NET client 5.1.x --- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 2eabb57d..106ca415 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 8c596aff..c0d2353f 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 35b146c3..e69a1bc7 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 0ff0415e..e25cbea3 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 5c1a2a15..2758e543 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 749b7f56..53e2e9b4 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 90cf4040..c701fcae 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index f91282bb..435040ee 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index 251221fb..d4d3786d 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index b1545ba1..9a39638a 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index 1755ffcf..d7100e52 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -11,7 +11,7 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 4b72257b..320c64a6 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -11,7 +11,7 @@ - + From 6cecb78115b475141e7343dd46e179dc20ebafa3 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 14 Sep 2018 12:29:58 -0700 Subject: [PATCH 076/659] Update RabbitMQ.Client to 5.1.0 --- dotnet-visual-studio/1_Receive/1_Receive.csproj | 2 +- dotnet-visual-studio/1_Receive/packages.config | 2 +- dotnet-visual-studio/1_Send/1_Send.csproj | 2 +- dotnet-visual-studio/1_Send/packages.config | 2 +- dotnet-visual-studio/2_NewTask/2_NewTask.csproj | 2 +- dotnet-visual-studio/2_NewTask/packages.config | 2 +- dotnet-visual-studio/2_Worker/2_Worker.csproj | 2 +- dotnet-visual-studio/2_Worker/packages.config | 2 +- dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj | 2 +- dotnet-visual-studio/3_EmitLog/packages.config | 2 +- dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj | 2 +- dotnet-visual-studio/3_ReceiveLogs/packages.config | 2 +- dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj | 2 +- dotnet-visual-studio/4_EmitLogDirect/packages.config | 2 +- .../4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj | 2 +- dotnet-visual-studio/4_ReceiveLogsDirect/packages.config | 2 +- dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj | 2 +- dotnet-visual-studio/5_EmitLogTopic/packages.config | 2 +- .../5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj | 2 +- dotnet-visual-studio/5_ReceiveLogsTopic/packages.config | 2 +- dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj | 2 +- dotnet-visual-studio/6_RPCClient/packages.config | 2 +- dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj | 2 +- dotnet-visual-studio/6_RPCServer/packages.config | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index 516c7847..cedfda32 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -54,7 +54,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/1_Receive/packages.config +++ b/dotnet-visual-studio/1_Receive/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index dd0506c9..5afb784d 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/1_Send/packages.config +++ b/dotnet-visual-studio/1_Send/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index 1145afa5..1d292fd7 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ b/dotnet-visual-studio/2_NewTask/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index 0bb9fe5e..6cab67db 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/2_Worker/packages.config +++ b/dotnet-visual-studio/2_Worker/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index af54e5ce..4c51e6be 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ b/dotnet-visual-studio/3_EmitLog/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index 5254070d..1c04746d 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ b/dotnet-visual-studio/3_ReceiveLogs/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index aaaed82f..4aa32e33 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ b/dotnet-visual-studio/4_EmitLogDirect/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index 3ec0b58e..fccca452 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index 62ede5f7..308527da 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ b/dotnet-visual-studio/5_EmitLogTopic/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index 284b6131..25a9820c 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index 4c6b4819..edb26969 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ b/dotnet-visual-studio/6_RPCClient/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index ef21f8bc..545f1816 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -39,7 +39,7 @@ ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - ..\packages\RabbitMQ.Client.5.0.1\lib\net451\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config index 5b0c07d4..40ac2e8c 100644 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ b/dotnet-visual-studio/6_RPCServer/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file From acf94ef7ef631e059d37b9c1c7cc8cdd7ea978fa Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 2 Oct 2018 01:36:09 +0300 Subject: [PATCH 077/659] Install Bunny 2.12+ --- ruby/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/README.md b/ruby/README.md index 638cdfaa..d6c942fb 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -9,7 +9,7 @@ These tutorials require [Bunny](http://rubybunny.info) to be installed. To install it with RubyGems: - gem install bunny --version ">= 2.10.0" + gem install bunny --version ">= 2.12.0" Bunny supports Ruby 2.2 and later versions. From 3ef235608f6720a7896e47c11ae9bcd945f2e399 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 2 Oct 2018 01:43:04 +0300 Subject: [PATCH 078/659] Ruby: switch to Bundler for dependency management --- ruby/Gemfile | 5 +++++ ruby/Gemfile.lock | 18 +++++++++++++++++ ruby/README.md | 49 ++++++++++++++++++++++++++++++----------------- 3 files changed, 54 insertions(+), 18 deletions(-) create mode 100644 ruby/Gemfile create mode 100644 ruby/Gemfile.lock diff --git a/ruby/Gemfile b/ruby/Gemfile new file mode 100644 index 00000000..72b496a9 --- /dev/null +++ b/ruby/Gemfile @@ -0,0 +1,5 @@ +source 'https://rubygems.org' + +ruby ">= 2.2.0" + +gem "bunny" diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock new file mode 100644 index 00000000..85aac24f --- /dev/null +++ b/ruby/Gemfile.lock @@ -0,0 +1,18 @@ +GEM + remote: https://rubygems.org/ + specs: + amq-protocol (2.3.0) + bunny (2.12.0) + amq-protocol (~> 2.3, >= 2.3.0) + +PLATFORMS + ruby + +DEPENDENCIES + bunny + +RUBY VERSION + ruby 2.5.1p57 + +BUNDLED WITH + 1.16.1 diff --git a/ruby/README.md b/ruby/README.md index d6c942fb..92192d83 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -5,44 +5,57 @@ Here you can find Ruby code examples from ## Requirements -These tutorials require [Bunny](http://rubybunny.info) to be installed. +These tutorials require Ruby 2.2 or later, [Bundler](https://bundler.io/) and [Bunny](http://rubybunny.info) to be installed. -To install it with RubyGems: +To install Bunny with Bundler, do - gem install bunny --version ">= 2.12.0" +``` sh +bundle install +``` -Bunny supports Ruby 2.2 and later versions. ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-ruby.html): +To run [tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-ruby.html): - ruby send.rb - ruby receive.rb +``` sh +bundle exec send.rb +bundle exec ruby receive.rb +``` [Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-ruby.html): - ruby new_task.rb - ruby worker.rb +``` sh +bundle exec ruby new_task.rb +bundle exec ruby worker.rb +``` [Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-ruby.html) - ruby receive_logs.rb - ruby emit_log.rb +``` sh +bundle exec ruby receive_logs.rb +bundle exec ruby emit_log.rb +``` [Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-ruby.html) - ruby receive_logs_direct.rb - ruby emit_log_direct.rb +``` sh +bundle exec ruby receive_logs_direct.rb +bundle exec ruby emit_log_direct.rb +``` [Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-ruby.html) - ruby receive_logs_topic.rb - ruby emit_log_topic.rb +``` sh +bundle exec ruby receive_logs_topic.rb +bundle exec ruby emit_log_topic.rb +``` [Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-ruby.html) - ruby rpc_server.rb - ruby rpc_client.rb +``` sh +bundle exec ruby rpc_server.rb +bundle exec ruby rpc_client.rb +``` -To learn more, visit [Bunny documentation](http://rubybunny.info) site. +To learn more, see [Bunny documentation](http://rubybunny.info). From 2789b508e8d716816503daf818001258c645b177 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 2 Oct 2018 01:46:13 +0300 Subject: [PATCH 079/659] Require Bunny 2.12+ --- ruby/Gemfile | 2 +- ruby/Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/Gemfile b/ruby/Gemfile index 72b496a9..ca5036af 100644 --- a/ruby/Gemfile +++ b/ruby/Gemfile @@ -2,4 +2,4 @@ source 'https://rubygems.org' ruby ">= 2.2.0" -gem "bunny" +gem "bunny", ">= 2.12.0", " < 3.0" diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock index 85aac24f..72c6706d 100644 --- a/ruby/Gemfile.lock +++ b/ruby/Gemfile.lock @@ -9,7 +9,7 @@ PLATFORMS ruby DEPENDENCIES - bunny + bunny (>= 2.12.0, < 3.0) RUBY VERSION ruby 2.5.1p57 From 5e05f3fe7d14c2377f8d0cb75ce1429bde92f09f Mon Sep 17 00:00:00 2001 From: bnaya eshet Date: Sun, 21 Oct 2018 16:40:39 +0300 Subject: [PATCH 080/659] change c# rpc to async pattern --- .vs/rabbitmq-tutorials/v15/.suo | Bin 0 -> 42496 bytes .vs/slnx.sqlite | Bin 0 -> 3641344 bytes dotnet-visual-studio/6_RPCClient/Program.cs | 31 ++++--- dotnet-visual-studio/6_RPCClient/RPCClient.cs | 81 +++++++++++------- 4 files changed, 69 insertions(+), 43 deletions(-) create mode 100644 .vs/rabbitmq-tutorials/v15/.suo create mode 100644 .vs/slnx.sqlite diff --git a/.vs/rabbitmq-tutorials/v15/.suo b/.vs/rabbitmq-tutorials/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..c879ae7b0d2b865928856749096adf3b2240af5d GIT binary patch literal 42496 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 literal 0 HcmV?d00001 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..b5a2ed7d5d2373918c7a217d151dda9d09eb9221 GIT binary patch literal 3641344 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�@&M6HR6HK1M~E!^#+LiuhpK?CaUMbE&x;H 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 z z|I^zNb$w9(SnG#M(+rJKK#d(W2WrtTs+kyB&;m4e%p)FkNd_iH7OwzJj5SBVX*yXG zBaL4`O^mM`Mq3jjjc-6rj5UX-bu3{MBaL!EO^ovhhht)-aS!Hk)KxJtvXBV#H|i=( zj4WINni%=*Bcb+ISN__FL%W8piSZ0wrJ;$jju^yDj5HPkH8Iu^%#eVIkw!A0YT7zN zu{SZ&=mXTmSbq>46C({NKuwHw1VNNF91|mr2tZAYH9e5Rc>8Unc4v0a{Rf%m_q7LxN zc*XX^usoi#v?Z)IC><%oCrZ@Yox1eORTHw*M=7vBV^7LwZQM|z;pD3c)H!bnafXTF z0!7y(lY5c{6-rx)1)3kUXa6jrV9_;>ZAkY2S3B-@G>?Zr9A4Q}2t6ITA~+a$yZ_() z-o~R1|JIQ9{la(7`y+4G^F_~~`#;>rT%U7goj-S;cl-c8llZ4NXRgC(xbD-9tyOTQ zWq#HIB38kf<&+_4Hmc)j(FC$O6`Y=7KBpL`ACTMl&E54a4Xt%_8&vk+zWEGrQOo57G?v~08r*12qz z^`kQjX`yHpG!!~3&8W3C&NFj4Ed>J<8cH#&0q3#^F{((dajc%X3~|r^h4sNvo)YG0 z6`WasSgBR8=2$hDR%%_wy_Vgv(OfFtLQe1K*TH&ARix+M$y_o*DI@GdXw;-G6E$VK+-Cxtepwb zDxlMD%~@{RLr`_KT?%F%;&QQmF>a<&P zz@{~)jMMH6bLvN@-I@cNO+U4D+MS^u|24MO((yB^0EJ}#f4$?Fqd61)adLm@SrYmIfZf^lqyI=(7vYExC<&+fBYCGVS|-l|loI3IN+<=?KAuPmIQ z?y1G471gT~lR>&`XFDStr&+}_Lw#21@w@rpivgCptAH~J%r6!1TdX+_ZO*e=yy_1h zR6Ub$*$nee#SMAQfugWB4i*E$Ozk+4%TDAyife}Ys8ajWyn|vWnr8IAsq=w?t+`B0 zQ9ITBGkV|DdBmdvP+DfFZz{ctvgQaly;}0P#tidaZLf=962@qETw{iLwEF7;Q5$oj z$2DfCS1UcPQS(;i!?8ZDF+<&3>2Zzvq0t&rHBWL!9rJX>;~MjbM;mnwGt|?S8q;cy zKx2eReB2r85lb%$t2q?xDm6Byotb^X36%P6en zaCNY1nn>mfsboHCI1Uldch0n8HeeSL%H{-kzz~Phnf3S?I+Ru`eKeJUFuLhvET7Z` z&P$$6>H@(M|IY(6>o8MvC>6<+x|eFzj6jwKhtgYS*3u0L$inKiD>M24Sa{3J!H!5* zWbjb?&Y3lc4z#SYd9moSkkOu*)fACiBo}hdNyD+8U2C}gbSD66-#W7j;iN<|ngB1s z*okC563=GFQYSiRXy{|1M(>%JV4rQCS&2o`&TiS|4y!)8Lz9JUE)`4XBl&d3bMFib zWqg86O8i|r_n5+*e0675P@d0=*}-%iEq_YDzT?G_^G?4E;Rx#n6XCZwtLTbSiW()EQbDd^z~F;6DW46?}cL5Ih>Z zDYyde68J&jGl7o>-WE^-M*^*Zs{(HSXZ&yXzurIPkNXGwoBb>Np~jy#e!B6o#9=f8~76`ESk-JKt?od5He%bf0pWBRaFFpCHzANm!guq|(X$%*12?Mrka5GU@(v zXsKrRb>zF#k$gOsj=6SR?q21}O~gm?7+X6sk#;`6(7nd+=;VZJp~W*_o;gAmqLp8VTn&_v`gPF6e(0^*`>_{}|Q(i0OX}>3{g0LUA2;ZKtkD0sPXA-6{)b=xqe1t>^^*R_PxU{3r2p}Z{>N8g@GQ`G zZu$~B`>BF6M|g}c?~a|0IrkfXZZrN|ZT#uI%)JuYCr-yyB!ANB3AvX!AvY4+KR0l- zdu!!jqyy~cCGL*OcYx=ftK6F_Um&)9{8wA~uU7G2xd{lsuiiv}Vbmih^Nyd+MvN4$ zc6Y0FC-)lA+-M~J*p==Mt9N%r+#{8>)h`_llIk6DlpJ5~4V)Jf`&AS_I-nj@8T|2Y#prL=#o=pe0k>vcgzAIw~OqMr0>4beXvUYq?6n%Mz(FS zdqZV4_FduLpf7`UknLoiVZwq87$T0ci`}h;XV@wFEuU_-e7e%|sT1e4@=zzE{KqC% zRaqyvz9&iloh#h!dS92MwArieL5uTXir0)h7O{8~Cpr=l+W8!r5Ddk!JPF4Z*u8YwymbDQS0pg)81Ef$ z?VG$z3EMu&eF=Q~BALvsDgumaTjXA6s3hUox{8Ous%t7Ark&p)0!p8CgfOSs@~PA6 zsq-fl*#aN#sCWnrc&_4mQuBYUdkHf~Gm z1E}@q*SU|XVzSBv;EssXx;{tj|6#`m9L;~+yf5epe86{?_w!zlr_-Hueap4i`9bGa zc=@~aPjTaMu;F&NG0AbmYfEcqTice_tz+<4qO-ldqbnBg*fbVr z5wn?p-q6%U@?2A(rRDkq5Wna8Z7tVVzQ2Aw67-#pr6*&BWa2hRk#zTDI(>ap;Jyd& zjMwlQX%I|rX9n)M?OicTIAiJ@5py-v}B8sgo~wjTQtf@TQEC%z>dH>j|Z-XTNQ8tl|pwQn*eRh zWTs#VOnb}4)Q-&AkH@EmyNj|-1(Bw5g~D0$PVc&w1hW}?weTO)0ej?S%{BkgUptq1VX)$p3)I!SJVb^cJSaMH3C?43M# zO(ohw&&sw8(p%@E8{679N273LCz+ebrNG({RU_w9FRmyQiOq8>p2`|-EpCvk4<6R# z)<}E%O4P}Vfl`J$l*?vQCp*!A)e?|Y*jFApgaJ{8S3bPdvF5mMQ)j$wQ%8JjYg=+- zdu!*W_?Fh##;(!U&d%iMmX6WRuCaKm9~vwT(`Yi2XJVS1Re*?V`%{@@Pwqq>B=#{P zok4(a$YiMvgR+=Bnat#4W69R?15lpEPbCw&CzHS>Of~F z3)`}zcSkitnW{SY~PDgcZY(FCg5RiA}{&LXwks(dhmx zsN$p1q2%~PG^$>@3-YsUpMxm35p_E4DHL+4(a8d_y_K^UZYedJ{>)fbpTP!Q#n){+ zFx}|+A898&6#DdRJP92-n}PB&u-Jmx+h`a*=pkmuVK{RG z0wtN)(m9ssinVqolORw!w`^_Qnn)yC+Y^b-O=DwQH;=V%#cU1LG-mkFE;ljCfsFDx zR{p;wqjvS}9Nwc7OS(TRB~*EsY?!5l(hW*YLQ$*zf6J%eb@^1io#sV4Aq+{`R2{lD z1xiXL%=vszW(p3h47gOe1VUtXa!H?E!im{+_mlNoSJ&v~&GF9m)~%bnK+JV?#6iq; zjkR_qx3qVSwRdgo+O)Ah&y4|4`#UHZEw0`d;V#uy?KJ)$Sj;?{Iykp20}MYYHmtY1{_+Q|eSISh+9n871^QiZ*fqcCN$ z(<#wt4*wdzr?sG-Q;Di)PmEI?&eXVPSd0fbhI^IkM5{~>o0)40zbEp>4Ur8Yw}OQn zs3(Y4;4TcZFx*!Jw+FGN5N`rIN-nb6v;GDQ;V^uw0!sj~Dyn^FCoB%h_98c)Or$`q za}ZaB{JzGg=T^7eLl$9lhv6Ra9>Ooq*g^Po0Y3c`DNnwvA5G?p+ zL&=4P-L?heLJV(Lz==VyO)bhIS|1~;MmSVlG#Y&bD@#MWAjHcsq{Q&e$}&-ibRcUv zmbqud$R*=~)JFS03^6f0rGOv17~5!JWHUo{E@YjZ-#K+8l}^MVpn1<2j16sjN4DMB z3|BzO=25*i0~oeq_?&XICbgk~w&qwJekRrH(~fa4hDXFZHEo?)Hi*Dy)iHNq(2U`j za+0TfQFK@6Y|87HJcNUbZj7`?I@>y;BrqJRTjIHFK08*x5Q^{& zU*LbJ;HyD~%(sB(c1(rMM-gmE++RqJ=WAUaEQAl zCIM%pBN)VFcu!Gy4QgD$X*1J-?BQ(I+Qh;7q=}RZZtjb0tl2?~lmZ45;klMmGb4jJ zMBLicX6=eKieXfi;jJVbir7qT1WW9Wl?yIwnmX5qDEstk(h1NmVjUM?#Fyc2W%=yt zsBQo3T1_M3){+^>5mEpHyMV2DmK}*$i0#mz1(|0n*0Bk}T!w*J0F12Nj19ud<*ljx zVfoADiVlp9L1Z&uA)4)jS=M(>&jyPs)W78F5uNMDX>LU8$|6}Lq4E-IHl}dB7*O41C&BWW zDKKL%pWSmQUt1PNjR6LtsxNlARuT3HLeJ*G3ObY;PrmY)xX#zuOmklkSwO5+E|8IIi?Eg!h3mwgi zntl^{A=C^0`W=DS2O9lv@L$*X-p0;`4>ffAp7d?^KJ6X!yxp@NJms%+J>Yx+KKZ}( zpE8W`)P_6AEnH%%I&}*^n2hD(CyAQQq{Fu$;3{g)^}<=#R07P?>Q{J}{l4yVdsCSL z$$U2)LnRt*cr;|Z>Dm(dIpU2>1-Ds z+*$@Rhgf?ZWaqbyc+{ud618?YgE7^HS1J%iNUTI`fWfKpQHV8eELH!8Te3PzrZ9XO z7{7$QYIf<5U7JhRoye|QwBo=}X;8MX#g~}4h%n4g#NsBMzTp+OY@G(3wDbKKDh=2! z>|vqG^Gc(F{*7q)XD~k6@CtG6;ciS zrHUS7?^d63Ygm>a`So}jeYxV4Ez&fW)iRl*!S$8LBFlv;o^@F28U=#viU|>eP&E~8 ze8;UcN}F!g;Q+X;T!$grh7T&OqA-{WVJ|G2(r_dVBb$*k5S}662WR-tnKur@o{jAKXMDJ z3>hKH%2mjZLGkmLno5!CJ#nqHHSO{Vu>K~h{ilsg9)O1B2SvGxNs%1WZ;7EEJ|}0J>yl4 z`jub`#csnDC57P$hp#K15*<%;tzEg~FF&83nrcn088OV321Hao)k^mNS2{ik`~UFk z!>*>+HZ6b%ehY)Sz*qcVY5Z8@!iJph54~UW-sJfM_m?3&(Syz}I1dB)@8mzlJ&3)z zO9_g$+X!*agdHyEnfmi^W#8#k@{CdPSW$4>62+nCFrwHXzA`O?u=KmFc+D-J9q&UJ zH{6OaBu>fioFr3dq9;EA5l;zMz>SejsFt{@)7t_i9*XxV8xJAOnD`l4t71)R5Mj91 z-`T;YygfK~-jd^7xL6ScYo@mY8DYFVFn8Xj)7CsPj*`kY;eBTZ8+p5S06`y7Hj55o zRyZ3b+NxK8z4o8jL5jl0FTXf1VWi|9fq}-^+$GqNq;FW z*@JNVF9@H4X1sw(pK+FT1Xux7C~fU&x!@`m^|QCH!o^8Z_5a%XPK`7`3}mKCloxl( zeY=r0eMPuXKx`zD;2yh@6Zu>6*$gv`XLD?`XY6Nol=HzB)of4DLIj&+CJ7-7AmIB1 zp7W;%k}vPW`rj;mAi0+W3)!8`5gX@NI(udqVo=~8#>#WaxHZ>}|6K@5V*Ili;&Aew zNr-*7KNTmTQF`JePC^W#IT)c;Ar=4_!h5?Qu#~VWNaa2&`(OsGGDck1G}YmxccMCd z`J`wU-jz(prUpUTXe?iQ%q@~gle2iA7pPK%RobK^ReftLQU8WpsMaq|;~ie0&K1_G z!hQt~!gg%jnKJ2AbuX%ys|4_RFNoYF?6EYIOU4REAl3@FQ005_G>(U{?v^A1U|e|B z*YF1Muxj8JMTRK}`m-~gjh`~<`zl@wfJouRUf@?F?9N_3kg9eCt|{1-lnbt2Mq#r5 zzsB)*j^h!X-!_gz{Qa2k8Q)FbkHHCmuXs+lzv0ff ze&U*RKJV;>4_}#oia(1&bc48Ghbo&mF5eZexlMuLZcuX_jpBm!`V3;(st9)%5g&AG z8ZIjIJ7=ge$wC~q@3Dyqh&{wW2F4NOb>cgf@)3XI&@Mmcg3+_c0?hd|Vp*g3MP)j1 zH!qiK#AAGCkBPL`)F~`|rMSzUx}~hN+v(qMODsqTysBQdvOIx>4~Xw& zN6@XB9V~=}Hkf^wlMNl;Mm*K1xe!&O&jWD;*eb3Pwg+T>TNS|6C~F?!1?5P89&FF? zNeupHVu$`!)uNSf49o5o5B0&CLUXmU?3x@RE*{cVJ8`CLz6$|KSWelr%v1xhbb1t& zrbeb%l5oLvCo*Tro@zhu<4)%5k-c;y^2(PHtwt`pX6E5g(k|$9( zAmC+D#yJd)B@+J`#0|vd1cZ6mFc(bX-SmT0%wHxE7Lap;han@TYd^CsEYJc){GHonY|At#Q z6)4xny z8!khM_MDo8)(_PjZaOUw7r&_vH{e?2IN*53;o1TF`G=hsoeAd_XUOr4>k(Jlz1Mw> z>xb@Nx!+X1T+WWZo%MIUc_(;PW8%{R7s$qfe8{jGM zI^SKsPG6({tbf11rSYeYpJ@D(#)-yVjY|R#28IHw{V(}1`QH(Y2HW7afzJot6AA^N z3I0v+q0qyjL}*Ls`Ow9tMNK=J(oK)Jo^C$he5m<`@Go79!k-L38ZLzQhOdEp2cIT) z6*`_m#lu>UbJ%&@W(rsb1g=3F0_~0f&vpsgS4q%zOVDnkv?5`$JzE*=XxmuZruHqZ zqn({&t(~!0N9)#&TVt)s&W-WWj@Xv?#*J~`0f~G!H$ClGFUYeJ%~vEmrKgM13bn<} z60|o-&^{nRyHkR;M}l^T1nq7K+CB-|T@tjt614piw0k9J_ejw0lc2ptf_6ZHcE1EI z8=FGo;-Eynha_lkm7qN?K^v8zJtjeWhXn0W3EJBwXpczH-X=jiEI~UYK|3fxdsu>Y zOoBEkL7R}EjZ4suO3=n6Xz!As9g(2DQ-U@vL3>Jq_HGHL3^JB?fuP#vi@_xB`dUn@cT8VTBmBxqkPK|3QsdqIM>C_$@8&^`#e-P;A*`2Um0_xA(-cQ^)M z{|`I=hspk4-R;x8zq;dgCWt=3wZpZ@^O)y6Xb7GsIsngSogwe-;a`S737UZE@T1-@ zJDzFyZn)66#Ju|tK16r?L^DA31%dZaeE`)P1U^sq|Gp>vFHwyE(IYf1ay?D71*jEx z1atyB$j+Z?1spHn{vWG))Mn`{!HdTvXdjiJeTxL`8zpFE`Y_w4+c2uE2l*2T439|A zzDa`ik0faSe+k-4611_p#6vh?Nbu8AC{o~ zdkNa7C20Rng7$AEXrGXv{Tm6|PfF1Ks|4-8NYMV11noac(EdZy4&gn~XC?Cej0Ekc zn{RMT3+~JQQzGBbNznd>1nnCnX#Y@x_75azAC{nfmjvx!NYK7rg7$5&)BLhv8-H0M z-!Dnfeo=z<3lg-SC+Gi{IPP&YkA=SwzNzW)rsbiVgKr7E6iE0l`qwwUqcPNQzwdLt zg!f;(ZJzgembh2A-syZRd@$R8#nlSEZTr*(;aehDl)0Wn0`3gV!u`R_A#FE154by< z1}`l*H5pG&LRd=U2^7hXxkn~s15X-U^&;S>7mXG$SRZ(+sqTDgia{BSwIL_nij4}r z#d}{-IQ$T=x`Wxt99;Y>#v4ZbyTpq#3cE;L+&>Bq(lYPOcGEFu{Tps2)g#2pJ&Fg9 z^mG+Zh#u)4IWT!5SunP!k@Z#-Tqt$&CMDgE)Af{v3cVEhI`LznEDSFMI5JkX{G3}s z8;6kz8r+wNRdvXMK<^9MCiI7zN8Js)_6WF2me18VKiOD7OnfMfWZbT#S z0T-txT7vf>&aL9Um#Q1B9W-m2>Sz|9XB|k`lOFtKvcs9w*p%uOq(yf%%``TI)p2>x zA+8SbNQ*irOBJE9^(+Xg<7m1UadeA2Mwcg=gE^Rs)W{e{EF7Zhcvem!9*JHKp&6h< zSKMkdl;t_s34Bl;=i;-n{mS6?qdM8q@o(at-kr!uSRL0jXAsvuWtFHXAE6jDS|?S{3HNeJUl|5^*d@b0F6=F=Ja$LV}NACF@j zgbP@|?czh8Ejghn24ZJZBbSVeNsWjCj7LTV?qQ4)j+;F)2)>^M^Vl|xX-gU|D3woF zPB1go&RXBWYedyV;Ej>%Vrmt5zeQTt8rPp?2M@7 z+#k!Fn2en;twYtP+%kJt;CQ%7p|@-ID=S3{WRh4dfocV`tDlVZx2NTTgR3YBy5bcI zy(|0R1>q8huHC3sUAr?rAP%0Y!*{C%HtOq4k^z%a;~9NGC2ePX_R2e~QKubu_Q?mpXGxQtY# zl5(p;ZxDY#IbM@0*)^*~o$RuyUMaY}0w=(@BD_wd9G-R42z^)`_-2LPv7Jd?C~Cdasn~EeC6w2pymXuEZjnY159Gk#T27ujm@rX9F||10t!W<@G{My z0v~XhqKUU=h2F@$T|DlAs=+nGGj>iMRdq<0DfC|Mn5Jz8^f?*K_C)c)TOOu2+JH>{jsrTO;PJCPX4ofmng8PS3@wqFkc{ z7|L!@naK17APw>=I1RTI%Ifr7lx40WOE)Nf1bak$(NJbldBZHsRhv&lAxD%(gnUf= zt}3ub#llPh#A_;k?if7ySiaZSTR zzHj?>c>mJtbN|L&aJ|R1(s{q*S3qw0Pg$eTo2a^!BciwC>#9xwEyct+%an_vWpAyLa}|+whzUy}e2z zOpA(AT?rUvi1{rSBwe~-7hj>!YpgaXw~BI1Eqo9zB85n>=0HRhuemVJZQ9zoYuDDD zn_72n+0@nA+1s_VwP)9suGTG^I=VLXZSCE%Wf$X>TcLMdb%>i?O*krTuNDMcs7!^i zOQBa@-6PH|&<0XdPclbOiLfw5`P)+Y6j)^sX3|sr8Bpq-fk2@aYaaRUxs}kyoZ?gH z4O(l&7aSPb@dQ*N9Xp*h=}L|7xaG4$Gb%Ode?^ZHL3y>OC>*Vhsj$fX?Bp6jJXONE z)5w;Ti?gPC2kjJ2Gzu*~35vzSWFnP?okT1Hsx-I(7RTW-r4{+GPyBAo!O4k<988K} zIXgJE3uM;-{D3SigCAER=JG;YHZNA_tzccs22nvl$^?COGC^&7)_Y;QXb+?l zUD?!LMX_K>$OSgfVnP!n5vF-4qt)LQ4Qn8J8`=@2OO#DiuTJiu9EgE^9xeod`-68w zi0w(Zm`EMO#87c zMu6SWWZM;b3tE>Ve9Dqkjs&9xB?&!k+@_0QBE`vw67X3G0yS zAL}_CgB$H(MP%$~d^&Dr)ZV46P*&iiIxN0f?{rs0CB z*hKB(ZlV?_EeLqK%u1HV;v65(X2hl|Jrx&pd3C)+S&o?cqzs)HACzDcUy7J11+ayc zYZ047NM8NKty@tTdmM+TI-)@6Vf6oZ7pTX->uEJ&Unmsbt9siLAAb^okH!FiNP!S7 zK#de=j{N8SGKmHN@c}VHfa?(wF`#jY8Yhs(0U(hEXaoQn{f|T)ppgLspLah>q6Y+4 zhY}=yU}y`C`PYR0|4oZXEP&9%&7ZA<|Njpp{3gCHLHj)k+V4uxz92#S9SPcROVB-nAVc@)R%y;g#DnFQ@s60}PtXs?iXq&}pJraJ--sR%?dar5ztn*1RUu*9giF{W}(5{l8y-|X8r3CE_ z60|EMXs?%`y-tF*MV!|26$#qsBxt`OLHl(H+Gizbza~NZj0EjhC20Q(jPru=+r4Y) z`Ty;X=40Xahg+JaL({>34lW3E`%gCRYiRfW);sR`qGz-F&)kb$uXFy;IplcS0qTGD zPjM@^pgLoNxM$wT!CdM@iumw@y?-p58#gL4DqeF{80A~ll#oKNRF=50R4WJU!DFct zlW=z|oCM}zG0<=Up=M~C`IgPh zsceZtuS?#nbcm|_jfDq^L> z<%)Vq@Xc}@($0?A^dmD37m?2AOY2OUZ(6gmlj){~9Vd>alIg^*$sF8kOKzK@*RWN{ z1s)X_re+ZdEA)Edc5&6TW|vX>jmb7%`JM{{BxXzRq2cvsw`^K}b`xHpRE#L}+TraN zj*7P9;Uqa$04!oBkn*%6nQ-x_xaewX2h^;!=3^hHsfDlto&IQf#Y?@l5ImLWeaUn6 zRLT-#gC*-MJ(cw2^TR{NDvBn8o-q-PuMv8D!@!xP3cb8}&Ynv8x*BDcwP%x_{*~ZO zrKb`i(lZAp9`0fnl!src@+xSdU-18(MZ(E>~Evb zrh28ily0n4?L3wA9JL= z`KWYa(v`gC@~@`Tj_&wLg{17A%;n%*2V3?TWWy3=3)Wx4Vm&apb261qXlFX{5P;=u zVn@m43TBQAy|A(wvB_Jk(Rs3(#oA27MO3!$uT(Z6qIP9abjiY8PT*!|>jM&%@3}bC z!x8P(Pnch)bRp1I<)A3g-tok6KORv&Tc|w8VSZZ!kYxYA)bY5Z`QGsN!oy7;ZR!U5 z`pv<|gPQ|?6>#~_HNL0eHw~wJf9?I1H|qI_=SugVxNmSBa-M=uUXg#wW`*A9d|gra z$eKDxD&mqs_NK!^pPO2(6^)5-nW6Yvm+QcR(DL0?xCc2=e%x>CNCpVu9_KEg^lb_4{r zFjP^Cymd&SmrgG)3VRsQ%2b4n(;mN)RU{2JsoaH;8deD(52Vn0;anCR;WW;ihF9F0 zttI82Rp{;1tHeVdLdY3fKxLOPyy6zz-bUToRx0#*YKddrBXB}5ot+{cq-6Ri3{NEB zEMGs|3Y|M0OGA_}^To>oA8>K*f_Nb~sFo=7`s#jh^@x4B#^$o8<-(&(T&mEUs`t$b z8#w_=4g|wan-gxhntq=`Z_`dHr)JUg z6u3oWs+hRFx9XQdwMnGYk#Tmi8JX`^=-u1x;upm;CwFpAo2_b$pex^Vp=sOrRSLae zdsy5epc_z?C9>1TMqnaeREO$Q=;hiHj&ro_tee>Qj$6FGOF|=(wmYp1;!wU$+&!PQ zS4C9Q@^dZ#2$D1bYgOztLFF)(yiQz&%u2B4f$1d|gPsXxIQJ^IGCsgY;w~4h_X2nN|I5Fl@ih&Q_0uXs}*Nsek=Z-mCY9=vtGg@39IA-854dzUISn(-d-(P>d0 zv^a6Ws&J>YC9MkXoI)cSuTuP?ViSN6Wrdahx8W7HY*-q?&J0CHr$Pf64~i?MRO=&K z3gwwru_qTlnJNITihZuY2YjehRjSV%aqm!Qz~gc8rN00SHReWo3jFDeBU|=sZjH*K zag{=YA@5U!-Due|B?nXEnQZPq1mafX)hs5vt%vT*#VK@+&l8 zvcwD|0MC+y3uZi@N|OdYtrSqNwMJO4rCY@h=h8+N8Q*aW$DVakp;3%eMd33oBkC3x z;=m<9C2}~KNaaBAK$Lz^Fpa}6P&UElj?RH5Xj0#Dq3dHy+iOB2aXeLqbzP*;7|9ZA zA+TO)6XbzxZ#tIG55TnyaK(+WUVJ)k9m;|zq^JRsmx>M@a%;tz9LW2_$ykC!P9a+g z6DDgK0X!WFjgcG^ziaP_EKnwl;@@#`YXkZ!C5x-L zJ>p>{MwmOd*2bVBq1Q}QEHi9Lx!|-$zE8;@xOL*|47B|9XAZ@3aJf>_G{#LYxd1fo z1eI|FAQ7${%V0|yjYFmew5F*JXOWUdIB%ThloI>xK~hgRKv$vl z(7oW6yLK4vULnrn2{ebCS5mVrzGBa<77s5(i@#qviN!;tP0_ximQrbq(Z3M|0AZs} zAc9u$Km}?!*18|_TTvwUD`T@|MdhYd1!1dtF?EHrN)iDq7Z2UOD|xyvbGo7l6|xr6*o_#=i1Bmk~%xmsCX> z993dTg&(UjkVenRbMaWxRmW9y6lu)V)(gN^F>UB!P#wVnhOPiAg2C;GvKsJ<$Ep;l{GCb<-ag%vU&z}135;W*YWpIE;$j) zB_U*~ne*@lAN8FEEspLB^IFm(H#Llo{uTRdUvi2L23?M9wCbLKh6Ij~vg7{)yU1js zdpn!~s}_l+H=M~OPr&kq`qJnqwDAOYd&JVId(oK7l+Li^)lt&;KZCH9OG6N|q$Q1- zn`(U2e-9f1+I@&f)#Y2}D=0X0&o%6at&zheZ@DDK#7>)s#vurwRBjQqd3AZKIFU$O z;^Ur)N5!-+bPvmXk_fl+YW6t9wijs--!;XcsF=}Vs1P#7cLH6R3J?5DR}pPg=$@gt zKte+WHWX=K-{ay@a%nFG#uRedbbp38j?pmX0%6jsf5ok|y7X1Xi!`urUs3!lA0AN^ ziIWK<4txQuDY?+gs<&J@pkVwioFQxPupj&&Fur=!MkK z>A|;@)NU{t14~Ke20-8gZq?42KHib;#7tSl*;@;?r>%Fqj=H zoPp(}&bdwZXUpKOeQ-2c@71}oNUspyEN)=aEKPjmmLzhZb&j6M=PQ&4a1*{+Tw!MF zKlFk*+b%{)xIj%A_MJs!>lJ$S@KJG#l!YyMfAT~uK80(2*dYu++)tAxR_q%tc5Rvs z!2W;0^|Zrtp2XxMaroSimSX`nf7ToUFud0)9$zRC+7b%USbj9ZU*PjJzF%N9jq68Z z`jL2kYIMPJL_quafu6@)k61+=Bxesq{$bpN<09vhoO>i_cT3RrNzm?+pzW2Q-6=ua zBSE`Eg7#(!+M6V3w~Ny{X#6yx{@|eT)5K_L{4_CI8b3{pmc~yLqowiF#As>!G%;El zKTV95#!nNYrSa3mXleX3AzJ6F#QTG@TY`3*1npJ{+AR{anwply?&-5^05k)Umrpj|IPyH0|3tpqKNttB?zXlyMpS{hqRjF!gM5~HQDwZv#? zY%MWb8e2<@md4f+qouL6#As=3EiqaeYfX%n#x@kArLhggXs?mzXEauzSiUr7q8KfW znJ7j}d3%os;TIRirQpQ)xJ^dY^Et2SIss-hEd;s`pm(u9LprE-|Fz~ zj-7&wA(NRT7?zV(#z!5k%9U9B6quwnt1DQUEo|x|d!cynq@=_|PfwK3;A&eaqeP|N z)*`)^<&^kMqy|g$kyPQNQGd&#-*GyP7f8yN&ga`oCBZHVM|qJ5uT z;uO~(lOTtV&9$I?qCEICXCoC1N-0;7UK-OgbDyM?D&yj?iwzeGIsrbZAX{40<3xFK zOI0~D9lL~hst#W2>SURZph#mm9e^_e96*dhm1&lRX)?#;a-gdh%SL|^zbrdiTG)9h z6JJ!uRpv8GPq;<+3(ZeHQz%=U4HmIr@*wW&a2yBhGYk`*GMv|d%9y7j^0Ec;1g1chY;5ux;;X4U%NM8wV z@$A8M@j2H)-pPO?^p)Ti%^Do`6Hc?@I|*=>eXhT_5W#IPHj7FXwmwo9!Mrx5TV002W1Q|c6gOgxV#;RG8qt&4H2$)B@>)eeTzASVA>%j{|BlNCgxp+gN5~S3 zIx1-BDg;Fjr_=E1Y#|lb7uyiho(rHB6Fck11gi++Y)QGm)U5?Q5o3MLXL+I#B!%5!NncjsSd^R`F0(t zCBa4=K{+oIzi|BO2!SO;fRyQ3iThLWvqVd#ZA>+<7L`;@amZd?jL`NLzm{6RkEXXT zz&UPm6@y8r=p5t?WZd@FrupI(#a2X>yx>D!oa+U3E*Wkb3hb=+={mCR&vScI8Fa}c=cY-J06pC~DmS%Vn6@)8 z5UEFAw^`a7bZ1uag!Fo~e!J=E@V>Lg%wlH;z&p95`LpmXwQ59a}hw_Gj{i7=$+= zZL&X0g9{rwXtH<%R^jGipQz~2_eX8Mus3EK$hgqS6hQ880cVY!nb=e;8ihDVyFhOe zjS}!_vrk92fa42*#mz0X|Nobxc{=>-a0+h!I}`Y9;Aa1a{f&(m8UqbkUxRm<=Z)^y zx?Xgha6alFcMJX>^iR2|NN?ghr3i1)=$>Y8ESDg96k;|eVTF1Ui4=)m5KH5lqJIqB zfAc8_!)qKgk{@%MTwAUxy+wLo-&UFX4pb*{y&lR4l`Y1X@yQ zx*^A2@L1^qW=-W&REM&lNU!#j5L3|QVLJehu{5NOHdc%k;Zbp`Qf6(iNN@R*2u?J3 zDh1oGiK*dC{A4TxKJUm1BO+@WE*^DiDf)`^qQ9OCUQv+)yEHr$q3+Xp`(r*G7na(Z zEiDkH0DQzcHmZfdx}Al@)UBq~5-h@NTTp>yXEz0?nX1L%8q`~)mkUbV1K9`R(GrPd z!hqD+E|w(R`Xi9BBE3TJl(>&8*(yV5Cw){pi*N>B9F>UFw3sN; zn+b277Cs3@vzDk_4t({KcJu=EQ9-w~XaNDuIZpLwpat|+crmtG^iy-zpcGO8=%|UJ zRqg*aUto{AvPkb+>=U=*4?^B_4XYKx;%Jy}VYQ>=@>Z2Ur;GGn!xiGUjgay{{_aaA zCyYZ)_kvq)Sq?jk^xnV?;@7^i0zedM80k*;7wHXr5=JvDd{;V6N3S`!HmOnhCAau;+g(z#R{tTs zq*zH{`50%urXsya@MiJY`z(9S>|o#8m1NvzM?k(Jy+^P^{E~0z2*5yt#lbkzEC{$D zG$A@wr1u1_62D9YW?dQ)sdBIzUU3Uo1rgc*U+#FDqj^))Z<`XKoxwK*eSz-Adl~}1 zsP`YdOFSv}AG!X;`I0jZM6bv{WqXlc__RkE7u^@3DkcG;$mrH_PcAz-!Rb77Z!6LmH z>bN3&8cExEzygYdv?mcqt2d44SHktNGA(2CtSi!MrjCnWGiA8yMYu|$UvaC1aMu*+ zRa3_l;SI6r8W^z#5d6p0MO= z;%+kpi0UR$z4un5=0Y?{6w>0wc#+;^wRu`N-WR+447tadUo1(uxXSBM+9I-1LfO1z zxr#N7Oud4HeP*@5RTqrvKFhSf)vZ3c`XG&lu=&F7BE7Y%YvwZ1Nr&-}nD*?sY@iTe zGOXU!`l*UYJzMl`r&U7rc404d&+W3}tIc&8jOeIX_VlcPo(4F;bf;>0JHcU+L|vT# zwXBZPrcrfwbqvBxs@)n{&RdrcF6kK@wSS_B+*73YpS6l>M_D%Zt*E`7dkf+y($$5P zPx^_WD*ht9M6Fvqvb8b(tA^RQAK(yiD~5bsSERS6wJRf{BLsJAz+_q+Fe=Rf;@ z{zby0__>sVAs5iFnxUkfv2P6w&YQPncv7`3*>PpMrKsATDbN&WUG|!#r6t}>7KAAi z>u>BU=Im*B&06OK6oqVX^3yN-hE+n^bs3)NZA{$|&ZKV*Oe|^K(paekvGKYycjG6OD5||9rD{mCv{mb+bIH{9X2wu#N%iE(VtK?wf|1~g@0NL* zLB$V91#0RZ*!jQJbHAtMhs`f->TUQ!{aoFKn$K3hqw0;7zh8N+cT2?!JU@ZQEBvE1 zXL!yIg1LKLx4gJHf6w9l&&khH$$mUMlFXYm-*wkS_lmb>h|fk<>BHXeZkD5RiD z7iB-P@hZYf>6y);U7O)KK8Drrhpc6?>(`}&af~^8Z?ed0ws0x$04gwxWO&k#_6%WF zDim0(sIu~APo*3b%vtVTT45i(pV`!6}zImCR%N~KxY*I4$Tu0O6! z9Z;kwwG>mNDlp15{)_$X?#u%y(dn#mKx=k~?5?}!ZZ(oEqVj7`VQD^)nMP@*bIK-O zO4`hlf?dfMp3*YDpDJS|C3s00ujC6)VHw|_IfXJ#<|(>>~v11p@Xw z0sAlkyF|b)60qk8*aZSMO~9rI*dzg)AYdONVCM?{ErCSXGZY>;nYsGy!`*0egyo^%Jls3E2Ax*b@Zoy#(xW0`?vP zc8Y*KM!-%Iuty2lBLwVW0(OFcJw(8c6R-yf*aHOY-306yyZ^t=^8rumbjycYZfXuR zy}9u_joTU?tN-Wv>AGXJ@2K_Gv{%2e`lhOMO&(%LdS zYh|~3d}8Y*oVakd%h3fOB{Lq0Mds3TATdz5g=65zjm8ze1T(P+r;uY!2DDWb6;lL% z9V>-ATtFsM>Za`0g1|$E`K&T8$FbOCdVW5^gTTqfCwoK6 z)wFlHDsvvG?p8NFvr(OA;k1P5eF=V6n3PmOfVXBIMphH*>07O=jxkU2Q37YuE4S?vm`p4a(G=EOK`@EryZ$GTmVugon0NG<1Y#x>r|&XYcZ4Qxw$~1 zl)VE7NO=_6?MUVv?@bwHPbNE)U@#np!OgCR<-KV#ZGlNysZYGVXdsyif)!UlL?lTX z1)zAhWEQYe$F<%Si5F9Q?~BG~0#U=o6`d(dR8aPcw6f-S-k3=v+3}T)oXNmKcpPRM z$c+MF6_1AJ9A3Hkl3}J()^^DPlv2A?hD*YNjN319 zr!;RSiK5t{o_xhRVveLE;SvpmkEPWvjN5B73Em*;yACT0ZVYoQ4t{))$)d!_bpREZ z-H~|+nN6*1@J%d)6NyMD%ytW4LKK;aKvI^HeMa_%0@t3*JaRok30PgQfP^gG%r396 z-X}{>gYI}KPd)=#KQG+tAskyAd3R@&txl}1FU(2h)0qHBnGt4cN4dVmxhT%jeVG_m zVYe1p$sCQ_d}DH!SHuQeh3X*notZhL9#l^ZVU@zz=@@w83yb41h;PbL6qvSWC3Zb! zUX)g^Fl%hcM3Ffmj7BkYk$0xNPEwofj#YedUuYt_mB2-Gu%7UZ7il2vOG`8 zk&Lp=>3BSGb~YM6ho(JdOk`s@Dh`8G9xtu^cqEvJC*!jzA8yBSFXY2=x3_@;gaw!1 z)#K}6|F^wOWR2Jr3#Y+*G`hVF-P(fS1$-=iHXPg4-8nPc-QT-25bEC96YlQC4#u6h2;RtC=eBe-nwb__$!P@N5l-)pC#sZebplfe5 zfG$gR2^T$<^0jJOgUNXae&Msd>`N_j9pdh6Gm;$89#h>%vJb)R##1k_nVt<;$G*!Q zL#1oXp&|A;R?#S^+k{oa9zk53Cgm4Teb?z z9#-E09gGJ;7@Lpf_hD*MSVKh&Wqa={0hG$e@YiZ};1}m2hpDqQ}zO z85$IJ{=ceXz|->0=I=CpuJK(Bzf=FS`ond9Rd-kIt84zPX0rN;s_$05zw!p}!vMPc zryzmMt}IWyaU>g5?VIN53__&hRBj#yldjEK9xrX*Rqeed533U{)PbKYeT7<-dv0~s z)o#l2EFlBxp@YGd@oYF@1Q9Z_wc4jpcZ^g}{HTN9_50`3Gto%$49-2bWO)XVQ9=MX z{EYiq%Z;QvQiUpGnAx1y+5*ezT*<~9N@&v_yx{62fVdI~ z9%Np&j8os13U+ic7)`_V7AGNc6!KX;03y$;w(Emikj(8#N z7%5ki&b8S#L8o1HW)wxSK%tRXIy@0Wn+|)gbjL{PF#C|980hr*Cvi+~&u&0wCp1{h z)G~Gog)ZDM!gs)6Cj`+?BeRh(WQCcVheHJ3I690g)ZURYFPtVeWN$&fgc}$kB^Cu3 za+Ms4$HI%CMF7&SD@-}Gl%vtuk7aL0hV5FTszgPZaH>m#LUO@z%if3#3Bf|gk|swMa~JQS*eM|F$R8lbNqHI_DRW!)2Bg)URSp7=b+j|H z3(W-}C9k?rBl19mrt(yY)`Cd^WpQsV;iLS_AhtlcHD#!O42UT`5 zg|VR|vT;6ta!7`Sv|`MxVljTR_84s`do9XjTs?BvNO%?uYr>(zbta!94fU~on3Y3I zw9 zqpz>MzprnmeYUTwt1}en4ut}p;yx44|DGXF%j=up-t@7?w>Ne*+z&ATzg7G5+N)}s zs-F#Z|C)DWMb7g>0J;6qo|fgwJBGAT)#Z2EFxp!Zn{{(hvCC18lZwmyvRL|3h3HV) zHCdj4Vp!X#%9L-l&5v5?+NqWRO1Tf#+jzx{xPj(dK5Gy&-_XP9 zMA*lnKD!WXv-5nm2PdeBjB<*~y@9ishy-*0@$k3UGbOGeW#Llkx~P`TOgZ?~f+3oz zdxrSf?2wL+#da19GR?=hN?)1n#yW3Qk79@4!;P$c;1zzC*5Z=(5#(cCl8-=O%18=K zDj@cxkFD2W`~uwqS`aoamVNnS*)EjH7IjNu{0dxMfL{xg;360EnOrsrxQ~Dwve+!% zY$sCKt-e+w1-6le)aww_HawI#odyS9R+cB4%VI2t$*=O$b-@2-eXxW~N zQhedXu>V$665OBdKq<6ml=A>!^~8;E@tuS7skF|QppIC>NOlMBY8hqKHP!+9u%v$G zvrAJubJCR@8;~znwl3?#%J!<~ox+z5#gVHn$_*i{ctJTZmu*KbeHmr504&L>D3-|I z36Zj4oy^BPKS0Uq+ZRdgPtSnELSSYlk{Una_b2dga}Twr(xCT*)Or95#ZzEr2&ix{ z3 zB*RHOc@l{QC$o6=4pC9%0Jo?}a@}@YpIq{a3jG#eiOqiD!=J7DAuC#s53xeVM1~Le=4_ z+bVxq`I*YsRi-NUSFZQ|)cZv1ms%fhz0i8N^|qE@wtS}LbuFou{VnU8f7<*+^UIo} z&383l-SmT|4>Y~7Db&>8)YSOR#`iQntI^-s(OA{+wT8DgJhS0g!yWa%ssDWao9Y+q z57xKU{k-lIb+4+MuN$emzV=78AE|wD?U~xA*IrTc-J18-Jh$e7nx2}v>aSP7vpQFO zZ}s+SPt}*I9{0Y?8};7hy}IHD6(6X0VMVB-zoNOu&AL zfc+u?`?mz_7YNwT6R@8nVE=}I{VW0d83Ojx1nj2>*iRC$pCDlWnt=T{0sAom_6Y*^ zqXg_<5wL$rz^e@ei_%7|B!%vGXeVt1nip#*f$ce zZy;b_Pr$y8fPF0i`x*lF)dcLT2-sH=u&*FsUrxZjjDUS9yZ^t&^K?&ZxaFrU!R9}1 z_BPcvKGd*SAF6wMT|@1bnoZUBSADc9pDOB>VlW>qLg^ys#kms94*f>b060$UIzw~t33?<<>oc7 zc};A5rjTBXr>2MM+0bd`R~$+Q!|dJ#E)bcHE@efG#n2S`SRzpHp<*f43;c{Kpr*7l z%M+VUYr9l$9+-=-5PspK5MB10N3?%5b?y`OG_c8)h@)g>GE|V$FA%iF*(mE8~>=rKilg!r&WbW(f=!Sf`4u>putAyTI;tJO0kA-(oJ52hP zD=V9|la|ijg)%viIdO3^kxYvw1DgO%@NY#b*oCjk?#7A}BJ#S|<=EbF`xukLq?N_S zLRROp&p=j_nWAa0Jie!c;-mtXk3Y@yn9 z*#XhTHmHs+ciZO3RQlxa<}&#-s>ywd$L6T_jt4$vpg~QsCx9rY1oJy3a4PT-XBk< zMi;>eF~u|z#qm~3A*CV>%+H^J@8WR1GdqKg9@doYNK2J@Jd!#SPXlE*9kV!Y&MqLY zm-9^}_Up1dmG*9RX9>YxQLx1@DKBn+h(c}3@_f{T>dv0ihrmr2tQPr(OeQ~fkd%@y z8Am=fS)S3kS5w~F+4;aZZ#J^%XiOU!j*v2mMrM%7by=SGcvL;cvrwsw2fz%D9}31| zOfOS>R4Ij&GBf5}h`4zQN5X;ZHr44*@Da-&oN;F(r$@pIj9Ib8UKy~I;A$Ny6$2b6 zxC?m@E8`1=7ktLqD|2<0r~4hvDhJkgtF*d!4CIqjHilfZ&MZ&aJE|SOn4ZIGTRg+d zB*>6bxma}s_69XcFJ8(Itq^#gl#n;(|o4Bj9N08Q#`mS53F3a+g<4O|a zQJ>qghmqG9As80F;}sE%k{CCb>7Dn+qamlmyx=CmO8E_L-MYiKb;s7ND7(h&1ac%q zL9$)^vRFCgE`Lpol#^v1IfQfw^N5Yk=-f;=#1f$i9aA}KuK2Pv+4=u^&zt#=5TBvo+tW*;W1gs_$1lz4ArgFL^sFe%JF8c)@MM1Y^CLviqP@qHI8yro|BDsSIa% z{;=KZ`5p`^AwvMHBsN&x`4qvVq)M26SWnQ_VnxKDST>F~C^swThB*|UOhIsnqWc^E ztCXU-lWNTJ#U?{ZDd9e|I?EG!^{Iz#Hcy01v14SQvvYBUlqPaz zmgnah)^1Q$XiQ70T$D1e1h6!zSe9qx+MIbvl@zEjBw<6WPo%{{b4LI4ut8B{x~9%@MY(q|A+7|A70yzalrY@Fv5Vi?#e{J)xG5V#cBATMC6;0j$H7`{ zNrhk$vK+^G{IsCS{QoDsF^{^Rzl%rz-ntuWe_Z=lwJ)iCu=W`cH}HEk@2h!!%}mYC znuh9ss(yF1UVUG+ui9Jnm8!Q?Jz90N>S>j~s{EVEH&iZE-d%Z%_h;UZ*S)$f!Q%&b zW6lTytzYuK!n?5!s>gnw4?hT-)a})O(Q^RtvF*Pjr8dJk^uQ4?&_Zm~fa<4HpEcY5y!*Z`N zH7xfUo8CFoG25}Tv%h_&r)RdkClKgvALtqgw1<1Tf-~KL{$N*Eu!Vd3sePB=HRioR z-8;s6Jpp?i0edY0dkq15H37ShfW3-`xJ^wsLd7Y&9(R%T~j3zic%u_sdqpa=&afEceS+!*aiDH7xhb zp5ECL?AX~I9DpF-T`+=n2K(CsUA;3fmcldr-7`JCv%x?U_sdqpa$oD|-rkwMzF<#h z`#@hWOBCH5gpt`h+uj@Q@9drJ?Ct8^+0{hxpZ*D<@BEm6{Wk*kM+EE-3D|!nVE=`H z{Q&{{eFFA-1nfT(u-_$MzeB)&n}Gcm0sFr{&YId>@)qv@|9hU+eJ$IXA8qOWjxQ};ma*J=;dd=UKqtEwg|UkUL5UsUm$iaO8ll|67@EFh7)g6N_#mPD^UFu}5G zpbEcBbt2{^!&Nz+jJs3aHqCU@H?J`5#TP%9(h$%#%jG8O>Ebz_RC`c8V6bszbSRyi z4+p_!G8_vfCmikq5|ET1nm!Irvz$MS>R1fSBGDjaunlsZ3HNjJ3M0vlB;ncdK=kY= zxX|)zhr{87iQzAbdb1m?5RL`=;gCirYg10NL2hR=l;`XgrB#wtFT#(1DIi4+hK;0H=nw6ED45wJC40J{+z8Q1JNLg`n2aHz0 zK5l&5$P%UX=6J5`paxlv)DlBZGg}leRTM_6dtrtWiD}vR0%Jz#L}75@4LThK2ro+O zV@_Q=a$dY;>duA<#Nn=yXS(I~%LMjLmKRgkOE*U-4q~6vx4H8~}{SB-Q_P9r^>*0$qTr7C>K3K4HL(4PK zScU;E8}8OvOQOB3IVC2+7C#D!Y{G@v)BGM2>r&2x9g&b00k-G77c%Dw$Fg93B$b;n z3bfwrV^}z4_`0SJG zDaCWd@h~RFw#f`uVZ?WWI>0WEW|B5Y- z?afJeQ7ScK=&rR7lbJDWE*WgB1F@Y4GK0Q>(>*PXB02M;g*xh#Rp z68PUEfr;ELsA22$c($CVQMro4?S*Y$bu=6eLokvHL$Rgd!&A@d$niYjn_qCsv-w1g z%H;&xUBHea3E?cn>Msr-B9C11);rryHaE1vpIdjt;z4wq=Mx(HB^^r!X2b1;A0SX$ z@N76_`6U)V2T9=X?Ck64+z$WKRlvr;Rx1QHTiXghLB88Kgxr~rCsKF9ygoNCf)TN@ z@H0IHYzR-XcOE-BG(0+p$59shYk1=5=+NQAmcMpRcUWJVNuRb97z)F`?_}k%{Z9cm z3p-Xw8F)H&XD@gKZZ{+l2PcWS$ivneLpYE-OBiw=3ZG+YAk@p4pGl-a)fP^zQbs+N zZ`jC#3GT0uO0W%MfhHqK<7Y@421T~Ph88Rm$0M=GTzU=;tYG~Kib-&9V|;vq6HqNPR`0?{;_yh38n$G8}|`h2jLhU1_>n%nq0 z+wki!Z3!(jd#4v-`7tlqwzfy06|`G&H((VGXvzUuCe!otiEt7m#x4|iSmNVn!l-M9 zb0@D6J4dqO%7C4fgDm4|e9!dH&UkV>%l#u6*Sjc%?!5r=J0<(I|qM~(pq)oO|Z>XsbOPfzHL$6+CuF!~-iWg|aWMQtP4=#6E- z(mI&EQLD}IB=YT=vdV~Gzwv%ntiE(Um2$8yA1JIFb64Zgy54H+@Sa`>KajS zO}VR(8XlCh*K{X0ZWN?D#g#GEUf4Mn>}y$w7#+R zik84QzTH6|NA+E7zJT$ii;O6^#UUj3Eo>Z<XZLj#RijP#J zE1u^08N7N4{|xC5uqECDah2+89^)IAc2Jx^itYAfDjkZ%{hia3us*R1wE1u%1$R7t z$M&jIpT=*1w@&$QuuC}Dk{#6V$9Ep`Y^f++F55eaqmiJ(W_$Z#$-7@ag`b=AY*zRj z--+>hv5#5zJl>tUA3p`*kjvC&p5IEq<`fT7o%%^dF~Ejbywj)OXA~ymZEjAE8R>(4 z$!M&qS3iMoPJ28RHA}7y=ZmpG_I`dJ3HvelN3v>0$CynX<_--nf^yFMf5#)SQ2bmH zjugQ}JQ<%&u?@Q4v@h^4^uR@WcSm>UfCVxcPAo(qUTZuQjv9BIRa%vfp_e=wxU@P- zfqqoDh;6%Lv47{5!spuV!LHXf$-7=xM`xdZ6sDg9tmVnDUqprVV~*23&@l>B-Fe)h zV|*k}W_ay*6gaTcc06WC!Ow5ghh~Akh3N6{jL-7KKv!vFI)+K|u$b^`ATyJupUYT? zcmZW8q}R4LFq422Ctep?I9uQF4LuAoZhai-6EBKgLZLF_ItEknWI-Le29-h5W{rGG zf>*ADYwK*+G31gbb6`y>WY)#4buhECr8$nk>>NqKtO;9FN|sIuYejJ;WfO=|>xFKB?RMep51Y_gaLG&=-ut%Bi;>w*f?K-B0@?^%>MA$1?ZQO=Kf$%jt=2G%xAUN$B^bWXLwQl1^An{Z*cC^}UWC#Sil>IDFj?#TPCLZ#zu(gg}vmz1P8<;DcePF}u zS?~FCPiwyA3oUz_Ki1sS^ya4P8dD9QZQ4w|b%as;b|E zT!3$^?Dqa{#s5?sh8KT3f3$0Kw6_pb(qrbS5dN|nN4ATZk}xWwn37hV*y>M77!Of& z_f?~NaZ?h;KNM5as!=jV;3`Z>7ywaBNj82f8jt11KTJs&&TzHc$PmbirX-9}D5j)~ z7lCa`x}alJK@Urr2WqC(9@;L|wG|)GF;bw1S>!p2Us3b2t7IQ&h2RKWSY;}8jPvKw zK$GbxWHqKQmpZ!9IH_a!J`YQu;$X3&s=`Zq7tKmOqGRMek2Y8I^);#^EB{`zd~KbM z@%B8K8!iQ@Np>B)Ya;kiOs_z+pcMk zE}{GuQ(}jXY1cfN$u*&ZJ(p{DtV$~}Eg}bTmBxLBEK`D21I{0E2ZE|a9doUDn4j+& zNDnESlY(*m#KpzV|2KQGp4N$$*EWB{d0#lxHrCY6e3`#EcJmbr) z_{}u4=TZ44H|eo{(Pq>$u-t;*JFQYRhh0z4aS&?neGDd(9<`JvTcO?x#w(VKQ@DRebXVt4v5P6B?jk)*Px{M(ogl*5NlUa#8 zttT6_AS|5R2bVG0g0Ssbb+!f3nSWC;&QQ1QS;nviYt?y8($-^QdDA4P=}8&e9t@5k zYU{Y^CF1dzf|>;s*{zEdf!p;HGo|HLzBS6xgBuEs+hW6 z13kit8kGzL%tX)3-DUUfusxExb>J}q-Ag8OJ}iA7yZurtU0evmc9g}JG2`+aiXV-~ z9f7GzLZ$3{D@)HKoKCS?2XgILtwDAfbWzo^i&s)1X;qll@G4a2L~c7)XMkN-tfV@7 z!LPR1z06)41G9#eDR>44lb{xP5ZmgC+&11;+J==?&a}@e)mA1*T0L;!F*()bwj!ra zZH4`(I5L`D*ywb~{j*KyUDLnS+LN1eTLhC$E0Yd$Z7U@h_FO6x!;#w}n#$ZAf>0}w zkchj*e3@MdS)NM?u};c*&11RSk;N8`%EC41rf3|)6RabTnZVM{&IS)bdCboy8#Arc*-SU?}h?k?A+u|uR}ih?Y0S188sLhd%C z*RFx%1Bu=tFaj8kLjo*UX692VsZJEn!Q3V+e=u_$v3%k6Z!UDMG@KwQ8;OYg{(bTI z>1f#RA3g(7Mc}`nbOT2MOfBp8?;K!WYCQvezRnKb+~c`hu|8We;G0j9CzzE=mjdyO z&feS?JDlD8=ii9DvLX zm<6xXSa=w6D46DO#ex=r2@2zQC7U(tXfzB_Tuqo)w|sN%@!PKh{f13tp;kV_II!5L z^0&uHh)P1~;&epjnjlmdt6NJ{CbMn2t>t-C2zN`vOHjVm7h_e5W2bM3 z`LL&@wK>=H*{16o_cbimf2V$T-Q#svfc5{gs((`TKUG(Ge_iqYie~`q$@b?$ZV%Uf zYETh1HSF>6$-5`v+JoJ3+co~yCsLjA@w>&lsN3G08^ZD@HE`upE8pB<@ofcsZ9cg_ zklYgv$N26q9J13=ctOh62=kb^B6k-OJ&;wtRvS(yQ}H=8=W?T9Cs_t8C0L|Ox|rQH zj}GVOTzuRR&7^K@<50828ZWahw;N?Lo?WNfc>L2`&0~Jq(vWUKk)wYbQW1_vCix<< zXp!7AP%IlW;DE2zr*X2yo@^ID;rB~ZRkK#+S&pA^&EG|wG_wzA(cCVq>=g5YR;w(; z!i}UNfvEl7-!wyjIMb;!b}^{DQBpt`t3|*l!Z=}FlY2VWcUXfQK5F&lvl6r}n=#F5 zy0mr)ptN?z1f}_NgGg+YMIurorrrRhkWy-FYFa(P-vu$br7*h99>@V;jlW#b zy}EZZIbK@VLI=4zH-J2c)H{g0JUc%*PJ!3DTtDw0ECjb&|Cly!_Hi4CJ(h8B8K5PQ zQf@e&+H!qJYnP@zf4CG@Y|Gvc<1|uJa1vvQIZ}`u zN>gMkp(5WjxU~TJBjqd9nd`<1O{;foF54A0iNb5;Nq6VEkaR%XO>2ch=`_KsyjPxf zZLSk(W6Eo_&NG#SD7xmh2K2*lVz&1TH$+(~uYWApfmAv_s%*3@7FS3;A@&H4@cqTl zr8KCAd{Y2uv=1V{yIy|bi}T+qe9+X*7Zr9XuET9=*;TF*9OfYkmB+KaZr;=SrPjw= zFSH(Ry{+Y!EuU$5T}!HEf6MyjpEf_y{Icd~^IgqXH~paL15Gb%3N`gNH8p;-@jZ>t zYVLW=&ulo>a7X=b>OWuqruxPDgY|87Kd<{l-K*fkm;YRrz-0+smcV5R zT$aFP3H*OAfo)Y4Q{Gc5zHpu&6R`hA!2XDU{UHJSuLSJB5U@WWV82hmevg3tX9D)S z1nhSR*l!cC-y&eYNx*)Cfc+-|_8$q@uM@EUK*0Vz0sD6Z?AHj`uM)6dAz;5uz4L2-wdPu%9Df|Av75ECKr&0`}7c?57CWPZF@7AYlKRfc-cD`!NFc2?F+` z?EZhf=WU+Wxt33~+|~T4=HpG@X*$#RrK z5<=G6379`i%VgIfi@B3n`_1aUpsXmv0?%Hg^@+4pQ}PSB`>^OuTBT}L4=2LlNYLH2 zC*m*!u{Ut=>G`b0Z!#GZR1oo zi|4F1D;W%=RdfMd`ifnd!yJ!O-7GqQ)rNa^DA#)N5?7wl#(=WG;4E{I1dnRaUA8r{mFc3Mu;d+r7nl* z6sLOCqgF80tWTsx8)IcDhv^0( zG?H@6h!L@< zhspmy=nz?7ZB8}T0!G1JbL$h8!q4R}k>AuNb-Cl-gvD)2I5tU^2hyV9!g6jt#d`N* z4m0(E)RnhqY>^#`!uD_uoG=iYBm6lhSKax4jlm`c6c%Q1!~nA6D-7zS&z<@%)OL0KUe5w2B<&0Gn!8 zKgEXfjmpLO5zK*ZM?SdJn58s8uiz*c3snauAMDNp@%oo)MvH_Qn&3!mwpZguA9Y z>{QBtrR=&OHWClXbxRI&iLDmH&go8dh5(i_?DTaCh8uF2Yz!DG&p)Na0^w^Y3_D6N z?C|k*P}`ov#AC1{9#CB&Oh+(VI}au2MN>m8t1hQ3)!va3?gEkW$X?rXn4oM``9`C3 zzW9y;-^v{3DT7m&^3HM^Ece)u0n@dyB&eMhBH?rPc6UQax!`E7%3)?Q&;TjBwG>#m z2Bs={EG57iucxCMdEA!6++F)~7mEiqgecG56340xtbZDXwCoY|CMGw5f6RwWq+=@WEFj>W(hK5uzKS zM148TnKpGweeo&gNazJ1RD-MgTctQ7<5Rg%BU8v|^;$%=6M!Lpfi;`hVS%&@b|@*< zN3nuhw@~)(d~x5BR?k%bz_t&Qwox`!Wh!T{KpC)1e_YkmuLcqS8fPEJM`%VJ(9R%##3D~z0ux}+`|CoS% z3jzB_1nlDk>>m=aZzf>>fPj4y0sBS*_6-E=>j~J`5wNc%U|&PPzM6o26#@H70`?UI z?8^z*ml3cpC178|?*G?&{GQh7mbbNRYJO|;4Nc2Ujg7z4@V$me{eRUj*I!fjlDgY! zAFtg~^UCV~s6JEm*{a=@Z>+r9o2huc=Qr?Ti9g!<{FSKjIH29Gs`8n3*SraXynF0= zk1}AX_M_9sQ|)ZbUxEAxHY1==49A>_5st-WA(_g;r5sJ0kyH6rB-x!AQWc^lXvFAZ zFq#g9ou(||*+4p)Vz$l(KuTnAh6M;mgB!np$JVWb7%R&1Z+vb(V1L=Vb;nj;8shZu zzinkIF#gwMG{*n3kW40nK~xO3pr{)1jY3q) z`ShkI&ww$Z8S>e+>D)0=R)(am%VSFUsom-Z>yDBNBCtzJ3X^h*g;PPe01C{{qoC^Z zn1>#2<&}eQiHjrI+*0&dO2s;Yk<6`mOh!L7peeg&s05&M$4F^eCz67+pe_A=(YG)S z{nSSFYfYJ~3cpL)ScT-m=0YCR$b+4uvfVC=HCHIu-k}|R zK^L11Tc1daE?Abv^Hpe-c9Xg>Ya$*>JHzY3#SQyWTA;;9`a&M_ty65Y4O8f2k(ATr z#P&#~_;}t+tS}1<9*8a3+gSXlR$>LQ#Gy2}C?p)~y7*D0#JRkOmv~-vSK&HQiyx&W z!f583t%q}%g&dkxxdV%DGjF`eqFuDMN97CGHsmmkI9Nz1FQL;IKuv6=;0_LAG>dFN zd`#O3l|xH88vDG*a+o+AEMAq3$4WDDJ}t{&DR%*va)MLF^jH!M-h*lMx^W1^`lxK# zT1)Oc7CxvR-cz(j>5YU0BqhZ9D>sU5%{`2a`qTrViWOOGz5>zc3|Lp$#o`K)vKb7; z7TG4E7tbrH+!8X{pzcE8Z5;bgy9^u;r5tRlFzyI^ zxpT)(s%{I!aoI0C1a2;70ut=_?3A@%6gD}li4F6Je0CHc64ZXbZ}&J&(uCkQcTNVS$<5|SFrQ{^&W`- zce>?6E$z*3YHn=0(D=p12O2)!u)Y3|>#wfcQ2PfpFRz}fdVf`2?K#_dD3fwX^3fK;*^S=h!iFzWSWL(*XDU1>_PQK6TEC8w{fI!y5s%T&Pf82GGa&0 ziKC-KhYyQRtKFLCDY1{JpA4p*>jcaQ1`#)sp->3^AB69Z#{$vO zMc!GB^FbkXk-fhvz9gk>j;PEXd7cXUY<7d{Y9RdO3#^6x+g`D~*c*?6O&Dy$-1L0J zm!&mW%`m!#`JnM%^fvSBQtWTtsG*(9Kq5Lhlf9cJfR_(FVhtj9RDSM0B2b3E^N@b0#S6TOybUkfd z{${N7M)hr`vH6H3>{TuNF0Eh*#nXIxCK^ee;rg&g^Xrk-7WG_5h0XX_Q_7x6 z*$E1`MqHb}2^kD)n^Zf)Xp9A9FxM~^WrZ2DCL$q+D|-o`l$$xR!dB%*DzoAE{1VF} z5QYCaiw@<8Vb-NS`r!KGqu?wIm) zuE}33I+3#VJ}BJcQ?bbGQrSI(99W)Mb^aP8)~#KsI_@kXl8ln=4d?zxHtPWjLhc2o^Nf)S+p0Xi6QLREH+ip%1A;=hdNcb!bc- zI;ReeszcAJLmyO!M%exTwVtCa{{IurUv2to)B46>!}IIkU-z2YT+R1t&Q<@idZOxs zRU0dx=l#0(NX1(!)&aQWA8l8jr&aIOlrL_WMKQCM12rR8IwmI^QS{spQsu@p`&K#? zJ`|6QE<(UqFdAT5Lby4b4<}Mf5H~Uzk1jxoq3{sg11=>aVA>T8Plhp6DX9N>0`wvE zKn)P9Wq&*g(eJPhiLu$Cg+L_ARNr=0jT|SfjHxZ%lozSW)vx1+S)BRscmOn%5Ur0@ zn_Yx4eLqB@VG7h@IV-#&rHb0;+C0xNzC&F{2r4G?WDTi6g?xvB`XW{x-T7ZSWm%4JoBD#V5FqZ?;RTL=ouaEXz%Xm+}qySInv#} zXK&A*_KuF>j-I`J1EYKQ4D(3xSLAt;@LlRg;@m0#I^JA7HXN7_%tWGaz3sfikfEfc z3s)=G=XpZ#QEf9ph-ksYIGLB~lfg6Lxq!oF$I8ozRN&T<=Sjf{R)f|Ong2^!S{9H3 zqs@7q51gWqj-CrFC1GYb1m;bN2;4|brf0$8bu7k;#=+_s59MEwGBswC3wfRsoDc<@ ztDc1(+|J1MNLn_`LxI!b5F47&d@o*$-F!~9PaO=zPN(5@d%?!9(lUoP;Y@I2o~P#? zBXwdn%8e4Z4FO!sLH-!99iTOk% z83yPird;s*7dm^HcL!(VL-s!NJHBD$?@I*|U_Zbmb3>jd^gfckNwuT!k2}+NmlI7X z{BJ`xoKH#NXcKv!HvAFwyLJD)`-n7!MNCj!kO4^Y;Pe1;c zc1pFqOOh$oto9+i;?I%aClYYB5f&TPiBpT@ zw`2XcWdf>AXRLHW0`}TF9{%?0ZdoP3;AIXq-aJnpwR*E2o^f1zXPN2J`eIp$XnlE}U}_a- zJu3nGxNM+ zVk7U`$x0!mQo)Tc9zk02JP{WCtcrVA%Q4j6gT#T>36e4@oa{H}d4{Y`ZBliO5Tqq4Yf!}sutOppTKFeU7JuPIy@Je8bdd)#Z<8d$N6+MNN&mVY+AkA zaaEFF)X$prSQxx!SU!znqHc(?WKBhrT%r|uo`8#xU&UZ)>;&w+(D_tKl5eAML~P3Q zOk6v(BdQWJ3ZD!o79f?Y)334Uv6RO7odZ21BLjPOw(sfR+1uVT+`FfJXr#Zly?UP%-9!!U07nch_N>!*ZM)Ev&*F);kDpH&ZzsDq;*dw5u zo`^-4#$phT;~eDpWEyhEo`?Rvv=W6`rzX!cfo-AaIA_wQPlIwe8d!)s4D2xwjrmMk zzB#}1FR}iYsmkxiX=PtV*#};zukb zEqOso+mzr$juvcrdN=2JUNk}vbfKqq{UP{S!DR_%Hs$x= z5E;(yQtg3!p(~i#i#?^w78|#2u0ScVOFT`O6N#atEwHs|9k%3$P)x_QUR5!1y*f*y zIUa!6Y9S_{BBG|3Bn?nWyS-)oqo(to%&n>nc-~`zzObf9idr^-Hafw_a#H z+}afN_*%nT8=l#4tl^IO-_(D;{!R6Z^#|+Q>V97LiMm(S&DV|8U0?g7+K<$}xb{r# z(`&D&`EJd7Yo1&4Kuu3gUG>+i-&vijzPEaNwWsP!RgYI)@V?9&_1@*Zy5a{FAE^cJWDgyRO0`>|5wv~WwAz+&c z*d_wDk$`O=VDBMdrwG_%1neXMdz64ZLcks-U?&LJLj>$N0eg^uJwU+TO~8&3u=@$v zeFW@Y0(O*u9U)+c3D`XZ><|Ha7XiDQfPDr5yNiH*IsrRKz}`u~4iK>Y1Z*DxyOV(J zC1869*lq&0i-4u<5jzOq-9fxb4 z!KRJi&3~%?Q}wsky{N9b_Cn1!YeuTyQ{7(mhgCOLX1qW4o~ih^ij?PHRv!OvA}I6+3diwK%0WcZv`|^d^TgN$ z8E|z|F^R(O<;rLJ>cu?IbiGME2Ct}PamkhkDn)DFJkM8sgSrJSsP5rz#jg9~ze!6h z5laab_E+S2Hfn-_JyaCJR)w&4%EnOELige6qjzYns+wiE?3|69 zPD3JAFmo;Lz(tRxB(PH0eJb-IR2lD355zM)k%*j*fR~XGn8n_2iXKZ@6ymXKO?jTU zc|hI8#w^EHZ3!0}MoOq4mh1C8O*1(`g&~uXND?d{mWmsR&u=a;DJ!_83&qbR+xmFe zaqap%Ps!Y;b*pw9d!gg;SmbQjF%7vw%5mB*3^jKd+^X|DC32s-Wr4lm$YQYSUm6*faZcjKrzx9r(!D5|i*`=3*40fkD>4dR)&6Cd4d-KZ zPAU=(I42!P;jEE!l3ZjZ9eErsPS&qTJDE9~9m(H=Raz_OBr6+xHz--B74;6IQtbSH zgXbll)`wd@*RsF)k)|&;-PQQ)hOaaX)V~_;>zC>(YCCI=RlmCGD^({e|Gx6D_jBIE z63a_l;AMFaAXIt8!9@=|28VYkN~qWBzUkYG<#2`uJ$#-|PH8I4B53!|}x zqK;txtXi}-oagzTHf7Ya?SY~Y#%6Ih06m8BKw3UqY<+AWm4yH9i=_6aXZ-%7fti^| zYW#@bpTNJ(J=C6pV7!S)APTThJOv4EAP9N*+_6CNtoav^q5lP!*LMP8SM-`A9O3B94QJQ&fn59WEMstp;ULZPThc->0P zZmZF)N>q(CRyzMMMq;>KIam*;Jq)oCz(mu&e%T&L8w?kU#XL`Db-Q{_1IYDS=nnRR zZI7e{cXsf+znk+sp%uYwdm7^9MB_^={}6NON=?m&!0H_nUM>Wp5CYtps7c`kDbEpz z2Z96X`aI8fHKwi$DP68zYNfGKdR&M%Huqa4A7!LV?;tt|Zh>Bj>Js3OS!pPs(Z`0lqrM z*OZBuc&9A;@M0KQx8{?`dPq}_U1IEVhk@|fiCEAKP~}jm$Z=A3Na<<$1X3DRkGCME zVjSa!_}sT+rI1ouvL@e`e+Zd|wV>)kX=!p!#ibG5nN!{@TN79feRE=fpwKJx^H`Nm z^>c@CT4zzx#O}mCJrzHf(lSmz+U@x`(wI_L_gmyrTq3xcu*g1kVk&Qxr|Qkekm?ro z`!(L;?#*j|CN19Riefv%&i~hW9`dw4)bj5wlg+PcZfZ(3KDTjQgI@pT`mVa=+K<*Y z);zEJr`5;72B5hzZS-dqICHjJRbGe;q_8%F<(RE(uxqo(NK=x{CYsW_mLbLZ} zDNHJ$ODhGe{-Dki4-IK?)#~%%U|b>`4W9;;PGX6r-L}_Xj*|*tGCrF+7f7(cR*_&L zo`io|{@OMiTk1is!?K;nCbV3_Y72)yljA^tn&C^RA44)1Jmqr(07Y`fHaftsJwNq7l zN6Nim)Nzf@QyUGd?~Yx{o;-5U#dEa;P|D0)AaBrllB0dfiljiB zRCGdCctK8;hkLSq9C_cR^CU=f>eGt?4I?{dbP3|(+D8fXZE1}P5sS?G$8e=-?QSlezWX~@wb z-O^wwRf~a8yM6^yJgGig!u}u$N%;~6Ct&Bs!%kK4B`IZdR;t%q#loX(Yo#Pv1FF#5-`^v4F^Ijo(embI5@du6!>)O4ag^; zZgd1~ni@V6iH4x>vs(+6ywXT*2byO1C7xJfu^Aj3)!&oyHV5;KdOgzKrygu#T7+ab z+n9$Zhy0F3Ta1!WDLJ!|AJOZO+&1++2FCCjiyaOmAm_4k$LM${C16UYQLh!9Oj%)u zWrzkfCFE#8cT8D2m;L`u|NnOq{3hN(z`mV;eH#J$Rs!~q3D~y~uzy6rK2E^?Ap!el z0(ORgy&MmM$HjOu#Dn+)Lc6_*fPEtY`vwB`^#tte2-w#Wu&*ItUroTiihzA30s9I9 z_T>cZ%Lv$)60k2JV1J*0P7TWw+^J!Cf;%-VPjIJ(_!6mk8KJ0`?pMyFkFE3D^_?n^uP*Ctza)>>L3b zC1B4Iun!Wj5d!uM0ehN&oh4wy1Z;?a4YK?Ht3CI5S~s*@+x%G5e>XKZ-q-N*+K<=n ztm&$LMfFuxFREH!`AYBKcsnaz?D+)%mH%ir=sZ2m7WM2QrhdMwqsUs){!FUaxa*E- z$Hf4CtDyMWf-1-xbe?EtCFHtGki%yLa)>V`#}me^h+MB+a^371g&e~dljBKYRzj|) zgyirUfgIwUQK_GMQ_*-iX#B0LY5`FrCDRH1RjV^Lm28A?hR^sr`+WdM1IyM(vo?td5V;6#9A}y4F#DSi%YEw52a1w>2)882!?+RRVRDmFKCZa(yfPmBcI4Hbg~db77U?L&e1JO%S>JFx zm2&VW{INFtGYy{a-0w|%da&@U@HZI(eZnknpx7+`MlV6cjxtx%h$|!{Kc;w2ru!$V0k1)qvaPccmO|dVYf9t!Y=YG zPp4vF?#j|vPQ?=3m<%nqEeLZwK@!hEH1aS$7ZW|)Vp)(pE$<}U%tj$uYuFWIe9f>% zw!RN53GY5^`LKMqAXk`fEx()Gg)y0v`B*HN2s77)K-4)j4ntPsLW>y9Yx%ap)6$jT z)()>hWhh}x!LOu6d=|VmH9n6+Y?po;cIhpdM%6BD;ZU@I+n*_PWj=Y}YnFik5s!|=X5)!DY%7&`=;hy%R@%IqoYQYb%A=VHRhh#$ zf-Ju(2{B3`rPS8S*p#QfcvRnr^(AaJn3yB6G-SFMO(dMjNE{EPwKBI@+B&@r84z-f z?@dP``N(V-QvU^wxdTJzI2IE*PRfhD!UkWaTHk=Qj%VgnI|8JTiJuFHOlC*JET>V3 z4Q$iH$H7qP6)9O`u(h@M=0h`<@#tHei(3B)S!k{QEEuC$e+7RQVWMJu7iXbU`YkAk z6B*^8D$ZINdwq%|+}}|V#kojqE@Z73RM+}XsHe4p?EHU~=T)B8(=8urxuy9z&7P(} z!^!&1b+4%X$Lc?=u7tRM$Gso*c2z6^=o0_YPUt)>$nlJ_RoGtev>%IsOJ2mVfH6Cy zEakn@D+;2wp6|r+3?qQe;Ue@;(kghZSLZ232>B5qQ&Tz`8V@AS4ukP+AQA&p^FsB8 zl44b%+DS@4QbLBk9t4ZH3&$uSsGp@Q zn6nFE;-rjhC@G~vNVMJhZsfF2Q+C)8dt6(aO7`X@p;C56_iJl|t~wS=!geo;ZDQtv zHV`=Vh4p7(6?SJvRo4J3cT;u5a=X~&Duqd@vuyy&S`CgBdt!m5fZq=`jgWT={=&#d zo&Fbt3i}3N!M$vK`YzFblw(3!YhZY2l&+^0C9S4{X9;VX+->^Pk@1n`PSvInUB*~g z3e!gEE>;3Bt%cExtjEE^Z-PjXIh$pXDm5cpV9<*lDz-u?*2&nY16Q^cFoolibC>Tn zzAOd9Nih&(lUYHE=2P=8ZEbr4XCbF!I2MKwlwr5ygavCzB@jFdhfLlk-1^Z_Oj^Lx z`=NMnn&e=%uVB*?c+;i|r$ijW1NtELle6lcupl_Gc){87cqDa3{L8+SNjeSjWoZvW z^0oS%NPa-wqtsTu3P%%Dl1ipaA3!P-S>RQ1yU9%Do$zQONZdpFCiol#+>F_ zm^tS-!cJNEh|j>8-1Q4W1L}~AA-Ll291AB4mmBtd?oE0h_JVP3lWH$8^;LFVo1`z4 zLrZ&vm}PcSXBil)xL}}?QbNidQ<_Sv-pj`eC6t0=36#)*F^928m8P^_??Fo2 zw0)|LXO;u&qx>q8Ka>_;e2dFpaNhTA*1M5kue!^gvGq537LjyAlxGU64#O4A-1;&{ z3x3~xjoyVsH>T|Te}%{IX&r7k*R;^+Z}@oKS8Cr}yRPPe z>gQMeb5*4B8{Z)6s`Br&W88V`UL1XJfV-N~IE!83@XkWP3TgP$+Lo zg;xHY!4h3VjITqZ$CxS@P9e5HyuM$^_*;+flB30&d8wMciDaTfvG0pa~?Sqaz*XMR|S0j@n@`)dAbU06-$Gf|DP z7(_(00{Gf2o?6P8J{Fk^Po@HM^HPMd{@EnNZY72T!86vq4Qs+uCEzkx3~>D!SCeM_ z2oCez>M=dU=MP4Li+BlAy0wd8(q>0OHTq#B)U6)b8#)3AkjH`s{W1#-ZSQz404WJm z)4ilmAd%bE6Mw*gpI?X+4|dxlY2l{IYO{VwNa2X;M8vuVuc)*^iU3j~Dq{ni>ySQ< zM7L$OsS+(o((zDA5O8b@Y|LJk5sSwK_BfpY7v?=nBJSIuxpjuVGFTASps{m=pRqq{!@6HH=AoiTfS4aag7hMCd@|l zF_hPCeNwg8IfNkVWKx)doWv*-dK=zFE=tK`)v(>e?mY0e*t~ADh!0d&35Y-d=286U zvIxg~_Ad*>5MWyyyUk^{3~6v1pPL8u(&0cd*=d2g0=g`K!nYjq!trYXf=Ji|QouWx zL-UF87w3O*$X=!I=k2X+P;GB0$eiX%EOt_uw7tzGFLSNF4_Sq?6{@TXiPc4Cfw2XC z?$ITatE^*E-js4Tgo{@M=E1?KIEB-sNyp&l#0dH(&ZZQ|KBDhM$wYL*e1;C~g=!il zV@Vjmx)2V`anUUFSBmc{Nay@8XkgiJGnY)f8xb*WbkY8?z&S>jjYaG4?C|5e$RNfgqRkq83kU3e zeH1&uq;^hqXqZ}e=LNet-#J=c;RS`J_PO1t+v+l)k6>L!HRWTjNv$wGBs+#uNCoy{ z7~1YCtmN7G{~8wm?^MfYS`IY-e)APgFKzry!;9g1*bsFFq7)Cd9i_TNBZOM)+(=A2S_Dq4MIB~PrEYq7r0c$~+GO_-~zG8NN z!&<|t0YFiRkeqxXv%JpF;OrY#32E2qJWt%1`bNN{Z?%q;G;V3ERD#%e-8xSmcOt8- zONE729>7IHQSBWmRYRJ_)raLwW0C&!CA&q^_Ub&@T~brt%JZ`V&oLMYGUI=yhGLQ& z3WXxfM<5Wz^?Ga;W{qS70?@jhBuO8T3e?;VYR}Mln!K~>L8*C7_6HK771u)fWrZ3H z>pYp>K&Do8{t^3srUsNchqz;;db=B<M;9SBSL!NMu&$`TfqSo1(JAG~AY0W5Kz2 z9Y_`u;>%L^vl2bNs5>tM$ONFd*i7;SG2}7Yi25H#88J)@b z#igQq4K=a4^i$`j;c~?wU_rC3mW+($4eU|Z={yoM6LFY*aH>qa_VdcU6dmtR1w+}VT18KR1dALI7N&R-H=VTQHfRbTx$t7HG(PJqK zqxM>t&XeZ_)T5zJvtpcWg6cq_3xLMwHbHjjsJ|zrJuy4Wy3?aNPmf1%roh5SqESA2 zotdIpjS3H?#TVMHS)amneY1M_YJ&mOg}4X?if2!xWgF4-@12W6c2IQt0wYx)*xcg) z+n^sqLgSk9b&k=54y}-R^KBL|L@5V5Ax@PcKbgB?9T|;es7j|kWw60rYD!2SyX`vU^@`vmOw2-trnV82VieuselHUaxB0`{8(>^BJ5e&F%l^JgvRWXPc@T?`imO!&UXc zx);_yQS+ZQr>b97wOrX<@deM^3e5kDU&%b6^TfO9obs)Lsr3X^3`20l%^bYRB3@PY8utIl5k2_ zP3JkOPpRjm9*GCj7?6({D=GIj)wiToLb_XYo|pQhrhNOZvi=t}fZ|J~$*$Aq@P>^L zKMica%!GKy;(Sg|r$OF>%iz&yAkTfSDJQ7s>tgo74j{|%mJDuS2x8HpDEpn=F^LBK^#Svx`^^wKe1MYo&T@$e8ki8 zs^&vr_y14ze_QuN-DvH-H6N1cQ|JwKn|?r}-BC$cXDR{K$RytKLYMdLGpsP*$A9Dp{s%#&nxYs$fKtUM0J zPnRYt08(Zp9CZw%7O-ORIm%?AHE{%VFY`2-yS0GoTxR_gTE!VoN^)u2U>8{xq`h;Q zC*KUJ=cKUFJ{<$|y734oX=10xzypkBM=*UD9Qy~ti_)qUY@0SL*N7d3vMEt90TCIK z+ZL6jYe!2tnwy@Rm#dND0d32Q`UDEsnA$^(eTkk?3|1jnbuk1DYLn?8%jR8r{JDV3 z6Kr0tM1q9Sn$|`JBl}>OpPS{9vw+GITEFZ?LSrjy(!GI5bRs6k%TbtUOZ2&7tdw41 zR9w4Uf&7NmEm*ArV+P_&Vy3(|=?HUC0;s?&vg|=-?HPh+Sz%o&4tZgv!=6exD1^Se zCz4DDqHU9@bSM({`@1?i`~3b<&~GFlR&p}z_a6%f=Gs`~4+yvku~t%%V4LAVVf?&z z5%z36jP?cnF|6wr^_m#BZT z^*(c>egS3CogG}sl2mq~6o56Y>-Z$@l;)LEH9lzEmJ_ z+UO~V^z$g4U{+ZRYHoJefel0NqT_#gWi8=FsWgp)%aix=?QZ>Hl<0IeuG-(2l{@NT zi)2{(R#Wx0r?501(3en}gzI7@6=+GpuH*|(T^Y0U|Mi}Op4MY6?`!F4-qMt7{Ay!O z!-e{v*B`2TZ(Vb3w&oi(`>S7GeRb8&%B1(x-oq82^!xx`aQUNMzbw*+Xq#1gKTjO; zP#R8B;GV*Q&7hi%1)S-!ufnB}Qu&*E1ntx^PxY}o(@WuoQ}3}r@~m-KEp`-P#9U!g zR<<{`x7`CSBcSHr)#K}6|F^wO#Ms&u3#UQ372V#3%9|i4DUZd^hGV8Kzt%e(o#bus2WRs@sA&`@mqA)BQ{RyjZ-|~8_!j8=UWA94<d}lci!3Eh(mPHviwdOB(f|PhbV;Et1qu`hrKJH{NTKjTNoncp zqoo8WycP-+TIl=Ff6l#gw=;8&EGaI}h9=J3@80vB|Lp(ym;I|6P4?rBX-us9`9|MU z(Vf$9ED;KY=cB#dSUY$A7Fs)TAHeZ>l01x5!m(v+kGV~vYg2aRZ$=V*s&G~Ui?2I% zJvH}ZM+ldUn351>wkdxT>(s(wo-JH-<#$EKI*Lmgq7h=yGNjd(zY%G5i3cz?Zll@J z(9FmIz$G&gOT^~05NRv|(F2qOIEAAcB$y(~5G8{gJ^33L$4#Px$w&dF$k}ANg074K zxE#xiUwphbxLoz&aZUa@q`F@`(2I%c0tw#5 zZq_UCGs3u}$^yJ2e=V|_6!$yTG*Hj@ToQj;Kw^!QE z7lSABhYAh8=kN-*qWW0gl5a(_6RR6FQ{hEr0u=I)I0d2=lK^(93Z2sl&80|^=PoKl zqPd2A3z8gJy^>K=rd8E28h~7C8>L=kdS0q!r15iV@_rP>9`Vd9#?Ey-8&fJY5I*Ks zyF6yE&--YDtWNh&)h#EJV4?@Hk1H&n7N7vLyYtP+Y=Z!J7n_Yi z#+HhGhWAEwuJrzY$klqb<$eB7_&vUZ&F^h`wW;6x1C2k>@UUmHeotLz?d>%#*Q+kD zWODeUZpzaX5fTWRAgd8h`d8&U za3ptJ6u#1)NRwnZcz4E;jrIBEAsKSzN0=GKqWxy9f3ZYqPD3nlOcLdw%g$0O*8-hPWBb_51L&HOXk&y$vf$r|n z?m&M>XJ4SFzyH8!_h|c2e{Xw$SF~pLlDjp(2P>b>Js~<=G)n+>ERBM(yk=`el8KPX zkLWw#UY;DDAnUU=lF}+ZusRVDI>{7lskIVuKReSi(A5|2?Q0LTDX>1Kwnp&{XqX{pnG^=I56DPI~M34>uVqGXdfQw8ST=H;x6QOqil}ngssX>B~$0- zAoDb8;Pu5%JG0m)m+E+K?e(=Kh{pollLfKdwbJ2l&+o$ekBe)to$KSQ)vt`@*4s(X zuil#9iBu1YhqiJqo@w~aUA7{WOVoH7aBqGG@|(!HMJMWVcz9#LM7sUAE3B)bxhyNJ zQsczegV>g73j>(n;Bo%8{M}faJ*sdnUZRV}YqSILu!F6r?J<|HW)2!jFM#`P(DY(3 zvqW{6gZb@9a6mksJNXdIY&6jXSp~^pwP?GXF)~!Oxid;Wg$E6AjvJbVBOe6D)am!- z??U=L;{ITa8adcjCT~Klin{iNBTm$3^V^VmUrsozG@-8FSZc|i%>&R8!X>|6hn@13 z%)b1cSj$uDgQCNk?I-9aob)ZS!_sy*+5%y&wa_bkDbRZdTNyZlug!183hWoxR**KZ zeayb1abaAdY(x`YB>vxIP25#?tnSX*Z`ZzD`+RMt_E7DuHQ%Utsr8lC7g{g09&5d` z<=c=Q;Q5wJ%b}KA{onAvx1&EW+uc1E=njXw0t1}`;egWJ8JX=0_eVNABaJfhox$&( zuFwheHm-AtV{5-BfxQwBlEw;@j|W+4@apa6c{A-hB5mw>Py!p0z&;>>eUk+Cv;_8k z3G68e?0pj0X$kB}itX)=wD)#J20(+*3FqV9NPi&Q*)t1T7-hDn73q_8T@u(%2`pXT#OA(siSO=_zy>9-0SWAG z3G6Nj>`n>n4hiht64>n$*t;aK+a$1eN?^B2VDFH?Zjr#YNnkfiVA+@#8ppRud{<_E zxJBZ-H%nk|lEB_5fxSTjd%XnqItlEx64*@=*lQ%PS4&{8lEAh~U|S@xehI8k0^2Ns zZIZxxC9sVW*aiu#M*>?ffvuCk)=FS&B(QFB|9`Ek-PQW$md~~v_5XtJJHBx9pEdon z_tW0(jfIAT^{>_aYn`v=Uu%}#?{~fEYF8WcG}CI2c!u)>;d7XK0&XU<%47nq+RSk7z*S*#5>R8(vXn*F)VH^nMYe^IR_a)`p8pCq}X*(|g;Xeqjt3ZJ|(xI=qAFNO!Ms z_&DLgObA4vW%|kO%in|IJ$^AFIy>upoWzSxx)Oq=PQAPRO>J#=j4g)aS+H&=<~CX7 zj=gPntk>+LSAiqa%Fm7cQ@tg>9|bs|_K6A*JT=cLDJ`%P#$riY&B2{9+`dOwV*G9> zw2+;R$I@qU#<)HIMx-|;5fl$UW87<$S6g$-Qj*R{5vqh?Zd-mIGTbMgUY3@t-vn|7 zG!MmPwx+#pDtZpaX1OC#HbM9~6q+TG;;1rPjRsFT-~BZNz)++?@sdyvhbDja`=Rheurv<()qFEOte91xcg z-4EjUHg8fdHr}<*XFA4|N)E5eE^Ch#RHDS3jw=ILAP&Ao=&1EQ*CaYIxup`*r-UR`c zEK3~OZsPiup|M&_D;#c4_vrKu8!yv_RL$mTZr8&(VfSJEqb8YXzDSl?tqS;ckqXZ0 z*W_vHSP92a=enFcFkv2aTo|{q*jUKwe4eJ2of217ITxol#|emiD#Fk70+;FfbXKhT zwmeN{J1#y4YDRl7%_XxC(~dd9uvOPw>&jSug|pz0kjSu4BGK+VO<+5vPKvHxoWh5| zc`}xP*pS(jW#Sfip&Di5$C0-;Pt)G^iK}Ffg4-K9$)_OPS0WltMUTX0&2n{waJgwa zfK>jZ*X4FkZxMEnn9j`g(}R(@{POQr3srB(PvJ56sCyym3lc}|%y_oZifM5o^|yk?pmo8a zM__IQ9W;?a&@2R#UT7hI6y-aaJ1p8OQ75fUw8P3AxPf8M)I*1u`({-*SGo=Xe%ji| zniXG!)`d$iJ?Nb=wmNdb$K@LlJy16piMgxu6Ikah($^E9l60sX?hLuL*w8+L^)__B zV1=s*(}wnm{1KGN4soAzEQ^Mhg4IegBXGEVc8n z$R3F$l%doa%+)=~<%w0B_XPzr1s;an6Mo^tEFrXAI}j#$H3ew=o-oUkq*Ylzotocig{Hl}v^q|2GAkuRw% zIsaepdf3%^Z_9iApZ5Kc&(nOa=}S#L-nTZo8kWH_e_#EF>YM6PwO^<`So56wU){$5 zd?|m_2l6yo(VpCp=!6dHs}$R)g92|ZX7O*dJ+3I@OS`P!lcJix2=WMKz@G#n7AnEF zq>~BkJX`WKf6=5WtnSp7DpM7+DGY>2c72w~qAHwQeSJr@HBU1V9TyL{G8#*VXCY29 zJ1!hZfkVxC@V&(4E=$rBnJ3ul`06yb=V>M)iEvafrN`!$C&C#xfI*0UXq{LjmSL)L zM^{6UH>y*;Do^te?Gw**M)!J0p!cM;V<=1>k+Wtw@=#n#W#!|hJWWEhUwlJP*&J0e zBd}>gHjXmm!nmx!2|w7;i6i9NJk2&VBu)$5^26D9rYbK!t|BoSK(j4R)ANi=T=7v} z>|Q2~?wce*Da~DDZb-(BgXQuY+_`g4aOa+#J5hGcd75};KwP^$mLTI+lMLJdjKid5 znNplFTuz30TM`)&CM8&JaT=rc#N5O&?$1Q3=)P*nEsNDkKKc!pfORIzqSvb*bHu45mqtZ7 z4dov~YRA=cqP>vyf0A2|#w7mekH}LAdK7QJx5Edj5Z>t2Ny6 zNB+K0u)Ft7r+ zRFFhRLCfkUY`a2qfUum+k%Iu$&`ps5qjqg<1t6CcS<=aSV2C=L2rq|Wf!8g0NGV8q zs6Z3GO{p=_CWBh zaS6v`vuEL>b4#gUI*B6Qnx}c*#>6d248VH?4aAsu z(nLlR7HT5LF_><%8KSn~%Fz+Yr5RpWAfiMe?#F^TbEOAH)o;WBDeStQKtOHCCpm*85QAO*HrDbr0> zR9Vz7v2worB5kyba6S;*cR5v7Tr3*$@{);u{0!u?tP=|>NqO?H&*+tqTzP0g8O@ET z6Mi_KLBd@*;mru6p$#-{cQyjJ^fssqM`2dbd#!p+K20kv9+K2jX>Q|al_mggrL{IO zv$`dpLRRCdu-`VhNPy^+OtFa?b*fq;!^EN;sEp-u)h0m_|Lk`;slfeF}1ok5m*k6&r{;~x2mn5(smcag^1olG`*tbYvuf&7In0}sh zjt40ccggcXiFW&d1ojssus<(>eZK_u1qtl?B(U$5z`jQU`)&#B&q-i^Rs#Do64>V@ zus}#jJ|=;^Ac1{U0{e&rc3A?uB!N9IfnAiqW+kv032a&do07mjEP-8+z$PWI2?^}H z1U4>#JxA{UuXFv8tM%blSIa*CFZ)}44>kWrb4ydi`(AHtW3=HD4L;9QeP3Ov_D^f4 z-Tw{H%k@ugPk|;S@4BdnYAt8b&Y8yfq4)L{^@;<4t5ebJ`r6uvQB*iZ5>Bw_L&rKC*rt`5Ug;n4) z)T55kIhsWEl(XzAAO(a-^6%jLtL#Hv4f1sHboo_?8Pab-P4t!|^l|D7p1B zU%Qwdapk5d^wgdLO~f8ih5c(FKv8DoEI5-faS|I?d!KYLIF@*^I`JI^nyOtQWih)y zcjh~xWWtc-J8YJw&?{BR=58#|obBTmh24IcIu{~)3}+M3xDsWyX=#x9f@RvNjOEfJ zYIpeB8F0>N!Izolxj-DtIFLI@(51ozz%_%Qoi>=MhN0n>_qGoB6Ncu=PaV851sfRL| zRBRTM`Q~0I{91L=n+r7MyhKzet#mehEi=hh;mSi-r+7<&=9`ze0%w+RHw4P(1dr}`_*O96PHFMYAlHiR%bpo7?+fQ&xEl^mU1>x z@M658+k}(x9!*YVoT4SsU%B-3O-6H}5oNYdy!kj5^sm z{7lPj{&)F3zIgLQ({tXhdX>h%Z1~%TfE(6HRs)FfM33U)Y}VP zDBr{4Rv=T^g@qJkT?H!-dbS2z{ZnTZ2!t9TX3gfFSq03Mw(ggma}_#~;bY>SIzw?t zajZnC6^L#t2oA?n%k#4k)SbBl8cju#@u)SC_-enxty6FzIy=}FoX3Ag<8k;qxC+2O z&&Lw;QTR78NP>SYq+;;TrFj4hw&58eTIfI-By+-(7?=GeR-X4dzt&8s2Tm%7HA%G z3Ey^hkT;ZQrec52WuYy#slralScITzgZ6h+!Li?~7OGxTpozyj!~?)!p=TgQgMM-_ z*WLb{OM^k%4Bx^Yk}S{!;)6Ni{K@7)z!_v55SJge@8HalWH?Hwjwis-5fzIt4nYfP z*~6si90Sizh2!VOz}J-mjwvbKnUB86>WxE!jn{?(O-U}XPiCEr4N4LTJ#x<66ix_k zWwnlYp+K{X?+|yYV)b#$s26;9fu;!GFYcL&e$}KP;%uz#o9)|lE{w~H z=oF!Ip35W`LLq#eg`%X<-bj&pr2asGCjEXuJU}~*=7`_Lu7+Qw^}qn1abRoILyc8SNR zAtiwZgakaai^KA;8V}@fN8xtlFd(k_oFV0;wQEB%YuR_H&KNEux>v=J0_5Y`x5=3X zS@sleLzWVE9&ojcX8tT96q%XW9Uz@Af zRb2mZxb2^)r$pH}cOD1)8S{<9tqeM682Z>`2G8()^4o4u}TXAMEHI zz_x5I&|FR!WJ`*Iwoq20V!>3RL|5-y3p6uQAMtvXq5~&JautZ1qOMMJCt`vzL%3vY zO9_o5OvH7eKr@1uI_=pU`IP`?ui0T zPqZVqOR_$WY4}(*HZ&2R9$OWM)A0h$M-<4xrbw!Ra2mHy-K0Ve5EQ)5Lhn;;8u;WA<`|pp+J)uZTq2zT|1^cz1@-a-mb_%pk3*NEcd;U z{y@01XBP6^E3^Gwv)w&&kucGBfcZ)qf}*oc6kD)agyJ-$jC+7&l7n1wdlE^|Ho(@4 zG9kZY6Y21r5-9%w5r`lWTh#DNB6%K^SbIDA+BQC1%qjHBQ29-hAv4#Xvfl&FsZJ!3hOk zNyD%%2LytHS13ecgh2o?Jj>`GN@c-+PsyxNyylY%n0a7tfgCa!m{1~Z7~n1)OKU%e zLMNceHrTFU617BZK06P|lwf~G6x~tsFdby9Am)lr6lO+<*0vXvx#izTTR=@oYZ*kD zh4c*|3^>M@kx>OA(apyakZLLxDGN;#NhGa9$)stHtO2v*C>ZU8LJ*KI91n#~LWEt2 zx4{fz;HfFdTToj~_1m^Ix!BR_A=E{iq}BaFN+ViS~ETMSH@5ZbgCFqq~0~Fc6JK10B(5 zckkTXK;K-)0Djk0Kl2w0?FE_yY}*e#=-T%G*NlV*O2Z^%_^W+BDi4f3tDKJv!%&}( zM#N`FVsTt`o5PjBZqT>fG#Cbr*alRG_` zM9G*sxx9e6bV0KLc70LY+U_rO-r4rK_TG;Ez-)K-T%bD~?g|Wa4uk_r zcV}d_E8HLH?2K5?_Ot||0@n(#BA9gbtiDVIjjKv{b~cuoI35I3Qm}?*NX_sS5cqZ2 z!f4w`SZ#VB?Hmav-PZOPyZ^u0^)**(sO8sNdi+1OFa4G64J^zO4A;h&LqB4r*1v2*j8bpj?N&d2;0sbpY>-%cu=(b%1u$FPF;f z19@_h59|+L-t6hlJzb{;^W7Q2ZWuf3~dz)%7SdN~JnTiD~v zg3=3wW+J8nYu`+oNU-Xl`IF%EK%UqM)VN5nB5TiCl@RU^&&Tx|Kb9v~^6>R@_OGwS zGVD-cQ~9%bauE;Z_t?u{RqcqXA_)5d$SQmxCA>vkvwjAE@aT&G$(@d)L~?K#lc zVW+XG%EC(rmh@^qo+o$R@cDWB=hvy0guwke0rlEExlV@R1F@MmNY19c!3a$u%l6h~ zUiEo$nGBKvo8s4lmp2>SF)L~+%)RYUvm#t2%&6BHVXvp)g4=YBaB~R{_K{);mqrrA_oF4u}o;X^AT#_42 zNblNP^2Bi&WCFIB8`!lc=;7bcpV==#uxWyOgOjm&rQECA^284qNP>3tbtO46bvB$@ zaN-DE%5}TzU9Q&SEuZv%&wtc+q4`72?xv-tYrLQL{*-slyQA?h8r8<}Mt8$gp3izl z>wmYtz3yk~uCAT0`BcpT_eb0TczNyrsMlaJVtqn*N4fn5k>pPZst>c= z!pQUDq_yT8^`-bkG96zwo=vo=l*HsHPomA3Zx;A8Y&0JxBr}~BOb!clHgN3G*_*o< zAKLJ-M+xa;uQ7j+c5Cj9dylPeh9z1?Aj*yReH%~`lj(lsb+8f9{eI)APC550nFIp zmI#ay(0HaNzh6Q)VC2Bw>(9Rt-(&s4Q8*{GJD`(U$VCzh$J4=dJWP5oH3-gJn&STAwFYVHf;Q`TdYqKPA7UM zzqSM6*%a6sQOhI!ji6Bn5FC0W3yU~K2HA@sO-$~luNz16{j@ggd9W=L6cW8~Egah? zkSDe;(3#f#mdMDHDY-GJyJ5XK4pTTNCb6A@MEecC%+Ms~U|Q0f;GTRhCA>}-i>vAV z6?i)ey(!;A>#**FqQdq=m*}oMu?c`K06whiF+^7*QRB`7@8t9jK+gX+xxVOXy|3jn zaR2`i|FrKjzO&7*HJ6(Ht?4Q6SG<#rKiyalc>sU5{;TzEbr044Qtj578TW_amCOE* zdK5Ey!)&>pd-V;TUr7FMeSTTY9z{^U%>K4p>$#6Ot#|dw`0-8xW<+@BtJKdIJ!VyF8pm)6qPM+NV;yQ z1GT)lZ0lgs!0HQX0CRY6#GEJ9gKRCJ6AogYZy-FeK3#rQBh;Gk zCd->?`uTbL=hvy0gn-HN<|Hy;mNy$AXVcz*a}@$g#VINoYI(Eay!0)=U3u`NCp#`` zd9&t3Do(jZ6C1;{Yy4TCdi`*UZ*yIAwRW~V<^Qh#NBs}_@9_P-?}NSveD%$rX@08N z+jP?VDer;Ck2G#;c&F!^o+I^tSl?gwOLe!@K3wx!%`x|%xEEZn!3S3VXBLAZxSt)Ue^a%2Pw3jtYoQ4Qozh&87y3WL8U=Qlq>zXX>y? zs??MV%qXu=LmQIX;A}W6Mx&+Rrow?46!aP!L4)02a2CHO3N9)aYJ;6>V@Hqa3~K+_{8pa4t|j)COnGWv0&rHa;91oJT30 z4IFz_Y;YbyLd+m`{p6#MfFKi$KK2^(%Ty-R24~GF=p{4n9*Yu+YJl0?*pXkNT&NAs znsdRj=~dtw+Tfh0O-OAm)`zn$M9p1}3T!ODh_)Kk2IuXLwi;bCT6lM;_n#~8; zs0e&Vx53Had(;M}+IvPD9G#V;4Ne-rN^NjNzDjLyOy9KF;H2=2F|@&{_C=cw&chPI zG1}lP;CrlJI5rN~1}CW%Nv=K|U**`~Bxq-(HaMo^4ZUTa7^`u?tZ!1;G9FU%m!!8$?B7YlR9;+ZE(o>|2o%ixLTK6UTb-?{||lt=)1l7 zVACHqe!lT&!@E3x?YX*sxbA~>-r7{nU)FTGPXP4t_@iD|AWAm(^oR->xWpoG(Io>q z6fr~69Wu#$YKh8S0cefJa9=o{#kde!L`5}JAnG~y^ceAU6(h#f##Uw!jXHCd28bZB zG)csVN=Pm>5@jiP0wQcd5UAk6Smsc67UByryTMQ>g@2oWIFQjS2+L{1v_&U`p_DM_ z#hnGB{ButqS78S&RzC=_9?O7f;xNRIGDcgc;hpWZtd8f_waoL{0#OFKr-#Hlh$ufk zPJq{@0?`dZ{~!VP1?8v5D8ySw?6HJ{gXAh8x!kZ>+X}~#);<*!6RW3Xj}blNK#8EZ zbaXrmpRqs&C~~~IK>Tmq)B9Dps1)N!hqC_3vi!{BiVNei)W`eb0`bOiPcN&dy`>qCk9k+|!S$r`M!9)YAPD>%;#@ z^$K+qh-Z*{8ngPzbedH*iNI^sNp}^9r;vL(tnQavb9nK^ZRk@u?8ZYUf^+8A?R zOxDwBFiX|D2Pgn-;n|%KRjK^U6NP(`O2;QbX(2|1Ev}GghONYwZGrtcm&Twi9Bg?_ zO-Ij#LY)wXsk^-kA~%w#B!+7mkU$WA!w2{e>LjuTA7r`$hr%|Z2o~!IlRd0;d9Wq@ z@ka{d*xuV!;r1prQ+i@K^Pn(2;B`Ve1SXa|msH4df$)s~g zWM?Rs-KA~$uv&);#IwsiJxCn$FR5B)@tU`>dfmBIx%3?@R_AnqIET5X2Z-DFYN~Sp zVrbeoUFOi)cJnJwTp*Bx8pcl#ahJ!kBDb9TWS;*36{hmX6R-z{{3a}pKD81Ixwyj`DE6w!U(1RAz zYp~{NE2(Dium+#3u#D0zm)Xx~{Yqpjs>uT>Z*KUpxj_l&T zl=Ahhf5@!w3~AT8h4hOIiH^NL0FfLP7VbEOZ&zYvJvY!3jwTWAYQgd(6x_-wUngkc+Tzn zYgOWCEKM?RK(OsZ6jYx27IPzOt);Hq*!>f9Cb)-znj3=LtY6EHq>|}0RCN6Z%H(W1 z8HcM}W-j zW(z0TvZz54UA4-oMJ2LTULM!n>&>DG3fSGa;A(xP^@Y|8t;bsLZ25M}%Pr5hWLgfj z-0J^^|0Vyk{F(@y4(9* z?`OU5_AYskc-tDk)%dB#=itLv{#=p36$xCCz!eExk-!xR{C_WjU3Kp1n$sd#eQO&f zuniJej|8?}0$V46t(CymNMPL(SeH1q=6e#@|CYf1mjw2^64>uZVE|@W64-y0zY}64<{Y_Ww7zzV2$hs%5L+*Zl3~ z$)?XX?ejkCy{hrY8@D(7N<+WrW1b<1`hTGA<+?Z3zQ4Ak<~=nxyH$AQ`|gi=bs>o+ z7hS~rUd$Q=6w*Xf%Pg;^GRtv`&4mMiYjnYs{JM%14O6Zw5MLiDKZdDuu?2clgjz0C za-Bq54U55I1t6ECZr9vUAl^alX$f0SOL-tQt7nB1qB@nv0`U(bRD{il@FrnVK>;zj zTZH3;;8K}`xXKD?uWW&M|G1|&s}OBetPi1;pxs(W|Cw8;o}e7cRRe{$V8N%=LD7O| zj)AUvE}5D?70aB348bO&M%|LZY(pgW4wo{`Doq5HEX2V1%{_e^*cge)X_BQ`Hxtr+ z!4F7jAajKI0RS z!p|2-a7Op^R&lvwo^;|1m9p5_8Xjmp*SQ7ng?Sd zbBmiEaZB&%=p;oyT$sgywMBejWit!ejC}^8MqHS8m}^40gtOj4AxsA|xG0M?vNrXY zE2{m&dkgiGe$@M3r>l8VuBd7%(OM%z@_*^2cVV{v>U-11M|%W8wo zwyi({3%aML#GNB`s}^c!f}5s8;qB%?KUjFY znJ`wpDnvjM>jV%Vpe$L(32Z3Mto_&w2kwoLvyQ{>(!Ry5p02-9Z!eIrcd#c_cZt@o zO645KBkSI_shrD@EFyIB*j*rj@Z8f6tacbep>lnOwVCrvl^ByQle@7%BIUWK$1e&8 z$zjrgrI*Q;^@TJZOw0nUjODVk?eSM{Rt~{}L)!oJ%^qkEHoCHYlK&eT9trRDehqJMias-kM zCeq4KB%&;Ue}PrQSp_V>&{rU#0>O)1Tt%cc04sblfp<1$p*dr!^NANo^gy_g$clF3 zQ6(N;o&rsznSlN?w@fmpEETd?`)%SnS5lOw+BFwxe8MeN?;DGS3>LjrTZ2vqu%y z-9SteGFsE&Ib}GWjGVJDu{{=G5i2~5EDq+zL}gNTlGM7xloC!w&XSM{7Dg4JTy~F+ zfbugI4QCXs0HOd*KQ{R2p;#hAia7u(d=i5MezL5ox;7FXod};NFOnOI$8hg8U0A@% zcIAYFo@orYRdfJsc*U;R|I4T{u3)c7;EDvUNZ^VDu1MgD1Xd#f3ERXkNMQd`0{eLh z?5h&kzmULwP6GSq64+NHu>VT}`)3l^Kb63KRs#Dc64*bMz?b6!AD6)Xjs*5&64>9Cz`iJf{VfUXZ%SZ) zLjwCz3GA;+V1G>l`>PVzk4RvDMFRWF64+mozy4c`}x{8LFT`>`ybsiuVXd<^^W2lsF4{^ zh1E|Yq34}3T)hk$QlRx-D3nk#5ik)5FD!Hf+e0DL8#NWTAj>V{H=*UwdS+c|`FAcG zlA0yNXLF(0hGce#+v<`i^W}oggv`$>lOn=cE^fx+w~0sS)o!irrozT2+@j0Yq{-s# zs3gBd+<-NejAkP?tug+{Ezn>XeW7?8)>gtUTT=+0jAg8DCZ-Qzw+Sbf z&27wn6f5x-$r6XM;FgfGD1OA+e{u;3hJjZ)&_9M4M7|p?U(t#f--o%sbp4d*{rIr^l9*NH#+Pl34^|d{nh;wWW9+7CtDR*n_o3 zWg{&Ph)am{*KS;WT8q~rBMJL#c02+1CAu)2_^_9epO!KvK}PgBqj{V__pFzOm^d<^DIm`Bx)_> zHGv!WjAe$mJmj)Cd17c}Y;bgJc>3TVvFMmQF*bDUnBlJ-GuWq8cd-=-2E^|}D__i7 zpK>W4o$lyuN7JB%VheJ(N!(rKXp)p;Za4ZHx4e$N_KrdL2RZ_!i+)`Gwh21|v3ea* z7L~ZUT;mgN>2y-Lz39W5N?2(ffeYC*xqj6x%b+had$Z1&b~BYKU@p5(nDz#+!`@zO zUQ31@Gacd#0nBCC0d{1R;pSo!V<_z1Q%Ni^5M&s(S76v4q+Vv~?jlK;?w&p^ZXd}u z8kTl88BcdwWhwR!moPESqc*3zi;Zi}Hy)Sgi|+{Vtu2yN?Zl^9*l%;DY}Ymp=6K3t zOgV3EcP9jw3mGfq{C^`j*tMoxUTwM8{~`Zo-w!l@pt+&xjQ5Yd+Zx}|*xZove8sc3 z{tw{v|08wR)IM7Cbd3*Q_#g5o*I3+3M`BL+WXN3phoVtPYL`rewQNCC$!sd3SQfh~ zU~c2c#=A5bKhgw385$CxY#^x_N}|up0k*e0kc@*3AL$F{ivuVM3IA!>JhML8VL9Cx zpKvRw9URn$i~V#kh;BLS!N^2g=LcDFAo1WhkoAav@#F! zwoVikfYq5T6uWRMxLJ5BNY51Dq-O3&`p?`lgHf6}M%`BIL}5s{x{fCz@oZEfVqn^j z^mw8i^PK!{rX%nIm#99uG#5LN=zzHKre=#wv#xY(7&eR3Hq1CbUGc0U@No~@5T!56Ce0&`w5LP5nhVTXXjZrF?SChid$7U zS0bb4;&x;tv36LR*pZJjhRbGA>!vpr??O8J#qR(tMU_)onI*)9aY<=jRv>y5Ra0>r z6P0j~u9+#g|H)WKxS5zUhRaHm)D6WunWThcy;(})Ns0^Oaw;o*P30#rD6$xC%5|FS>{E!6pgA&*eNML_K z0{in4*!N3dUy#7QPXha13G90$uiM?~=g&s08+%64-Z0V1Gmc`@<60w@YB3k-+|t1oj6dusjA6?60f0dJ1?rAJQ7Zv$%fBZu6?v$xoV7& zt*A-4xp)*cDdXxk(E^#iQ!9bq+3T?y&8nx$ST4C>Bu&`mt}jj?yUB~fK|>s)rcRv= zr&!b|i}JQAoXgR6-Mx-sR*}D!C>14hQ}GB&=J>^1MBB|dbZRxxSOc>f@vnz$?7>!T z!cixShfz3>sSk(>hsFtp_-rY1)l7_1(!#c`}uL>0b`p%Pwo(+Is-op@jI5E56^5xLeVmtRS8 zP7NUTW_9WpiU*PUo{Pd^_h}kodcENgir4m-OJYr@Od5uGnD}dzEw@<4b90s7tgOVXJF`S8n@5Z$BUzGf z0VhRbUt(E71zz9^MW5bUi=#+%pSW{@W-?`^XKo%Isyd~siz7&Bzr-CAv(&Oua+a7~ zuvJMtRvbo7d&DEh*-A0X$M%@Z0Xx(+#UUmX;edy_k&jg>W+Ge|mypq@>>gw_D1N64 z>qtBniIs0oVW$fI7G_Qy5SJ0TBd0DFnqS2o#r??axVZD`jP)`X4E;4CP9&@2xqLO2 zJBn{)EQJ#zv8feigS19Y=k3I@I-bk2ELH4+dy4yz>?!e0Ls>-S8);#wR(M5}aFLP_~ zI@o-Z^ZyO5`&_Lm*#95!|GfWtpVIu75dZ%O5A+)E%zDNFjZYA__2TqnWDb^10O$P=m zI0Kc4hZmC;qjvK%Zuu8#3n^F_!PaPUZWJ8% zCg49nGLA8etAM$((6`Rl6={~Q9(9lCL_x{~t1%@?t)WQzGRqd#3BjcT&fkNlVhQrE zBeB_3IJL|UA2bh`#NmVP9B39N)(rYVWGZr2nGaid3cSFjtxNEhB25%FE^b-tP%beL z73FBaR;PDc@j=-h=s<5Iybzv^#lhdo+SXOTRSD*{7HP(?k&D9FR_HmsY}#H$x!?%o z65HTuLZ3*2O#4t~YtlUIDAL4cr_>(dfr^tTNj5nV25a~z@ybabfT-A6$n2vHV)M*O z)$vtc;fhWh6SWkAQ8-Wstv$&aP^C335H6WDZAXK;=tMFdUv^X*0e4fA?JLrB zW<9E~Ya^)~3Hbtw66*Srp0qfqJ0Z9-m?7WFW|X5zm|tUQ60d;lMPS8VP*Ry?NO+h| z#uuT)s4@h8l*{QD#3zX>QwrwT1P3{qcx*^KK>_H%4<*x(stN0m8lM|l49DX3&>nmo zw=!Dqg3T>U5hi|MA0ffu6<8EvbKnTC?JvmY5wfokM-jW61>WFN#TBffcpuKZd&G_D zZM#DA=(IiN5@0P1vo%r)6sM8OfcTXL%G?X=osw^3?Jwo4z#zAw09rq8yGt<%nk-u6;C4JeKI>)8uDU(KA8|(u8b%y z>GJOS#^Mxm8k4&0#4sF$llWG|iWK11Qapj&BtqX97jDCj!rbFHAOS|(ipP8(vC zo9_00*ZW!TyS+=^Bi^>gZ#90Z@wvu@#v2>H-th5;cQl-BctgWgp09d7>Uo>zAy2ob zvHpwoAFe%A|789B^}Fj`b+6RDPcv7-C6tX+Lvpeug$c+(0ZZf+S*%d zzESg1>#^25-7nU}Ywq#+TE6X$x?gMlvOn&>$A7KwHQ$TAXM9m#zq{YFS+})GtY3&r4tzC9vltuv;Xs za}wCN1oj~b>{$uy842wD64;0Yc2)u#mcUL(U>}sgh9s~LNMPS2fjupOotD6!l)z3& zU{6S3k4s>WNnj@>utz1ZMpb1a?>gJ0yX< zM*_QF0{cb@?0pj0eG=F=NMHvguzMx20}|MN32dJPwpRk%BZ2Lfz;;PsJ0-9k64-VL z>>dehPy!o}!0wj7Zk52^A%UHjz(W36_d_*e`|7O3cQX>$v;;OKfqhs4yC8v0N?;Qb z*j*CXof6m`64<*Xu-hfDcS&HkNnr1kz`jKSt4Ls@64)6D?3*R9r>On^$6T$Cw)}C+ z4*y$y|KvN-e4^=H-YMC5>!Q^#jlx2CSvCl%f+)JgsV+~%fo2$e0n!C657|tLdw(^X@228apMAW!H|NP zT$wm&cr^M9!sUkA*Ty2v^V_FxTAh$s%_*S+k6oFY}V6F?pRm{`L_!X`o_1Wxrk!E;aFCQf% z8;LquJ#CDisa~m`ViMbF?R=Ds@lsNrIySY1Wep z_|%Xz6?URdh^l0DBNM(v-NiFZqOGE2HI|x@xp^M5KIM|6#%^Rpkn{h|u1~mHqYwdL z!v6>Uy}qCIwKNx+{Y~#^@_L`~HZ{&PyxQRRMCw0Ve{C3a-6GGc--AhefA4LwU5VHS0;L+sRlG6;_3F39^wH zgxZ5sB{~Wt=gtz%=yX~* zG@>(eLuaY_X4RTNQik9>GcQJ=*Oq98sSfd+Xw2K37)!IAxOsZAKj+fYPu1H?G>g=< zxPsmw7ki1!DP+`P?0l!xLnEuWCDExD1?kj%!$8m@trZ*d@)u?3LOa00x%B^UDQ6Q3_& zqMFT~nOdHoO~xUC8w$=w$pOM;qtCN7#V3%=9`WfO4(4;QGuagGc8uT!Oh#jAP);n{8;Q<)4lph&cJ0~5E@a91|0dUht95Hj-2Wc`PT%`| zo11^Cd2`eA-v96_jh}10ui>K*1K{EM&)0pkZmISkYWLQ>%l&ot-SEn){;1t0n%iee zT#ckvk5+al&2)f6smR$_1}0zIu~*;)u6&qc)A(`h+V_+K*oO1!gy_~#fQA+uBfbni zZ|2@6`!=^m<(YJQiDm~ntO~ojvRzCHR?zdw)Hz-F6}(UM`)(_k%aF;OeG|pKxuoR_ z3J8lkm4xhz>14{-c0*}Rjuz=w26L$zW|=^VrVM&OJV7c<9O)QjThurKJ0~7ys)8?Z zDeG&5w?xwiNi0|b^c*2vGV|$JoHX!a>26eW?GRRT88-RTDNFWZ^D}PY*t4P~n$ahg zyGgWX&1ffIh}RYc4ao^58cV^%1Ig<$N@^bd3v^F#?xX91x%K4U3P0SbrS#WG+rBgZ*iLY4+}##EY!(lpH4<0C3DVEa z(~15ww@__5py%lz`NR=$y&swdS9@^94`!CAbN$xRX5@5SJn{-}8Y~B5F_W#1=hi}N z$qS|1k>ytLbIlZ~Cz!d}6e5NP+;VqLC!!cjFN(J!7fQFSws_moTq_3T{#CwzIu&gDGo?P?}Gmn!=TYCf%5n7;Xn|G)14|N9bt z6Tc^ceMtiQ8xmLu(wsbEzH`4I z@!g-7z|#CvVjNzO`0o28ur&9R7zdjBNeoMKKZ#*!?k6!U&HW^XrMaKPur&9R7?$RK z62sDbPGVS^&q)kR^EruOX+9@0?2k(Hop(xL-ywme`JBY~(tJ*0*tbh?ct!&ILlW2@ zl)%z_PGWVV`JBYC@0Q@OB7rSQU}^3rF}?+f@8%`2PfK8*lE6MGfxRe!%}HQY3G7=X zuun)}AD6&BCV{;mfqhg0`-lW~z5LUEOM=6%OZfkPQsTS6D}nul1oq<+*x!-BeoO-U z+Y;CpC9um9*vlct+4oyKh>uFh_g5sazbt|Mpak{<64>{U`~PcP&$(K2Eq~K;#Q&VX z#&^2;$D4k_JJ`x{ud>&%GN!8~jK0m1t%Z89NS5F+{_MQay}Ci$CLt z;p&l4=}#0vPfeC+K9r8qc2PAP373l>;Dvd$J?HWWr9z1|{8RoLewy5ff%yP&Vond1 zpB+mn3*nRksX`ECeu6)ZErR*H;dkr(ki*xs(6z=#?6t$nG7aBs_#)gCl32oqU%=u4 z95|U3%ETy95*waQC%}l6gyEk~q?9voZ9%P*3<&K`0o=90!6NnuS}!r1Gq}bwAZg6q zDY%-AL*Q`55u<%gvoSWl50`vpHJ;(SWx0aEg5h_a`w3^}<@LIXhKi6H&j4(~yEC}vGT@1&WP7m;>a`#kD4_myb!oE^Dl(JpP^V2fI8ekRbB zsjDTvW~hihY7D=jJ1GK971&dv33VP6zgnZc6aVsu8+g9(Htul^Rd(%O}l zI$xp*b;feyo^ecy@{3oDea`5?M$(F_ubM^MY6& za%-huN2{Akdr^Zg5lH+%HV%0}<`l@p7t!VpG{CbgCVU*17kPyYzFd820BN1d&5I5` z$mWtfuS9ibClune7$pN+_uH{B6nceARvT<>ZNY`;tYJI`m*(Tf|6EALjQ?4-Mlt>h zUMkE+Mf)z!LJyYuQ4ptd!uepWwbIOvWhCMJj)*AE#}e~VW5uAl#{YzR8Y`IVDD`0l zr!I~Qw{$uUwl`qwl8l4JSQ9yg%z^&S&mX{BtlJm60z3VkM zSW0BwVmAqR^VlHvibqSmD75{#hc8)ZX2S$a*=5;s1+=kJ!0Hc{da(LKYErcNY`?-R zso6ecc{rT5Sds8?Tmeia=Q8JEJ81|lWB6;^)aYSwb~VOS+E(gD`hDUCv%2LdpSdGM zj&xi&1;lVb01xtEvO>q;HScSPJ%!=db{<3}8FI#mF2ndv*On@a6S z?4Y=FjYD~GY$Rz*Y{qgGp;gH}TH1r$wu{@!vGc1_&NR~_ZrR|$2`4|&$H@8rI=9=^ z^4*rG|BLAKI(#)j?N%oO-;YpG|-w1)A#%@P?! zjA{#F*lVo??GyTX1&`U}p^+gC_+(9qCQcc8`Z3YP$EKyx8_2u@@o@rj(nz+o(G$Au zV+L^v$&`J-DkY=Bi891qhc}X zw-;ozb~l!S3JIHBG{M=wa}qN@u@j|P3v)|}CaalHw~F=xUE5^VlyUk(H8i(Juvv!Y zsF9duV63992Dcp?QqGvlR9Z`uxLQhuHz?=HCZ{Ie^a5kJJX%e-%9L&`9YspJ)Ptgp zrsZC)dN5To-vJLyq9>on@}=g2+0&CQ_$n316UUc1u!li za9m~k1+%0r54p_slWD3nhTewTgtI}z?TIcKbK%A(+>&XnM^{yABE6vq@nA6*jI}O5 zgPC^o|v*dEpV zVePY|kC5|!t4neDU-jSR+t>U^)7P4&z0WoNPGe0&Z+%bQEwxX%-wBT|?N4rZi6*!| zcv0Acf=y;*f1OQ5Fz^#^<5m$W&;)eSqB|NojcF2UYr~VEMj}1D%wp*oL|h@Ys|`g1 zK5LiF+GmLulIc8fFLd z3MZlvNQ#2Vy#+aKLxi!6@eEZK^nK*mhu5(BJ(l5XU^S2e-+q`Av4=ZB%AX>apA+HK zxhyzjqxr$Ha5~*#_?jc2(*P)c%OX~6DgzKi0+Wy72Ug;dSY(ORS#Q=h?UUAj<3xQ; zX_mIPc%ow{NMD0#WPiA&Bw_x|iv}0QZEt*XefzGwu z2x%H)^X41>o~n3Nqb#I{4ZHgsTQYwve4fxHW6}8gS~x9MaGcZn4-VKvr5Wr1Q|fuq zp#f7E2px{-)|+d6GPAV0zzYIR9dx>?Hq~XI^k%Hfn0iLKF6HsT*%9fLa6k&MXTuPr zR({_^{&eX~#q{RX?MWp@UqX-4fSg|KoG(fg;)CbRJ< zS^Y-fswx~ym_#>}W>#UuWY9eSO1#LesD9t(FFk<72gSX{HH8uxAl$%C91xd~7HtON z+Pw)0NyN1?lx4anFpG_c;!-L{1>0Xbjhqgu!sZQ5!-3OfD?+*Kw6TQ?=y)QX2}3Xr zGHD%2(#W{x4yu&y$13d4jfqYj#{Q_U6(^EOOY|!)j7yzN|0FL6m>~=&!pq@M2qN-~ zf(9ZKBIM&%YlT4plMY}(13w2#r&#|HPAp`sfwufruBQ>jt)}Aws;6f_I}EZyJ$Yy8 zK4g46-yzyGtjlPNZ+XV8+{G&3xwRM4PC4k?ev=NNIR7C&L?~vmsYuJgLOWbMs;;+g+R|{m%)bi z)k<&(AnkyHG0EcJYai8$!wqVEiDtBuNIp0Qk-nl)C2C@7ZWl)gxBf_Eu0-?Jof9|h zBxh)dRAdaU=3vFonUo}7=91T>+16G;!J~mlO>@x_O^0{6knr{LRk zgR2+9+()dbKPw@*veo9F#S%@Xw^clc1}P7AEr%6l!93Iq54h#(sv6Z@qRHy^i02w* z1;A9awCrGSXM4Mq$;lpcrl3+|yzCKa27x!g=rYj7T#OI+(}Id5qmcehGTSZ84= zj2*bO&8yBdO%z>bx-xHasaHRqknBwmcI)WaNirM4F2IxoHfU!G(fdhzT@06K!nMHD z!j^YrItLY6g*DXplv^onCU0wFo73`{!7#bAXHNcsLK`EZebGP6!~lx|Y|8atjZ2lj zsK)+2{4Uh{~;PhjE)733*C1ab1^qR%z%6AixT@6%GI{34H=xF44qv+r?96 zz=})nlh}zW5zD(;)$Y1UUl}Y5Yf!VdgrBiSdrEV-287iT=}{k8=5-zBjBCV~A| z3G6o|u-}lt{$B~~KS^N!Q3CsQ3G6>eVEE*sn-n|5^h3 zel{ z_Rl1+e=33ftOWK?B(Q%hf&GjG_GJm|A4y>UPy+jD3GAmNu2A4p&?hZyJIXYn9C9&!14+!9!qIJW*f z64?Kg!2S!l|G&odL04*j+^+q{d7f7f`s=VaYK*6pu-q2@a^N8HN* zdcFUshgN8Q=F{RPQ&i7~HU`X|gl4Nbm`Y|BIJy+Ecer{LtI>!}HG{gK$rYNQ`9W3K zDM`Oeg$o{%IgX?%5~vMa8Dj*zDsKtb$H^uhtF&u{CVPHRJlV4;0jqG8MBn083F+=w zp$VTKP=zn-E%{r;8bI)+%49dK(8SOZA~&J~(9 zdO|#U1|gzFOQ_y^tD(6REu)aMcrLO+GfVe9DIA82r65P?ai$AL2$xs+&WyH*Z17H| zP&X*j%U`sNOyjK>d(G(*PP^37?t(4%?}i&PuDyzmA!5FGV1?$9lgI6nzj@FxSiafYNvyunI zt+&``Dz~Ek^wL`pN0Ff}tbEc>OjYr&(A4IG;?A(~vvmLm#H|?0b=L~bY2KmE zh>j4vQ6@#Rs?o)$JqHH*tw<^n#Xfo z+&{tCiB4om^xuru*=&I*D`UC*L_DGHi>0&Sc-vGa8;vDHq0aV>zEEh4q(6ta&uNGX zdr}F{w-Nty@V^2Zx=bw6rU^~^ITRulXoDKyaL6^T&~%_vIbkPSV-0C3S|OTHEN+bg zFL31|;2^dZV!=iF<`tS_wCm!a=nQA98eJ_d=XwXgy4H1K3isj$N4rpn3P|fViyb|| z_E5-3%zzFWe-CEDsWVznIl6KkPMnd8X;JCuJ3KO1qXQsXPgPeqNW93ErnU;SwHfv< zjz6wW2Vm1E8j7*$2efjve`9~Ucja1?=*-2Ws6>fjJMLa=GNeI3IQv53*S?RX`OwNH zlxFrxVZSpW6=p@juI3Bh*D}6FR>ng5@`^HE%@@9pW&Gxqt5L@3Cu>D#1rg#! z1K-CIKDKfdN?5s=6_qeqBDnhUilUWy^ZQt)SFg09Oh+!>Bq~$mnF?+zKGEdslo&>;YAHGYT$@83?#9cMC1}5|?aQyMcX=#pX2V)ktl~`Tqu2 z!PUB{W!e9E{~_P|e4ge=)BC;u?ColNwBb)0dOW{a|L(f))t#tSYyQ0^>Hf643*c-1 zN8P?cQ#4GA-yIu|3!niZPOQZ3aXc}VU06ubaB=1XyT}_{dFpqb*R0Tt4g1A)y{3W} zNZ>7Y*Ij|15ymB@D{|C3R)W|qC&k@JjjT=*7nf7vRDxs?97=I8{U}6a#ddaLMR*VCH%cP^T9S5;zWjEuoNpyBG7BiKdpAV-h=^7}2%cI@&PK1h{su+=*O|%lOWguT&tD714*6*ZOqj zDbN|u-5u22gcEx31iZgvM9b zqzA&W_+)~O7hHcU@UmgK^va{+`juOd-^l9LP!c5#?sae~y+3V>dR<;7EI}GQde_UY*2R`TYZ>&v&EMeL(LC4mv8EC4 zi;Z7s+~4p%&(}Pz`mwsFYyYP9hMM#4mjQg4{!uTi&^#l@bHXdzsbuQh9Hdl66^R~+ zSzF$SI>FrStK+$is|V=};?^GbRY5FwciVjse+kTk_H_r_$^Y$cV|fPlC6p|fea3gU zp*>mz%y&;F&nbz0T^+M?UHv`1;b>QHx6;*vOXT*IF*fA)i_YTC_0ftEsk?^d*4vTl ztt&J+%0clMQ_fVGS`K8o_*6`DF_BDadz_r}PDbWXR=3FTn!&S);nf}SPQqx2aq_SkNTJ~|y7#XVC zULZ<7MM^mW`thMzIJQAlGo60l$~`#ndc;-2j2c-QDw8)MRz+R=f+O|WmHkM)FDGmr zN~q(!buyejrv-*K4?sr1-maYu97KG{Amk>xz<9j@TEXwvf0YO3S7Ig4=b==e78i}!1giwipGU;iLw!m zylz~11M(UZ&#X)eJfS?Cg%cQLwI^}t(DE548?!tsA-U|zJIn`H2C2+)!iq>zqTaQ& zMs}8&BaF++^x?Hy?`v1~Vgm3}OHL_B5Wkz_cEf&P?48unm|3t#<_=mz!o|Wib50VX}Xv4|(nr zclNXu?|Ag*p=21gwUORgA!8C&;Y};OScN?~;mxI~)7!T|w#Qu3>%Ty_S9)me!~^J# zleHj2D&g2Nw#VGs=~|dwE8R$81Y$f>q}8_4iL|=J^YI!F=tS26Cdy_RIsmw2CSr-$d=|2EMZj=hNx;<{ zs!xI`a*3hP{jO)FgK=Ed^&`xkv&ppOXlmrh09=mxBH84>$92@*?{dH9e$oAmJ6aR3 zxyR>g{&Mq2nhU;XnnTU)&2>$$HhrM!txYGJ?)HAy`&sY1y-VIB-nPbXHGZn`xyFUY z8ymjf@bQLsG@NaCL&H^`uX;Y}d7I}UPq(MB{)_b=u02%$Wc~g1yX#$buhhLzccJcB z<7n$EHP6=FS^MqUmusJ|&9uJIdZFgp+FNVBQS(yE%Pr6Qul2p?i?$r{^|#*X?)Sac zl4-fs{|*03{%8Gh|2-|=ZawDqxxOr_g1}e^(;}H2o8BdX{ZR>QNjx5d=ld;A$-NSF zTd&wI!x9`OB(O&$u!kkEeG=G%64(P0*f9z0s04OI0=r)V`$h@uJ_+m_B(Q@L*u4_i z0SRos1h!WK+arPPmcVvNU^^wS9TM1f3G5yTY)}FlkihPi!0wX3?v%jpkigz8fxSlp zyIlf%mjrg31oln|>{bcv9TM0r64*8g>}Cn&_bat^g*En==;8N&Ryr8nR8^z4gY`Kk~njJ_nzPR&i5d#40;vjq0p5T}~P^b^}xUng~&>h27-c6S8(ysb)mo42z&*y|0n zcg=V^JC&K_|rN6s3Tm>m9>1czUiz`jBP`*I0vK?0kn*zTFu+1Bp1Uhhn2 z=d8Cg5a{sswf6xVnf|1=t8wuilCjVG&|{tM0_{$8T%Vq zvqp%Lv`30iMTVJ{RhCv%JTwa}SG#-wQ+;Y8ZO5({#btI=HLR1ND-Z=hw|AhNeekp2 zKLg%uAxLxN^ZS!DT0jv_r>&)=@~_ftrgIr#2U{%-5O^IW;gb9qM9;d+ye=ScL7e8e z<0=1T-{uN-WHA^?fk7=LahfLYq`Kk65l!=3w>m}iff9K%*%yhh;Nm|3Rw5C_Vh3f9 z;d0gJY+gOb=y*jhmRM2fv=ok}l!++uATjq!dkmKjdZP?P!J3eMl8os?tCNJ;L+L(I zW)B1+B-K4=m6PB;G8O_)tnh4DfxtX-^KkV@Y@97qkk~t1=9+pny=(O>;VWVL$)tpd zh#*z!saRB51e*gOZF|j74$bALHue*%X9z=Yx=vK0tW3~wr@(A!!J>z@J}t{2UAuak zQ0NiQB6}Q+)HQFVXvof8$ri#Tqc_>k)d|9;KP?=JgH;)CFV*=NjXG?5zZJw~bSecQ zwWxuZ4`0#~^le-{MHouN0v$_e97$LWV#)$Hp^7DaAs@%(sdl8y-K*n-R>!h%9y(G- zGc&W$Yyey$H+2m&n33RGrT!1*3<$;qv2VtPM=+2H{+DJpXk7ICenOr7%M{JzuGN!7 zPF>5wbJ%zS%vcxM>R~$%*dcC>q_p*$6Ya&o+_))#pC4oug6>T^CD{{gSUo|c)3z*Z ziarhoZ;2!cKE#oY_4%_yG8i)nnHj~R{$}hk>7~{CiA=`DEs}?oS#af1LTn`i<5D_D zs>WvKVO9>!l~)OCM8AJvsC}qyU~s@YG&I@`$F|{4Z*N18b&{XpVpuUEnl476nn6<*|kjtW89k zftFe#@#CEC>g(tUboaD^vIIob+1k_N?d|EA@y_L@<}ZV zo2sgXm6wm+eby=<{R=l$LaiO$L#=~dgWk5zUR2MtcX)e;+grW8qg?~TLxb%d!+q_l zgtn|6BNB>bghQ>1OK1cmJ4P?9RXptVn<|@;o`IgW(Vh-(>uB$=w{x&>&^y@GJ>u;h z>1iEoYaJZw8t!1S!SnxZjuVc?_clCSKUcR>JLmbHXLn6!^;7P5R{c%oXDiQCJl}QP z@lAk~`;*?fN;85U6SoDV2O;%Twg|giG=sOD#7jcC;?p)K{#BYK^vud`(OCrIVK0P( z%4lFF9uBhqU{q}xmdA5x-qfv2xdoZ=Y^D`cqw{HR`HV5!d;^cB;);(#eP$t;mZSgr&=5$Ca3PP`o*w*Q zwZ~+ua@#7+sk&P{Xdn3=+0C0L4E=X*EpBNaA$*Mck~0wgF`NYN6NvEW!%Yj!dC)DO z1FPk__!ofgdDMW?4NdzF{B~a5o=_V#Hfz zAbu$Ywp&SyKLHoUCDwd+E-`~DFVHkxzSqC!rZ%GCjKWIsDT|7K57CsoXf;F@J#R)h z*8!;>Go&vz*R($6*7+9Hk<>7}8YDH`p9zXi>7)*%4|D3LJ-aov(i3s8yy${Ix%x1v z?7_@Fsmk&kzsQ&MhwEBFQkK4YVMkh8ohH?h$d*pNLbqR5b&=^2w<_8uY~$*SNZ~Eg z3ntMI*engI=HO66ZFBRUk%d4c1)B*x^`?|P_cq_$`BrGO3ND&SUFDHhRxeVqh#&8X z;K9j>GmO|1Zj0R1DOyM@WD<+5`dLMVL#Gifn(cPm_~e#XlqvV<3akmhM}9W$i!&Ei zFOVuIz1(b5vE#=HVdv)-4y6M$8BGVft*nMi|~FNiPCna_;Ol z4j((bdAFH4vid?I-ZRU>djO4(op^2LnezB&ok%sxwjww7PdxwM;e3;$=~Cmn8}~H4 zt)aR8a@~7tpRVR&3qQ@O7q>-ulk0|0#P&#jd}x^0!FZ<$UX5#4{F zD;HC(>nB@?=?D6iID~AAEWwRSEV5u-%!Oa$_IGumPq(bnp2n~UGNGB76hG(EC@H6bRhqiwO!|swFT|4v9HB7` zDUC`Hi_>i{$Lyy(o=d&NMxHIyq_H1eT_W=B%LoTwX8Jzb-XsiR@x`t^hD&yxPcH0q z;|q{3>I(*fmq`@C^h2wQr1pn1!V`(9W@RdlkJrD>(3LRhrdqofCt^|3w9TtmN##bw z6}1`vjVqfy{lKtsRhy#$t;Gl&B#ZJAj!?(Z~+;utwjodm^kf zbF|cIlE~ylM%YnT`>07KoT;!3_FaVtw2i?F)7 z8YiqK#r0A4#c9oP7V>S1@H4%@Wx76{l~lcD^$|Kc#f_EJt4-VlrXcDZQ}{CTICHH_ zWBCUpaXLTy0em|;t;cyD7*tK=p}`!Z8~Ag+NJRPzuD2_X#9nS|7r-;zq{U7_e-_^QG3Dj zAdROI#DmPcSo!@buaeN5C4oA8^OY=wdi<@jtp8{js1qh%;_7<83 z$Xpi=h+7X|B1Yuv&e9A_UEc@#&_Duv|ALp|1-8&MBxj78&Dl+-0o}yaOvHmE*yecLF={Y+p{!9 zPKS69O(uJ_PTa;Z0=Sh{+r-RjTbAa>8A}UanBsm3;wi$>2#=#=rK7tR94402ZfPu+ zt2zm$FJ$Y;N_;poAlg&F6(eq%0nN)q(PJ)&8}B8D&HX(ZCoUJ6h#w6TTsd|w47$!*kUsR8d#v&oBNju}l!E*WaA2@K> zci`}W14MRp*$To@!cTD|isM$540yAR!K7uG)9o=_PKJ5JMd(P(Bc`H8=4O--254id zkaE;)@#SgWmUR-EN7Fk*=VTL2rcNlw&Il_{sv_$kq}s#{HBF?-u_4dP(#Tv}eS**k zt_bUe*zF}#hQm$;gX~3vV4e#O9c1%Be=AD*C-EYexNb|#z6Jr1uiz@F-?VB*!kUq> ziXq9$AB8(eK15GfO;3Wj5i_Dwcti}Pf(pAXqc>9q1Un+0iwE@hrZ^|){M0Joh_0>g zb&NYh4(H1&eq@f`SNHaY2uAR;#_xm3eI#yQ#c>+5&-H4I8R)tLBM8>s?}KQ7--LL8FRu^P_d+DV!BNA8^b3^2;TKoGF-~Bxa?EjI#zD)xARtfCyN??CS0{hz% z*rz10za@cviv;#JC9rRnz{YDUER>79U9_&d$$UETzAekniUtupgDc{<#G9V-ncElED6f1op!c*bhly zKPZ9yO9|}L64(z&VE;k_`+f=R`y{aMmB7A70{dy3G62%upgJe zeqI7A6Vv*SB)^mf|e=33f6AA1eOJLuQ_y1cQXB|!9 z#@}shXqc`4aD7GHsoIa!p7ETonXCR{^@RIb{%Tuh*(v0a{X<-LFt3+`?m!^e?@>GsyX+rd)=_S#7 z0+mWgojS239IWNb1F8OgpdnG_L1~gEL<`o=<*<}2^YJR&T9cD-z@mqqS2h-X{PQ(2k^eRsM-wBk@2FNE7ZCUt*Y%imer!`5Cu#G+m?4 z>YZ7dtNW<911WKT#)8m+QQfc?pAWb&E-MU(3@7a?$=JLai#fhP0Bl+h8oxRon*-NQ^OzNUiCZVNoip3AG~4#TvhZTUr)uWN$8l-l zA`Ux*OW>T`j7?_~~9nK?!g(FK-bRQJA^}~|buDnxXyJN%Sk{oUJN!#yrGJB#r7C3BdXRQp8xo9_1kK&>2z0?Ch88Rg}no& zQRf6oYGzqG3NsVSZ-e71aLHg9XzuC~FLLXnO<9MtG(C66vLd`WB1YCUVGcd|ThIB$ z04@>LsIa*i1AYYJ3fN*YF&K;!nW!MJ3o1X!WOgoQ%?4z^tLiNkqS|_rSNS-0kTT67 zSeW((_Q=d+mgf8(SrK-Jo2FrE8J$xxwl>*BjVgr{5F+{TL^QIb_E3#_bMrJvc!5M# zA+a!Y!%pmaCDi!ep6|Gl41@y7fLWUC)L#0PvSc$`vNU`7*s}0ZhPigZMr1G* z4M9kL7I!59QlGa>JEgH)dN;mJO468&`c?_IOIoA|H9iv50d`NOO8Dln7G#<0%C?d- zfKy+#7^wjm%EX^ajPW%*@=UNU{62<-wPPn7ef0Uj>dw-ai4Z+{3R7l1ZEYl{sTlhgY1$a!!Oa;RY)Rt zZ(C1m+adTzyN->5Rxt#M+JpK}aPt;}xHa>!c=BGD(C6lp`ZMyGPW`__6CXW}VPAt=e46pSA86{#sCz&RJ9@HZ1L zr$jiR{tR)sp~z;~$%5u$JRA+rrRIPcT=}5mRtO&^e2f)bpJ_zta(pjb;px9&J3yzy zmNGPR3c}ogDBu*PBSQ*AyPSj4AXPz77rH8vU_yfyUy^{st9yV0>;Jv4&+PYiOSG2kLBKi0pwq@0K z_BdeJGt*ebP}sxR+bF9&^tgwoX?&ty2{GA#DkvO9?H=I${-}}+!hIAd;z1D!O=;~? zd&tZ{lS>(jr@t-+6=J#r52C3^1da#ft8C5~&z@FiA(%1NHVYZQ7s^hM@Abp|zy-HR z0_U*=+Y&?9jVDv{OrUg|6+!`Ef+&;`Tu;J|CPemlN3%5lo;O2MCW>S|wyFYX33#ed z3$P+sOKBm^*=7&9sA2AXu!)9qAVaEKen60~!<4~xEBHI$WN=tPtfo95`u>@BoR$l>u8Tr^Rd6yvH++EX|VlxOlkAfk-5F zRSD715!$^DxJ6Gc&CP%&iHVqWO$xGelwRvsxOMW)hi3YleRJfWppt{X!<+{Hyc&+q zh2Y;9#RUE}9}mMn7v})b-%L7MC`)tU#WKRSNnG|fSb5&-{923El+<%)mgcvU=#A%L zA(&A69wbR6{9qL|jbODmmH~6?p!G($grZ64ylG)w(Wz8oUJ25ER;;(QKIL*SE+0f# zcV%h5w|(hjqMAMw4#y|j^oUEMzj@lI1Hza3o7H0qtqSY1cV=m>wXSrBC_7lG^z^oL zL|QZgb_gz4*e2rV`q{sUl933mK08WIViGaS3{wSNGVLY|4v0$-cAbPzMRtVnk?_E0 zi-4g-^R!$1oXbKz_{X!uWYH84DhN6`RBYSn>e%mP3x&`{L#*z?VQNUBmmrdaW)N(y zd+~EF4F+vCe2cV5EIUYhNamtw=QR%k&LHD}xco@__D`RL1ieUgEDAeYqJe~Q2wF$h z71dzH2|CBXv-5$-l@SQ|%(iz*Tr(V`FS2@*AwkD0p8vNyrX5Yc(6py9-?#%b0RLRy zQ}>42Z`a=IxmNRz>K|2)K_oM|MTH!D0Ver)`j}D&gEa|1RI5p){eG517wn>PaKbhl!$tLT$!%A zjwYZ`3|I(Ti-EOUzvOPdXR)_?zy7^unwGG6l6IQ**0vr$T$3ts*fu2;KZ|1PCmC5F z{f+*jnzhhEWdC)v&~!O6L+eOHS01BgBNkQV;HRbv1GB*2!1TN_<1;)_(Us}@ucK9^ z%duRwK4dkXeq-`S{{oRFYe;jxNbL>jbdi^wPF{ zyw}n06FL(lzg&+RX_c{SACe2o(2Gi>YE%b%`o8OE^9h7uep?U1q~mC;eL_u8g14>E zYpJ^dDXTNeYYmcRkF?qD z&~*$Y4a`8*x*p8dB1^{6cDmbe9RoZA-`j33U%IgM_{WAv{Pgd39g}XgEgSCi&g&Rt z892cacs*pO4I8^n1K!(U8fQZrt3PS|FM1t=D#KpgX27iJNPx~Xv!J6TGmI`Mt-$n# z>lo4a<~LJ`(?K~-7p`MCV-NyFGq$$UnuPFRU`{^|J$@ad5yRIZt(Nuc>vSA4l@B{` z#}&u798KS7dRNn%niiWbHnlZvZv0N;(~Ylfe6(@8u?M08{6oVB8(!a#Zg{Ant)Uw9 z10Sn@bN!?B$LqayKdbwE-8<{Dbr04ZscWqLa_#$Tf4O$C_F}ECw$}3v&qqD4^Ss0p z^c?lHcxr3DRP+9tx71v(nX7q0&CcqdRe!Deoz;cvWcB^kd))u&{*wC-+^=#+-J|a3 zx$COFR`mx}ud2FKb+qd4${$p|zw#}WS1U&<4^%u;@edUrtoYT6M8&C!j*3dxKf6BW zddih|C0xU<1Fk0L_ne=1{+9D)&RJ(4gxvg=K{>JWN$ktpwmEBDPG{3RwR&X#@;D!8 zs5$f`cD?=kDIfrm2;$%y61)tyEO5E zH9McgR#poK{Xi59&Dg&HQ03n7Bt~uCy4C3fc6Ff`c1rqBPnGj@%bkaw#DK{_&V$dP z7%-t4Rw8h>8(%X2m&bW}^TsVtV&LLUn<#t^@(SSp;E`wZwkI)A@Yby!@+B-siPL{N zPggZ=c@jhR7QZ;**>dNT7&dp)Ci>zeT;1aToD)@zhn~d1wPNH>J#WXBCozU>aT%vJ zLm3#)b>l`VhS~58{67fb)P^m)pTrQVyLQpi&z>H_Ln%b%R{!EWRS)DbqG|Dm$DhCD zt`&?jdgq-~Ai+p1p^$%goa4Q>9a_N*i(>r8eOtGzU~WUT7`Pvf;Q!!DyEg7w!EA!N zcF|&h9KE2^{sN#)^}AOv%b%et7LaqivGLFfrrQ&vbn=dkTUIc!ok~e>?~|U*cdlU8 zH?`S7(YAp9bDo4|TfvlRVr87z1!Z9Nvf?sMcs3ti!4zR$FKZlnLyXG2bFukw(4gES z|Lr`1Wn%&@v9j;q31ws2sp7Kl_iS!k!Q4-W4;Ph9T{;bg(;uAoW9g3wmp%rgX$4ak z6_-9%v$>_xDo)*1-)4M-_GOJ zjV&uz;Emn8>7W8#AIn*({|$!Nv7Ottti0H^&|?i-cC3Wq(Y9^0nx~Yj=uO1_uzB~&S$JZY%dN{&H7rXj zXc$*KeYl^$`L31I@W^gia`!eJTA6@{V*K5QK)7g>q86hsOYZHr?O8!%k5bE$`;OY( zD`;s&HAtYkifHzARN?v*CSu(Xv#9&4$<8Vr5j|vV`}|#bs3B zvV`}&#Zx6`S*pOY@kUmxY!@y|!?tC+a9P6pO^Id6g{9-|qgd%q98KsKTU>J|E=%aB zT4q^tVu|QbDpsNcmnHP$EH2T3%MyA_7R#EmEIFzh_pP84p*ml_7<}C(A=(%Cc^Urd zsdD^m@79(Tbm}WT13P}U12$&pYga_i@w3{^J66yEPMzq?3z*|)ZXkosX=Ta$v>V8v zgIF0dKWzmZ`ePYzHcOr3rw4#EIw2L4{%P&zeJkimQ*Nnq{L~Fo47$A(f8-~))S+WZ z`K8YB6O=+5V9QG3$Gf3+=;dIjoz0%Y@#Ae!J9H{2CiY`&5+6KLo5Z~KIDU*|ydq?t z*$-q6l_&Ge-mUvq4jR5_Se6Zcg&y||_M`)VET;Vo%5y(FvdGhBg?2oH&2kU@44yeX z+WhDE_HFLxt?Z**$fManI5H6>Hk5|HdK}-bb8lI}8+4#z`NqFA!8h>s8=9-+H~z%~ z-@v$1#ozeWU2Z)8-{!pFsC!>sPwkB76>vr$tp4@tjqX>tYpa$j|Gn};#Ygsz{uEye!Z{vze`1OpmyRBgBM(n6gY}aog&gI+lU>PhzDr zB^k4zqkTFSUpf`D$%Z>gRCxAKF1s~GU}A?FQmqqN++{nb`ZJquuv%vEa_Y{l3fhd{ zgz7w$#iM|8sxJf9a%*X&QLw5mHZC;RM#ZdSWpumnU}7HpC`nsw$l_rJ+A0l+W7kqS zO+#F&tuzp~dSFqnadKzz(BzzILx23Wa4L3&Hw&AXoKow2&2(F{ZZ`JhhAbY-kjdV) zF+nS?Qi8$fT$wN?M$uGc@i2&lnj{G^cWbm{w2TfD>uc-oBmK56i>F!`l$hIAs*k9C9HppOFr_Hbs4v^IcxrY|^i46^t3eB~#>EORcj|T-UOAa(7O7(_n@nMeh_?h7H9a=9w)s?J1X38)>bR zS=0^SiXhus%;!T}=xk|NL0mQ*5&8YcVzEmR#qS@w3_fM>Z!q%%n+6g&*zfP|L(93& zz8+s&D{b!aEGjf$0AvnI$`h>KxJvNvYYa_Z4#ekgT1lih_=jp@vcBYLbf6)VsrUMo$ZRD|{g+90 z-3!&-+BBQY^()iT4`HAxaY*>7tbe1jlgk+77fps|!%F-XmQ9RzCuYF_HmVGPQ%{NN zGG7UOsI6tQW*m)d6b_{z9zrz9HY0p--$?n|2GeggQ}d5gk82|>_LC3%wjesfx$xXN z$wY<|6BUQjjp>N2YL((4b|aD}HkPXFi-OK71VR8%7nc12>uls1!S=t#X8~cpib3VPBxm(~i(#tbf!qq9Czn{HJblWXiw0w3>O{UvK%h$G5bXx&mn@=1MBnA~FN{9hojO6K{aN&+a88Y&H>4Ob@dhY`E;Rk?kswMIH%5tuM}#x8H9kB#^_tR z?$y4V@$uZc>K){cEV`aJrv}732){ftKR!-?*TyXRy+HrK0BmCYV_Lh}SB=%?6Uf14 zfR;dVxsmbIoJHpv=hTt3`21m0Sg|dS9r=cPK6CEAO z+9!4SnOl?#;|fh1?GSEGuRNP7E%c2S4>7s1OAADU`A7H_BIM zJc}Ms&Z)=JkoZqV#vCgAO@mzvNPnb!h1#;{s^y#_;oxN|w8kb8c&$9?jx73(Ii~{Y zqjIgFmo6uGk@w2euFj%Qn{$d}I1`igR03Qjv~3M2VBwC_+%xPDWvRUBi7YzJff3*b zgpHQj;tGLB*&e|Xys`K>m&Q#{C}0Q$@al$0!+i~R)PJ-7UG*=o57qb9*Vlcu?(KEg>-=@Cb(OVWtbJ?kFVvo^y~pzt z&!;?Z_AGi%dYWs#U-RLb*VoL~4A*R_{!aD#s$W@sx%&Cl8{A)azr&q%KkV*w*HnGE z>i4TwsvfL5ROP7rT;)@h*Ici5MO^o}?r?t7`7Y8x+Snx64*)!Y=s2YC4qHHU>)LE_kT-Ze|Re=LE0y9D-+B(Q%df&Bvs?C(opeMgsd|3G9DKV1Fcm{hT=}{hkE&yAs%cm%#p;1omGgu-}ouep>?jFA~^qNnpPzf&FI*>_16h zzafGBx&-!X64-x~!2W{-_Nx-uuSj73UIP1f64)s`$-AxCnT^Rm%x5Z0{d4I*pEtJKO%wsumtu)64(z) zVE+1U)Y!MfT^K>L|nCSHdu z=9)D@(Z~}QuN+*g=keF_c1sUbhHnKEruY52jvS+*X9~X z$vxuk!sjqtBqk-ocsBzHnmo;1ds~PA8&|HLusJO5KTT3bO_5}ZgAoV;Y|-BqJr-aQ z&eahX$1)?Lt)UyxtKDHz3B-e!@wU#ws3erj?y(^-HVs2kWHoa&%|HHl|6|9)(Iggw z`Lodg7JfQMJhU{sRP81V9-R$b#fvy}^naY(0Z!#=No6}S!bU)4t7rqb^%c7<=b;r# z?-y-Fuu@FM;%XMI$>fqXMu820TQO}qX8u0Zf+1H!NJ&^QOkN4k(~Cc1{z2wf+Q62M zRRYK*soiK+=c)-YiCY{?d2oMX&4q1;C{Lv(=Vnxdqg)X4(glTD?66EW<{8Nj!KI?j z%c)!yp|VSSNgzRNii1gLKXVJ!GO1#QLvOB<6#S5Q*o5iRVB3pHx6g-@m%+o=6mv)O z{4z^L>>Vy;nmiXfb}Uyxmg*gki;lGkmJilUNd1*tq}DW7a~N$GjVFbdOwtA{o1(c` z;}dSt>R4IIVKiS1jU*g1V%V6@)mpS6(`(tXujMdGFqT~>Drk& zHpG2-G>eglQRp7g;?=bPDVS?+d?Hf#)$B`1;d{m9PWC2eNm68U*@g$)qT#|4vnb=v zFpEKxQR>2d4Hww~%z_MQf-M^~(<5%_m^>MZek6O146NPa1B;{*E}ns?;T1{P%8T$b z0?CS@%=zqNbTB_5+Q{nEV-~XdE4PmN{E^6F$Y|K=r=7B8T2?`|P?o}YPjMV0z0`DN z7DG>CydL2Lk7-)9lx=>-tu~o$`ccE-A6N)X2IFBmF7f<-r{h(QrWZGc z8^-J3Q1?vTUA31zPkT1kJY4;bYM1+kRiCLkQTe)xZ&w_5y~S1O%saOMe4YQKojHuM zh(U#f&DBdEr>sx8;?a_9KR%zs=#9>)t>OdfR1C{8w+{V{TOMSkZ|jGDkf|z>+efC2 z7U8Li)$1h0nvR&uH9p~%-iebHs8uk=Bsd3PGH5ZS#Ys3uCGgM`yv)4AM`Q6*3T&C; zO8a!HnMxTjmt8x=Mxr6PcIGhDXCR76@M> z!?3jk!&V<%2h)dgdkMvd(tV=MtT}?2+Ib)`&zc%yS+!ebDfSMRFh&odk-ZM(_S|&7 zk%&BB@{R!Cirj9(w@Z9yISrP3IAp+@46^FRm4&c!)!goO2rd^gnk#e7gvQ~tuv?4H z!Zt8f(PJ(F7W#$oxI4Ft@Q|>0A539llaQ%@v4z=|Sb2O&rd@<*du}J;84x$&wky}7 zF%sr$|6VEHOu9R6T)G%Llq9VcWNXEjV(C+*yZy$c8;RIU$vjkwTZQ*tDc(f72Xfm8 z>+_fmS8PROrL(c3?V$w(T>6z#T-ij~oV$y#9T#7FbhfGwz8Fz^bP0|S-H=Gsm)lA> zUKC$^iaAR30uZXo)&8wgoC)KLxh-|LqNhFSuxKX$LwubzPVBHingu(MVCy4WL5*7| zb9cV6Z*i-qsefSGcPD8QiEUq*%9$%r2FzuMiwK=O4&^ozh8Na43_<+%tzU+z{Y#}7 zW0%Qn$!#Kh$Cic9clz4O#Kop!*bNjZgG*z%?23GB*B&E68e_4H9-7nVuQ*GGuU!IqFHr2eU=I-jJs`tBJSM`Ic%atFm zJX-M^6?eEY&Nn%J0xy>Mlir>iAvHdMxf8`!(P{gU#}x7pnCo2z%&mQ!kA~Xaof{_n zBy>hFp+MF<3(0dao=av~IG3ZQGrE|=OfnE@HZve9M1#`^WH5}RLW)(DrOXCWktE)A zssJvL{uvAqMig#-|KS4%`iZZo;lIgq?E(Jfz=6XDd@1nLqklVqLxBD@5sA{jEF=<% zV314dkmM& zg4#{Dae&IF55Wr=9Z$zTq?#9 zOj>PE4s$PIs|lNDh&Z6zW4N@86NxS@XiLAJ^)1Z%1c4~Tk2O45>A!Q?7=>iR=2{Mu zOW{3-@Vy=Sn(GCdN1pjvX;LVRr5q-(!fQiezfAQAT6}G2e8MeSzvGGJdWlwgoA_l` zJQhk>!|TAt4S(boXt*T3mct}lQg^iKRp_~J(rR*IdL&YOEY~erVGIlwh%TAinEfbL zVwYrz11T_3h+Ecm_M=FNbGc4h;$xz_3fqaA{m3m5Ml;=PJ(|N5W!R*`9hiL^t?|N( zX3?4+l`lNKD~DOoAk>fe5;{#BsM%Hu_TUhsiA4jZW7=+TXwoJhl%1aSCDXc57ru`Hxe8W zmk{<>dMVbF!~AqoceQLqX1gj#3OxhbRkK)ZAzU{7q39xRBD%&U%5F?_o`op~BYs14 z6R=QET4s35LoSPRX9tEx`iDmbr;ZttVi^94`7vN$@tps^=KueIxZgzelmzyi1a?va zdsYH_Mgn_U0y`mrJtcu1m%yHsz}84$pNj`U<6=Au;z3lOkZ8C2C9q=>*y9q|V-na= z3G9djc31*CB!L~2zz#@Y?~}kDmB7A00((RP`+Ny(zXbMP32dJPwpRk%BZ2Lfz;;Ps zJ0-9k64-VLY?}nORRVih0_&5&dL^)jB(Mi1um>ct`z5gVNMQF#V4o*}ZIQs}?X*4HDQU32dVTwm|}0FM+L-z}8A&J$V1W#WC+_y43idMsLHL8|vz>)qS?^;o1+@ z9`gLI=Z>0P)xYU}P1RiGJ1c7{F1Y^KwaxjYvkG2V zL?XYUpN2&>!i8~_B&zQ9@f^*3eOO%cSwzOHLMnR9Z{D0I3O+~yvLt7J2G(kG*eoo_vC0w>@(sw zgVR<$F=zx;B6cLpv&XXhjNGPeddGmNfkKB)eic$}MS zgB>zclcO27Ph^Czoq5%rjHTj1>vB;B{A`lN)f~(5Eq?I>H*?JVsm*eAYJ9@2q`ESu zAIY61%XL@gl4y^eK9#zpB+V^q9#D1&E|qn%Ud8Um>3Zpnxih5FyTz}W)XhgYZmz2S zJGX)*3{U1$Gm&uOGPQ?!N$xaZwO>5fkzTru5eWS@_>|%^E;~kntPz`Y6NJG~dar0_ z7>VN5u(pO_lod2)jfX>)`{EKnE;nsrg{{gdS!P4A`6bLF5P^SOAr9q|xWl&7;PcR%Yy!q)p>a1)z~ zhG&<`?jiWV^2DlgV}w{o`Zm#VX9$s`mTVT14WK-chTL&Nq+i@rS6^->;;x}bvoErgL@=y9m zj;2-XN(*n?(0c@}mJ#Yqto%6gBPcA{+ z2*_26**rta0GtDs5@9gyf^4)32~`5iKTUu(AnvFEzFNm)3GjX=b%>A64lD#9QD~7> z6d%W}j5b^D&9PKv;>YnJj5DV|*7Wc!c`P(>F3YI7B1KZOG9iVMoM` z#Hm&QI^J9?Iuw`>%!DIwytVFOcqlGueQUKPM-zgLq+29}NGzC;lXj?{3|>~|0v4T} zk(U)Iz^ySylY&WD4H`>C|Ch3~3?KnUEjgMGOlCofTn#KGU}iW4>dklEJ+sEzHG*_xvXz0NEPn+4maXe}oi zYuYa({(nL?l#ek@Ymso$6FHhT>~Zns4V22@dj)fiKngvh2+ZAmtzY2^Qk|93XL2OKD->;dYs$Td5IrL9NujE6OJDQyP-Q96^Z!GR#veD1H$1QY$+~~4J5u}R z+KQTIY96Wn?dm=5$EyCbYOM0j70*p_0dc^B9xM%$BA3K1 znDq$NQnTKcJdJxTaaLv7N!ekZZRBk`St%q}DkRo8If69iX&`L*vnpBb4aZP(3$X*O z6~twvpX^)mG(vV;dQx)K`37C7K^(mJm-MWwwu{Td6aUV{f5p7nr@JS`U0I6K8evL(sxilW@?&};L?i=j( z4)%6;c{_)?2E7Bry4?47%xwXk=+D3gI}eLXHpAkX!aV^6zsiq0c(*95@|kOp`@l05)`Nk$h^kFbaH2Ao zgmQV_)KyeFF!=q@;wexpCR3qs3{DbM6UX9g?8rSvJMhT9~i z|73V39*8fI8LTBogP%(rJdFBh)(qMqq^vHQ^8%N)Cc$kv8XbL1JQ9};(Q(tNkX<~SvVpItv%jFmuXE4giGe8wxdB+bT*cVEZM4zfV;8Dp7a0L{QrMb!f)cu z64>96!2Y@f_DvGlH%egtw*>arB(QIgz`kAr`#K5ic?s-u@gS)G|Fa<;#A_wm?KKkE zS4&`jRRa4e3GA;(U|%VL{a+H;UzWhWLIV4832Z?Eo0q`mB(PZt?5YIzmn5*iD1p5$ zfqj_-_N5ZoCnc~e64+%4Y(@f`mcagk1ojCD>`NrDk4s>$Nnjt7z&78?DG6*+0-KP)#wDOsumK6|!xGqO3G9m`uooq;ehKUa3G53cun$RKAJqK+4>ms7&|km1_TOtS zdOqseSM!RRs_JX*ueyh;-d^Rc{H@BnDl)Erb6s}+t262N*4q957xFYm)^2fEd#1WC z@`%!Z=c-r0z;a$qzfhg0X|WE9-#f4p@Mfg=3di!0%YjAGG*DT{)5KU3GN9_FViNlA z<;q8W^3#xm#TQTeY=x^K-OZZX}h5d#+ z%|<0*U=J0Au+@sDq*pz?%)EFgE>rzN?2bImH8mif6m+`CT8Wi!@l@dB1bBJ!G^5f(@nLaCyy=N}_)-|Wj8w-gbH6Ei%w?g+V^7!TY2v0naTgn{98C1EafJQfXK zQ7qGtEu3j#U@*}5H2^;uWRx&HBpav%1Co5tY+r^ zWDDUEQH64Q{&q6Pj)+f(=7RLdBBki)C@v$`m579PXb`ou#5P*$4jdx?Hz#c&xJ zvae{JNlO#cl;6MvC+sWnP*{nChEwry^b$s_rm@^%wloWlhvL%IX6?p&6QR^5zUXU? zlj@+iT-z5v=hA=~vw7(B)S<=R?n8^+B&vJHmv5v(S_U&#v6NJ26|^J(5iz5q1Z`Lg zFCL1^?xtS-X&1CsOOFM5DOkkLXiZ-9(0D}661!37B%__FxqsO@CmG?lMutpO zl#P#gTp0atsPSo1H#^U4&DRsj+^}Q1*-$ThRV-ZUa0uniqo!7x=uSk?K}XltmB{bhCI!- zv`aj+*HA0a@J(j?XsR{bIki{Syc+yj`C z5))R04&X-VTApTZT0`+gXMMGJcpzH*OY+^M_ATNEG_{oCjkNKJD1o#)-$fXB#m{DH zIre%c>r+uCFUfbVRTRbNFqH&85hbvgrx~AiiDxt#Ru)F03q>74`&qQ;^iZDWd)k}X zA-c^2bp_^?E$#+}2i)>;vGw6T3bMcYj)jxQQ!{@5*}%+9I5~dC?~jwe%{}5xLNK0q zI1m9?D3*i-H-J)tN_auh{$fxRraSU9Db#N9P%4aVkqq_U*R>Mlu=G%#W|G>SIUy>2 zc7!YPKhl3+SK1}?hU)U5M%Ox-ru@S&T)4YC}9&sCtEEJ1*n#^jScuYgc^{RIVbHS!Z+=AO$Y2M$KJWXgNVYWRD z@p2-uC5%6eE?vo~`4CvWlZ2NGfe3^EvnFa1c!A4v7~+ADfwU!0^IeUJ>q1JGYnEDR zESDY?;?_LPY;|Hy+;FW!gJ0Mcabjv1$k~Cp?1efehu*wgy9S5;loy zijtP(j%DFog6f0AL_1A5x99I6oF5WT%4#41zB=mHgo&4Ur!0GAQ6a3G^7{zu z0r?nyLqPb-L^P-csIsV3)ZK6~j?0cvdS3o{gwlw3yahHDlQFJ}&we{r3dyC#Yw~0H z7Q$3X2Spc3Lz7b~HjQY{T;|QPHG$R8H^&AD5qd@bZc>#t@pA`rTE{49YcfB@ra}8k;d;ePBy&0p}sy@m#y1a`%=$ed)jMWR{eqMI(M$>yH)4G2B4uLex-uIcp@N?}q7#DkZMx9kEha0T?3<>k?MY>t+A?@d*y z8N4+tCHjKo=JF6~_8;#jqwBFejs1Hx1F{!WTU$P=3(ee@xiGGPZmkqZ_51TQ@bEx7 zCR%+u9MnsMv&tn<>BN^X?Y6o8d>mH*ld;+4)j%AMYzDQv_Sfdg;S+GYGhQCG`^L$vu{*agO(;J)(`wHV$^4;igC2 zvSD)xy@B+x&OD87JSiS#LY-geEHaQ_F+v7lRSG9Tn^bf{7I=YAm4q<B-xvAD7A1`?_qEz&Iw=2A5n2zm3vgyIG9*%I~# z2?)v`S2+PYJ051Lf-i9?YqOFkKg1TEO%fx&Sf*xrwl(0AnM;Ht*uV?LJ;B#Y9w7b8z7VYAQG)((RvFJaX@HsmEqs z?DrF6Fu&iFvRzkc<7qKSHnpUlcjWIQ^^~x9gg8{%Vty(%6bU2}@ z>yuD@{wU!kVONLAEUw03u0N{;LKsg4k0lmP_80*^9r+g!J^^u~BWTm)(B*I>#8y8{ zUZIAz2Te09NwN46#%8c^6n~G)TN})G<&O~B$Haq8OtX;eS{u{wy2!hh0R z^E5o|e(~s`+WOqyT69}te#WiXefLaTHU{KdddJ^Srl75P8fbPc%eC+js}HY3%Sk`k|WO~$Pv7i+*qE5eLa#9j%#*0uFS(>9un7) zA;igxz(a8f!#u3@SX59Y`r#LC@T!Mg`UL(fd?|V|9KABGBm;1<6u>_ElKjJLrm7R& z4UihZ$(GF(=B3f{kjq?~D&zTSvJq+#4vz)fWRCodPq-!1TGJ4z2gR)hNX1Zk13@%n zv8lEGkXttS2$>ox^E5+go45@Lc^S4In81Wf!t`8##~pc^l~iJvM0lt>LK-F~!R2F% zE6*$A$kSw{-ep)k#B`Bo!RG_^B)q<1dCKMBkNcy|CqEa@Zld72tkVy8IG1|_>upo^4c5x2*12sG$Cr+FYOa; z6AV#AKEP>};^$l*s%V;<^}mr%(Dq2S&j4-QJdHBZI!2?E2&x8cqpb!p+{2YpGA&M>gUN2JCdi_bN6TDmOoB+ zHt>U_M*>}$P9EenLq)VvVfc+q7X)akz~Ma2sC!Y|hL!eG5KJ;2i;P8QWAQoCRwD7x z%D=^}w01U`%hQayBbf>DX#}(Uhy=uh5ywSxsjbHBR?r}=m#HXA7Ba5M#xE=S^V zYcNvFLvF3KEmnGCo@Tj~$Tc>aia_wuSp`D>2i3WQxXxJ?6F!d13tz#(m#NCrjI-x6 zbD|vqLdeFhDj|*8Sp{Pnhj3tP7Csh+La%Vis)Mb$**71WF^osw;#|b|pY!ps@jrEC zl<`-vXJINT^}A#ix|pZ=Zy(ACJ5^b0rSA1*Bw_!Kh$yaxqjMo+#h|*z|AcxPEBIXe zKP~>>_a)*c{9g&|e@I}zCxQL01oq!0u>U53{Z|R>cOf&Hok_A3(Dzn8%NodovF64){}(U zzbk?L9SQ7jOJJXp!2TBA|KIL-y`$+;<9ix+Hmo){>I1bGJS{b^t^T{JKd!2PxPRwe zA8@rhmjHB&|D+$v)3hMxGs0G3qu^;j76q5QuxbILDWrHQ?}c6wP`w!McbR$~G+?O1 zWubo(M#T%{N2Do5B=RFdrlwRRG#-dw83NC1071fl) z4SAa6qhH*^or*&V0bip9q?sfK#3iKK>p`#xn#e;UsGp%M(Anx?;<$`VC@v*EB-+t@ zg4sX`J8ZB!E>oLwE;C9(x$M;L*W3(Ubu5}lqB#?`$;lXXLo|0#B_AhMIGPy|)d3s1 zYo;TZ+r=zbE{sbZuK_S?H8@rbMgvO$zaMNGA@3CY1<6MYt{BAsqF>oTfhS)Vpacd-(9ZY}hF zX7@Knq{y7jprkG}BO74Qi!CNLdU?jlSgiv!w$U;Ab*c51&u)Af3Wl5FKokd#E=BFB z_Lt`7(ZChR>8L~%2tldXT_+l_s#F5OD{#q7+k{#_s)k7h@bqyg9-JmA81EHudIE3S zq<%|GZZG=sG15=2hwI& zKqwK5Ea(w_^+D9!EF@EP@X`n}Iw^w`1*bIjrBiV0&mqJR>YQdfUSvWkSe8Hz9T>y0tVpXya++!1~BH zMWzqAg%?|K(-*AvzAgDngkP7q%bvRR*LW6@v_q6<3Z@RKE1I_TMMn#2Z@wu%ONh3J zyK)#mXI?CfPs$V1&~_Hnc>dqu@H?7@8n4zb)cI>aSo8Vnw^VO*KU|fs{6=NC;wu%W zoM8a0;ZMd>py}w9%q7v@V_8|)$yuH429n8mcm{& zGkq>Rr%WaTbMst;y8f9YgjR_|f#7B1-UgenR0(7mEC$&AOjeVILKPY2N5x}$u+N_i z2N#JEWa-u}hH;yn5ONnP384=0$llNqK!7wBG}xD6U}$s4vjK2PXqIkEg$hDspLpUA zIPg=0$l}3ndc-YUQ(3hXTucgQL?llui;Eef#t{Zj}pm*Un()5k@&oNHPwg(?ByS-IcD&JJ`V%H~~Z*%1T^|a??_JLmd0`=NE)xBK$FKkv@EPkg@u+Mz=cCm z>>VyuRhsJ6hv7_PkpA>7yG2Tm7HG1&L|S+&PtOW8$6z>!&i|-}LP-vULSc*%5QvcV zdTbVEjYJp%(Au3Or9QwFsJ0zUzo0LL8}>ekgSa;yeyOlP@L0)Zk-7f#%(lFc<=b6PyIV zf0d?g(Kc!3e#1j?tD<*~x&lqX*C&4YGkGNp2ekR6sc7(WAPTPOL=Svm$KX#HRe>kP5uY#TCGo5{5v1RMN12Q#+IOi%UiK8e(F# z>8I9D!{v%fz<|cB7LSbK4br3TEYM_#BjQ){lkjb7O{x{b!d+NXq?ST*Wvk9V3k8~V zaIbiF5G)Vo-xG>5Zysuf2i$V?dDvN?N&OCs=VWCCfRbTx$tGNH(PJ(Pwf5=u0!^M5 z5RZmBjm22ogs20VE&v*z+60-UBmN$j_QdQgcBhvVXnH(}U<#!0;YfszUTgAdtdahZ zTfE+O4FwN5h_{G`uT~kLF2qJKP&_{2maRt9e{e1W*+EIz7cf%wfzLe|V7m%6gwS|e z_&P^zLW@>NyZJVgEQjV2SGyX$|DSU-bv0b6udI8Z_Pw>YdxAADuYTJ7pYDrQudjSr zMThg#j=42l{};cKdAL9m@1$0QcNN;K2Tg$?X)#9^-Gd#A$5QijdZ$Ws&Q!maFL33i z&bZCZhB?>vN1|t!4uAxM)qIg;D2A(2Rm&%f=Zgw7XHa6LLUiXw%+~dk?D8UB!v}tj zC49O-Gao6-DNzYyXHcyu<$ABon?J`gy{$kKHVrKchdwr*$H-j3J8+Z$%1P`N4r#J{ z94XL@P{-0R|B6N0BZ}S-Sn(G1GKhL*UOP%cxq`7%DEHeasYwMk6=-s(V`8PN|W7K*iClW67kbO2do9eKNq8O zI?2auxjy9MxRlggb^1V|nQi4I5|6$TZ$DvDfUZUe&Xeda$z`rVZccDxWkAig|go zu#!r7eb_ym#ltyVOn-Bs*20f};KUM2#6pOL#v`VP{GVGz@_fntY>*x(1m^Pr; z=ZkLq44E|4@&>`R6w-PH=D{4<@U;?+YWT<`9JI95k|15C1U7t!+%YmbYX2lt$|R}n?Bd{RMWMl(@l3b{s^oC-q@IIJl?py;kyk_H@vzb(r{nH9rfR=e^>p>>qGUu z_4RdMt$Taj^*VoDYh7jS7i-^I`wO+_YVYy<#Pcc7n>~x3lb+_9@7H{|=Jhr6HN!Pq zs=rhHzUo(2U#@x3w!1Uf+T9WC^R_DOZQjoAV6QjO-ZkUx>{MoYJ7zk&W`lt$ zacISUXfDsiuCAG$o?vI2x38xQzS_|d^!A0iX1!fXZ(G-FTUUEmce{8esQ!Tj_PKbF zH2&YZ#e;+qe8_b{WI)#Rinm)$j|8?`0^22l?UcZFNMI%UdQF?ecUvW}hb6E+39MHF zdq@I%Py%~E0=r)VdyfQmp9J=K64(|A?A;RBy%N|x64>1m*k%drE(z>T3G5CD>~;z4 zHVN!q64;N?;x0*y{h5!2V1E`%?+*Pb9FE!N@s#V| zTs_W306h!;q&o{VN9LLI8BwL0(H<0XfTtqLWNLmsPTk`Ycqd}MC@YWWs%wr#Vl#n= z@$)PkK)Sy`lVoZnF7V8!CIl!>V|hz6{qK+|X*O$XK@ zc48H$Iw|p`ZGzokRS50w0!_Xd6wgU%l)%`fD45rchrviAdT9(iz%VogMMaHDIMP=!l(Oiz&rN@p!AE9_6y?;%8f(Tbt?S_zjiJnmm z79rSsBLr1ylc^wPo-RH9Y{2CSHWYdYL5a|s#zqDs`=CPa&H0iufXWlvUg#!-#@5!P zqk(W_BFe_gS(s=`^toazm!3WVJ=Dl1(<~korIY; zBjH)5`zaKMyfD(ir(6yKp)Vf@CsKh(^JFp=3dj8Z_SUu@zkdYm8{&{FDWUlN=aj%) zGe-V^fSV9&B^eGjs~!~U&!dZQXG7CyT`P2uy6zXxsf=zJ^YiLA&Arw9j9X8w7i4M+ z?X;JQJ1ZEai5(N}!&ILRFqAd(DUIdw6Ny23Ga3TYtV0FRGlF=xWNHd+L>iMBVb@w? z4QX?$Eu#v>5>Qy+1+H9fQUApCK66*0mB^xFxqmH7QrU%)0oJvyIC652)jkP3Rz>fE*0Jm2@6s(D9EL-n%zEAHb}uc^ADvb!ST z`YYFI=SLjhgcof7q_-4U`p|TXXz!R*^b_>?m(!cyHn}tB1hYb0?j1ak`~TXiS<%HY8JNf z3AY+{G!_dqap>N(u!k^~#Y9j{f<54JU@{{TxVu1ebqra8QB21WX8kM@LUQajRhfkfD#3#aH0nB#ZeieBnd}%;RNHjQFJgFDZmst z6HAoPl`#O9qrOP)E8I_*Oo>~n8<~LnE&9LW5;+z%D82dO z#yVWnS~?sqn6Z>4r;Di?6u@QD*51lG{wU+Irj9?Enwty6OKB!3fXhQ~xADRV?M>pD zri>LP8es(ncWIrl3C3k5HtG5zfkZM0I`ROEY?45&G;$!K-Cr0c6*`|5-tL+zqy*x@ z%k=h2-T9K>$^4;0gYVhA!mX$_mUkD12-)$qjhe~8f-(*Yc}ScB(TXvEUA#o+v_o?# z4g_&ih!V|I7X}H*p|vX+Rb^UP4Wj|brFN^-i%ic;wTv`=j;k<0L~&R=GmEivok@k2 z5)DKibE~b7+0BLfXoIXx_fPdE=VIWZ2eFS!ET0yj0JD1vM+vj3wGF2l+5HN3yUU4N|ZEnvOh>&eyRsvmJrR2{Btuh{8w zIKJorPbQl`>5T=NB0|CgYb*gC8cDcGWqW0uHSz4CSRz31aomcjb4up!0?iE3A)d15 zREh*PH8L|#cQybnk(;6AwmYTxd=R9Q{f{~}!`02$@Cd4ZF+PSaHqGot-Z(F)!REd+&SDj(A(YWy?Fx_er|vj;@f+1k_N z?d|EA@y_n79VpzCQL^{nA)& zz3ue;>FtFV5vs?;LtEJw&ounzE?W}HC2G73xW90b@EgxKMJH-KJiIYrBHjKME3C_* zxhzYpQeznF0d33Fg#pZO$Z>v0!B1*)I4zuu7j@C(8f`QZu(1^_dd%gknu7)t^ALW^ zXL`|>T% zTY+s*^s(XONEZAD)kR_SIakK34V3 z${$qLyMEwWa{jjCU5?gtO@U@w=@QRyM)DwIB&2XOrA$PLR@*FhI|P@#t^o=cXnvKR z%#>)SASD^6_u`4&7Q$tNUEgy`)-Up9{o%S+kd(!S z94NA|K1&6f07N1m9BmkK(Q4HcnI3VgqA71wT&o8 z$w3$y&+%u#+Bcj8>k%;M_2D5O&Imq&GM(&|!c{UywTPeW$w%P&oHLBrlV_1w$XJRM z7Fb1v4IhaD&9?oGPi}cdnO={YF=+k5M}9W8ZRSEDMXG#pMfk2w`y3=YH6O1MXtM(s zlr%M!c`g@y>z0d3BZk?M=()|O9T;Jw?e{0C!8@pqI=hX-#|{r_LJ)x(={IwvkR;+g zvm6wioi#po;w4795`v{hy@wiVo16EHECeDcxZOr|TT0n;Z}Xn@ntik?a70@Axv_ty zw-pjZfPLb5BEeGgiV{}?D-mC;nDsi?9>eW>bR{O=_50^jGm&uOGMO=U7UG27h(u64 z@)_e^LtkypElWw-BSokp!%R!z5yJ3@czPLHu67dO3}_yT%j~B1w#m>H7@K-WqHKKd zv)@01k>coe2phUZIK6V}P)+*_^F&Z{8Q~z*T6lkUZ*>epj$LNPBj7d@r&0dl2V2`g z*|)iZ9a#)UQgAOwFVEP01vM>898otn>AFIUjift8ry}-6A}r8B1i@i%f z8lBCBD5K+*q*L<9!01>oTsmk}GY|!*LV5}zWBO2Gjxc*DEqwLG^v7^D3*P}Nrw~Mh z4bO%ZNG>!t50=a1s@7tWBK8iKxqjT)RfrJ264B(Dl)%gi6TzH{MU_R+ApmLHolH42 zm!sO)PZX{YhTe3YWLv|LGzC`B3zmC$#z=cwmO;9<@M1!tM?8~JF6>O z2$ziBWIGFC!lpkh?0>|njN1!!gN6Df^NPU%aT(G5AQ|80jZ3ZLJB|mzwZGzZHx}*B z@xF>!#s6dPO#tM|%6jpt-mBM{WRgr~ODCC-$1^FSnJ_ieQ(bjC zDNAP*CxSK2$^ml>c|W zbMCEsZ{1V%olbXV#y@#aCaL?o_x#Rx_V0YlaOJj&zpMCQMZV%v#b8B?`z!8WbN`5Y z#@&Un0QY;o@A<6f-JTns^PpS!UfpNv-c@(4?rhzj+V9lbF-Xs~@f2QT5HLPgMO>RlMp%)%}(KRQWOYHXsgv=&=s!E&}{G zEdby^sYrPWMP5?C&M9Cu1#D0O8&JT`Dq#Hz*rye+GYZ(J6tGV!V0{YMCls)+QNWh$ zuh!U>50&cLR_ICpS=(0l1n5eJkK z&v85bt9R3(+vw1(bm$g3^e#GdGab5#4!x5Oy@L*Ip+lSL&?Y+c2l04cf$?~?V1M^q zu*cult!ZEr)7?J+k$Z!|wvJ%1yLWDGpl_~YpyoVZ+q!C)b@*_^wJ@oKg7hX$994sUmR7X(;!7mL@R;8O1Cao+s7P7jU z;b~82{q#Tm_U9&(>h_*q_%GToTYidEl};mK^r={iu|Xb;q!(ImvQ6OJ%K>u#-e zX{@}$NpMJrB*Z6?Xm^Guu$@eup$-{I;X~j&8A?EG$Yji>xFx($ja@J zCRwM!?G2seV-W5u67rG1%7BzNuwveY1<*kUN4jrnI|p@8^@pz6r5JYGt(Xj*T5XsN$wt6c*|=JTIU^l7Uo8t4~o%@v%vAljH_&aH-A@NvN+ z(n!?BMq>KTj2r8`Q`tNbOp+WbhdV=QEpBTc!FrpzpSOf*qGdz-e8z<`*+=&|$Fg|v z6EJ>skc;t5E}Iy5`2_r7Y?g{QJ&zQQ(tZDs0xY%ju*jYYMYN&VCCuyT)Jje;DY4c= z^YK|`{sLA9mk;~a*TTyb6iJlg)s{5hE?g#_ded_#g|;*~StLq9Od}FQQPWdto!7Oa zI@b|v7<$tU-qq4%TRyBIn%7F|XFR(-wKFDN$yAMeS!LPzf2->mSIeW#?`rx)<0l(y z8m`oTslLbax;j_wGGyjEQvKfQ`l?vvpH&{Oc$@oQ+-CuND}Pc?WO%aTL+K&vgbwB_ zF|knx1D?5%&A+keaY-59nz8<&7`OZhAP;W>{7E2Uq2_&UJQ~5yvopi<7oSOy&7Jh6 z%2LH-3Tx7=-AD)(Hhd31KSd=xRuLqde6+GCU9Q5qhR` zzSlbiy(g|8Lt*j=T(-(lhLTb$7$0rU@Fc`X=^J{^=Cqa=hD{T)ag>=9CS?Uq_}-3A z93gjQc(&moIxTR^_b0=Nvb^NDlEiob&DIQ0&pWPQ;>&pnyUaMcZ@w0e{XBQAwIKyJ z30BH)aR2^8-u;L6??>4+WO(A)0lIbDXoQVhT{2(+I1ZDRZAx**NI9A2k^69^RG3FB zMUBqSYC#qgPw08dQFFwXr+H`QUcPao4^9hBp(`oJ&I~J0sxosAlIoyuXf345vBBqM zX{4`bwj+(e3uL92IN^v%m7l73NM-P_EOpXScu`8caOM(U1OL@4Y?X98YuPXu)&5xs zw`-iYjPsiQnL=E1aCU~F4Arxslgvdsm<(vllo%9<>RGdBD_&P&ZVsoWe)Xq3n zwPxW$!C>u@;4j^2FUF%B)(o>>YhtukEgiTF}*kBf6nXXXy%IG7@<4aBa@ zc1*Et&LkiyGvn;9k9Zc{Y!GHi{p{w2yB-$hiLvJA{~vX=_?ti3^tq-zja%x!TmQ7@ zbDpufU#k7b+R2*t)HGL*SFKjHRKB_5C*8m5e!%skw{rX^y_>4e@HB0G^Z?vO+cE`= z9uLvl&W;eN7_m+7%R4mDP_ji*YxSID1c)LU};iw8J=ft4?Ri}s1_uuNAnYD zv7r46v~nfmtxj#U=(a-FxR~Jy+j`QVbfOtC%!osxxn9<8;DmU&)jXNuiQsmoDybER z3JVRgwYr7hrIqAnDcIrN8J_U1ODUBX3)ckd7QL(6bnU>v4vamD_*$)f6VadZvLDEARp73ol6{0rTjF{R> zaI&@~;e}hP#620F$?YgzF*pOuCycoh(RgBPDJGVd;wUvzn3QlhGl$2GCTp>C_QPSpa}~#ljA5%x5)%k+eqc; zh?LUwFDx)oq7V;fcuF)aMZUi&#qL5VaXFd<%HodQ-eIwGII^|BNn*b_!&8Vmf0sdFN5T<&~y~B(+sq+BkZp89-WTy-lpF?#;XkS&gU2aogBM0z{`2 zicQq0bJZFfCN}LrX{?m1J_)k({}$ILT`kYFxSEeN{Yq0yBU@Vv`YSr@GR zaBXAFWOZNF4_AJsa@zeL0DZasNgvAaq-0$;HR`N2gZG>~&JRDg+r;Ytkjhlo>$kQt zrKmr~0#1tPM5g-&(O?*iWMLUwbSi2OVr0VW*Zn#~TVQFVA_06=jes<!E`f1QE6yyp=5nOx87a~zLmj|?+)@ee0;>gX`Fk=vi=09a z6dUNZYE>@qNPxDl*`XmxR z<&RuSLPDycL?RZNg~i<33(2pQC%q%XQ_d+wh0;qG)7P?)Y#FXHba{&RW_Z3ig)NYs z;#4RRE+vP>pw zMVF^oo8j5zdQ#*_zIKVS0qwjX>2oMUl&5ku^Dv%mkEWKXCoY{z&|DH5tj>IjU{X>9 zn+bD~BIQgZa|Hbr?mwppu( z)BMBLKjx|%tGl=M8?_&;eQRyBcBFQD%|Fz9q~$oyI?C{F%n(#?y_v8@}D}dkybs zxY}^4VQ2lf>OWck_WES~qxCyH--OHpKjn#gPI&IG`=`2()xE9m*8B-xuG)wn@cMxS zejtG#NMKD8poc~~Oou82iR`C;wT}+%r9*q@&~7@kiw^CiLp$iub~^MB9qOe++vw1P zbm##(bUz(>i4L8kLp3@yNQVaK&{;avPlrBDhtANUPtl=I(xE;&^a(ojHFW4jI`nZm z^a36F7#%uIhfdLW~vNWs%#=(5`~JaKzZs*9@Z7Cw(cGm9hA zcG2&Ika7)hm*YY4U%cT*!8K-h-gE`?W7AY&rf2P45|EUjZuDE3;d#szeA~rEzNthj zmEz}87P_iEmU&7s79p70K>ItI;E3PL77A8~Jn?u3Jpc?AdI@4Q7&nL3x)(o}(h$&A z)3>mPL^C{r_+XlxKiN76B!f%>lJdj$9h^B8^#>W%@dy|?qG1t?L$E@!-C@M}90SiT z_`_F5!Pk`o&T28knUB9H>WxD}jMv%>Pf4zDPbNB<7?dm%THuPcDVz|}%IY2QdWL5g z-$!?<67_Mkd9gl|md--1a4-1o3{Me$lydD_fli3G?^^&boF{g0Zm!x&l z+c|x2h9~(Rx_OAYM953Ea+Kqwv~JxR45Lu%R$$1WsIiPJjLwfOu^hK%9>dMhFg*vl z?ivk4vS0%MHhd6E&nll1K&gO6MvqM&$LX;tGmXp!>3+UoODe_%oECV%pJMZI2}sHa zyl%J+T}5UJ3GJiD^kshTqbwQa*=Q(Y+a_9{NsBiu*u!BIiz_pUEDq3P)UcAk0)hoR zEEb3DVL2YiVOQonau}eSKFzRl;=0)|o3)B}sm>TFBfeL~kOJ)E`nTDc23huG&LK+$ zn@2D$M>BsB5sJ-B!UkAO@C9pSYgbozQCc5;%3|mLX4j0XC|5{yL z)ea~9H&xu>UU2;dJY4&q=QBL(G)C>bP(#T>A|gRLu6)*K(#k<>$9``|?*O(;LxyK& z#*kS`6!c}U6crn$6eYeE-B>>W@F%dKAu1sfmO5#14-L8EXYI?f^?Y&)rfwp$76LM(v2Kw9lojtRV zO-q~Y@0#uInG5)t_5z$y;t=9oY>CA3E8-2uAp!goEH6A{hCdXEg6;q|Qk)6R#=F}5{DOH zh%6)u&+s$dg?|TeA9r}_{Lt{|;Q7&0qeGLUEKtqxne(GVXV04c+A-5^er+~+$;2x*JAh_IoC<57|LxF6Y^dfQnP(AL%`v5Z|p*;?3w zu~8(RS0OrZ$0qf%$vh38qGoZ3W&|GE^=(Bd2( zM3Uh!OeNyu*M}m@!)K?@WWuNl>u|AYg_3R$ziX+f^@}Ux8J_EVPo~AS=l@?*6`mVS zvyLwupCFnw49EZzaj4>@v2x9){yYCHB(T+vnPQ zJNnyZySwMwy8ZsHwt>z8f1B3b8JO+z_Xj#V1NO5$FM+AR^#be&(PpEI{%{f;kAp%5 z&A6QR&(4Mt6X(3(N($c40;xN`0s_Ad+dO>(3h(ql+Bp_Xy0!HNEEDYff4}QJu9g>D zt~P(Sd93L-oBA8y)wr$U4fS8Cf7tVW&wj`S*i;*+`9jSx@B)~v`a)H*@?R?7Tv=I> zbAQ9_gI90cpVYw>=ABjHVwor0HLf>7o8YRqBov=As3B;Z(7nd^xc` z-}uO=kN>@35>TMVwd+F1&Ub(Ds?-B3%pVIlwXH8FU518aeCBjNzD1NR+ulw=xcdT0 zul|!Ewa5zdz^ZViCW;AO2t|U?t8vrouz&O!S3$nTZg&1|@9G#ZL0Ig$IWV6PJ0%gP zDsB`A&BPq4*1wr_kzm!~$gaTYi52Ep1ww$BA@-iLCLuiTpAQ=~zOizIe;tDT+P}VT zR7G4<8kmkpzWU6X~1rdc(z&GtS)zXQFZ-s>r1seN` zX{@QT@Y2|lQO)O8STIod{Cx4}H>fQcfyWI3sk>HKkWLsr5F+(9$r(nyG3dR+Jd>kX z;tIT~S6B>9kPNu?y%fBRDfd+?ET$$12m&*21d)74l`k?rd(hlC8|=DD=e}mH00HnhLxbvyuxB*f^cBZv=PndARMs+k@WEAS6Dbq zkW2J-6EeE?&J`Bw5@Z4N!Om>dvH^K7QcAGv;Y)-Q=xgS(5qWlSj0;p3EGdB zl;rT_Wq)kJkz?Zui)#rSJsZQ(=v?Qc@$j;FE22w|MZzk`tYL)(v;;o2x0{a;l9f*L z3X5k6bZ+C=-dZIG^#DW2Tvb^W^XHhdfkK)$$4p>Ih8;;rcgXT0qW*5cSg} z7ucgKEIuQY4a3U=Ct0o~ZiBc-Nq@L4o=65mQD4`Lu*ZO#hd7Jtw4lWjU~J;E>5B$d z_JX#f!gWdITkI+s6yh+RT=%&?;A)v`eqVEC(`aL=;lmA^>R<4D$kS4Hq&8afJ2eB< ze^mX}>Y3`DRbQ%lzUscpFIB#&a&yH~?mvWFfFHPRhkwU{Qq3#O(A1b0e$r3}z+XUM zg+N%hq7ks3Wc2yTdDr>;%2T{y`I>wi37O^vW`JtU3+qn7=+Z*LVC(0$d4ZXo8uP-s zbJ>`Af!U23^TNh(HiT%M7f!7(OHn8r^ocMp{G{W&&^;qAlen!ziJ4(=EfkW3)t568Xn zaHOhtWfETn^DDMGIrao^geBFosrUjb%wP^=+E=`;tx4f9$@7&@z)7;8LrPVzFpD=R z=Jp-0or&yQVPRikju|el@4Br4MdMXWw-T-J1#Q+@CH&|L3%FY0x(Vi08?osycsi+H zh5W1u+Ko4q^Rri_POq>)r%;=X+?E#zitS!$(VNxIC9}*ss_ffVSoBorOebH0_Q9;o zrmbs<+~~$?|Hul9nhJ!U*%-pM)t%G?C3rguy?%uSQ-wNg_@F3pk})KDV1wiOot6xeV0oOf&N4Z_|P77Y~$Pi&01*D~ih4T(Yr*}B3)paSFjH-<4d z>X`K+;!>Kq@60A4uD7XQh)23C+4+Bq>&ILz%gtYDo@)9~1p#+>=j)6I;*`N9h+L0DlwLD&0;R4UQvbD$)Gs)9z z*hMTDvE%Q|Rw2iuELA&=BOlMkCkyi9rd7-fjoC^`VN#aHpg)g82{f~J zX2GE2$CfX^R2=Zfg1Cb-)iG9 z=osAtHcCYf*iMMDRNmpqJcm>|K0=;m#aaxZWW*wC+Zz-=m(mz4auHKbwt?=|@IU-Q zY8^f(c6C0}evj=-Z&MNC$cNz^*1Jlu>HNyG839){NHmEDj9TL1B3$ZDmv^ zt>a) zL;%wItkYf=>lDa5i**`cdYrYi*BCg`6mP$*RnjpVT_c+ZS|AQPrq^OM@5n6krc14{ z>5QXNsireP(u%@evcah#vxJ;F*2<|ka)4FrxToWeT83G?aaJ>*YEVR*GFJtiwl(&I zqVxn-IwkkIW;$jeRc00is}@C8BDEXy7jSGd({pKav5w1xQ{UL{ns5hQ?o7k`8djP= z)%^D6MDvN}`*}ZKAM$+9^J&k|c$Pe;Jgs%#tot}b z?_a39yY}m~AF5rgy)K`rn{!D`is@STzR7Uh3dzv4_3RXK3nzf zs_Ru}>qc5WTk)2v2P?l_`KijcS0-BC-EzI+uFCr=zESaF%h{F(-S4jmS3J_#*!*pG z(EYWBFE@po9%;I(@oSCmZ_G3X8~fe;?nc*_sY-|gRqpAE3zWD6p6v?QyA`n86tInS zY~AnBv7TB5Y?A`kt$_6?VC(4Ex__f%Jyia3fR9?!2X2-_R9*`|E+-iR|V{s6tI7;fc>HZ_RkcsUr@mQsRH)% z3fMnUz$MFD%40(P?kc9R13P6g~83fLApw(e63*iR~8e^&wf2?gxO6|f&u!2T}< z>__QXPlE!sMgd!`fOXNab>COOew&@6i`2ys4j+OkX~8KB8Dv!1-gRO~`Ez7C%(p=9S5GFBV8jVn>;+b!N88(vLOXyIPpFy-2~irV@i#B$PN zS|nh&t8HA#LX|cigyq|bWXjMZqG$-bbj3p$XHysxeAXqQ()$3 z^{JZ~u8WYw&4#HXnEvWme7Waxdde5(hI9&Y)9<&XjkKPH+>Vu9SWFwah?a{Dj*A<5 zJu7Ls#@}$Uj)dYYYA1x>_5P|yD}TIlXT^_J)VrU7S6=piQg>!|qlrZq zi@ilN0fJ?R&BwwHYcjDMw%J%X0Hj71V$>KDAzGts$?if@3a$;4S3(PXKZt!9yYdw3 zW^Cq*C4f?rhLv+|b|(^3u;TR0)gQ>n|g3MvqYirjF~@S=tS5^}c*2X_=U zgp`VrA1|5RfmC+T6C$9^V6k4_p{&ccc`7mdwd2qi8< zXk3elqoKL5+6>X&ky7U2rCG<0X72}ob@%lBH>gc^Mg(HF64HN_7HKri)$DyJp*^We zYLVCmB4?(xSo0HU(fU|f&fbe9?^Wp(rU2^pqD_y=mYs5E?-7O52M5@jGMl;hf@SafW4(r121^=o4^=X34HFf(h$c z`jNp#tt?#1R-XY=E!jJfWFOr_^TNdBqmyE1WmvddJBcGiO6F1jqJJ_F3-NJzJ$nZ- z+LMA!Elq6Z;^ai6UrbYOEPYYUU5nhn8 z)tfGTN46P>p1eu6JRVNMws@ZCw^jx$C0OK8b1V8)9&p;nxp;ZZ1VehdwiPDz1}@{W z^uDH7HU45_XTwJty6Ur@@78^%_Di+inm1PeLe;-jO;`SG#XnYzyYsHU1Gvf`SXWsD zZ1?n`6nSicR-Xj`1?7)pZmpunQi*j!wuA2WE^OZivn*7$ds@M*{aBJMsKKH5!f6eT zQ!x!fdx_=Mkyv?rNv13X(T!ARmIc&yPy6Y9+D_$i4S}IhC-ZfFuM}?~T^4Tp7NyHP zu5j~0WNXKlV(HbT%c61LqIAPyXDL}%>*7|Cy;q7iN_T&jMdo%-Utm$)XcMt0U5piD zCrl7<=~qf|_3|u^tyvba+dVx&-@z8x>Q_NDqR!|N93epjO4OTW;k@0`PqO6FsuI;p zRp~#wkwNQ%y8iH7`W^>{BG@A(&`!d zoYVtZ7ERneeKK``TE8-ta~zMNdlyaRQig01;giR~EDI&>o_=Dj!w?Ep>ocOwoL?%% zn01---B}h^+&w*hlN?7!NC%c)AzRTG;&?i-3bZs<%C2amzxL~Ei1W*G0O9``J3eNn zAhr(>U<6liy%MJF-i<5^aqgZTO+&0++Gt{#8R23+{%AZJ5tqi%m^cGkB~uD{JLIBY zX*0Hvv{s8~F~}Xo{>3D~U57ViSx|NN^ijH-?l4OZIu?zwIBqPb&NQT)#J^Z;FNH~~ zZk_~KWOb!UK&%w!wP%u{n06`@V7X9-0xTz@AIt=;+{%Cn3>&j7@Va|?fUYOf8$c9( zCW3c3R$|VW@_fSC{ivYZ0a0#g-FQR``0J!ZHW9R?-TyJCX|31;Y zy=k%WvvB@@f5UkFi}kxb&(!@*-IdzU*N)ZvZq146cUC`C_3KrSRDQg2xZ;x)XWXB5 zAA=V+@K0)2_AwOtK#JVMD6!|9F;dZ^t^~F8Mfp~-Yt(0_k>yVMVW(g{Z=Dbdzf0M$ z`0746o9o#rB(pCCiDYQ~l!ciq6l^7AeO8(j6UK6O5{utM57DC^OpEUY%}=C77jBJ` zSr+%)J$)~|>acYSCIdw)1O6y2(S8>S7qTo8I*Ut0zL3?2{!}PoH!!h0B9lmFSrBxk z$}kBQQrRZPBSIQZ z{K~u{Wj)Bg$y6A~`2H*lUd?1TP90e=?=Y`5h^}ym^wc+JUTcsdTjdm zAk*laIX^md_N?iz9Wz{{?kvj-%_bl6d8qWk%>GnL@$_^@Z#$|67qTqZvwM0w-Dc%< zl$B#`H~yQnypF#1jzRbzv<8Z2hj0ztL$(GI^*W_3YGG@+<|oq9`ONY_mL+IbQqY`& z16iCMzYNVX^kt!M?wo12QYizLvg?GoZvZ>&16h{PdEFRx%yiHh0$9qh1N6w8;f^fJ z@5~sIO?*m;1qOl&!}byk+r8Y>EOju;l0>_wFVgQv3}*pLJ6kSKJMFThy(1;eRP+4K z>0p*6m0n-I;jlVie22idGRx9ayQh2TJEoa}UV9wW@!DcYyJ~HBCxny>8!JDE|JT*y z4|Mg;1w5DNaT7dq3Rq16`x*tTN<5Kih3`J0fIXvty`X@7OaXgb0efBndrkp+Rss8J z1?(vW>`4XeqYBt@1?&k0?1%z(SOI%X0Xw9CeMA9!Q~~?20``akc2EI(SOGhrfbCbn z_9{Jx-mieYPXT+c0(PU~)AfPGQ{dyfM4!+RQP>o0kJ-?OJ~wXUHyR`Zpb!_^KhHfCK{}&x! z#>55BSTqbad`uT~H9L=@Q1GXQ8#JMl>abmLnx9B3sox%^p2>!}GAw-VV6S+j(sm<9dSm~Ygn;;SA227Q#RW1B3tzZemk%i=JI26C^^RZs= zT=uodYM;V29e*EKIT&$Ro=MpW3aGx{nhha?;S@R3(rAQT;Tm_T%+O0uHEb1B380jl zVSkv~n!T*bY&g2G%u)b`;eW26vv)kM&4aw{6GaJNd1edQOWX#Od=1@Pd@6F}XBkH6%JfH{R53 zaZ7P?#+0YCB^wl-h-{M&)-loPNN8?ZHx4pF%Gg$$62S7rs{L`{YDajX zJkc%Lr&arw#q>uvx#QD-O?qaFA}g>wvHP+!NbF>4FST#Ya1zF(E@li7+vYJFxzb=M zLES22XZ9)Nrx0_2H<+#5a_w6JF6C%UWKU+FM3PTO}lgNlEEmRv>y5RekoN5Ea=Bc4iVRK@;{7ZYAc7k+RYywJrO&kQ6!g zo2?|7q@*w@r-Bg}3d)ncfYc7rb6g7>FWK5r^jJ#8Jc1b+cK+YuI_+xyZ1b+BXyflR z-q(<>|9XAc^CzB>x}T_hZ_RtF|GD~bl~$RnNV=bJ{Wd^L{0ZkOaT|L7RqFh7${)Fu z^k1@V`}AL>)fnE5lDsF!Gg*(P_D~BH^POG-KeHPF8?0TgG*(IuvOF?&>8&}Qmio+1 zveS@b=#> zZ5`Xgm%i=^9@Z8syC=(2TPvKpg&wq^9vO)Sk}T*VM(SqzCEE&0ctI)@V|r`J@_g4v z=*|VA+#-6`=8>VwQ@S(Db6y`+*kcM!ElpxY%;RNA-N^Ec*N5mHIz^>eRS zx?jbvY#f=Lqg$!Z*bj4H=&uuTB3T|U<*T#YmyHRQgVZ@uoXKG}i0kAG-cBsbla;uR`oZ*~DGKS2*f4OgRu+tJY_-dW4)u4ykxX&WOd z{ZKZFjIZ1zk8{~It@VBp+y$L`Lgr>HrHdWmK5Cok2U>#)7D0<;R_J| z?`@txtNY`+hict5Pgj4q`tGXdE5B6nxr$Tn7hL}i@G^f=yK_87^`X=`>X_8GB9o9_ z10uNCeg29bOQm?Ncc6P@WZ+nD+p+%Mp0@7co?~r8BmF&X{k>g1y`uxe{rw}uJgP%w zj)$@CqThAecobiFIsl|pg&Jcd$75MPLzfmP-T2jt7ULKA!W}UFSSTKXtI#u%@bY*B z)N5BEw1>mKNBw$)l*!$?44vb`Q2`UlxFGg*b+SX^%@5QWp}u=kho}<;D-+X`a&0J!VQ$;hJ0YZ0 zzyo~nLMX!ib1F0&^T(D^a(i+-7`VdWgYO)8C}+_{jDyG|Q7tT~j+E{LccP1y4E?$7Z!;R-#_f!?rx!9N=cgT0l#t;>MR5=`&T@vz~;H;+(z zAlDfbuC~i47aW07Vz+skFeVZ`%Tj@@S!J8rm*dgRFQj^?V&b~>^N?U-!VkCML5%V= z22rt+5ZPBB#MYUW^omq;`j|*p1I6WZx0%&(z1i&wz* zBCujFXtBgHWIcdXaV(iyP#Xd}%H?|0|;51kiLUZ5)8BU1J9b4p&CquS4 zAkG*mscU0HqwU?J!|iQd?Hyxn9UUWGZO6vCkF~Y854U%Z^$m=U9TNwGJ92eM_=w6* zmWRBUpN~dp%as`=C0*EE-<_*PPNPbfofw9LaiVWU>_`H)=3EVOQ;2_KUbsy=3Tuy( zfC!BC<<5Dqw#~0sF%W*taTRe_R3k76t5^6|g_1fXyjjvkKUZ0`^S` z*#D}4{VxjGH!5I%L;?H%C}39uT><;c3fNy#z`j=j`-=+L_b6b0K>>SN z0sC@@arR1!2l2BC@_mN__NNuFZ&SejgaUSz+y8&S)pD)*_nY@My{_>e8qYVJuYa@W zOCC>MZ|(N#?^pd^)nMhjE2}G_?ytCCTnZ>DBhhRqp&dCrqt8*b zZe&=EmFP!yjFgedp~~n?hUZsHZa?Y?6>Ll|hO}^SBpHJQG%S`g4|NU!E3AT(p`f zW)WCL2Ijh8`$O||GJi!XNMklTm*W|pHp)lI%toP3c267gXUbQqC$}3{jrH?UGMDdE zje@6-&AG|^VtL|yxm`$n9etF{1WGf%HJM+}?L_J-K1yb8#d|((QYL0s_E;*vbzOE$ zMkmG!C?rvzT;|A3MrKeCR@afUUO~-a#O#jM%S!z_tbWf zlu_YUe^2fKWYm$Gq;6S+vkBx-ayE-7elF#qn?!WzCJ{lYNyN_F{YbPeb%siGcs@8i zj)uugiDK&w`_uIxxi5DglI%%cpppbf1=g%n8u-+(G!?}}oe*Wo8b&5^iMn(53W<`_ zmgp>XBXjFKW`8Or$&KCEh+yacdt9romLNm`m}vS~)8WQR+k)*Q$pre;PCaKKEa^L-5iD{Yjn6@oY*v(qxlNK3NpSMKgYui{daO z4`zF0NR#V59!i`@&iZ`k{j;;7#KbwDFNS}cf2J(~@r`03e;8oFXaXWS_%fj6`o|9>uu9YZVuC=*JW2N-C5Vz-e_N9|+;>OG^ne{Cka3w)5Oyr!vQg$e~ zo*d7-bS5=Too`L$@wV2jBDu~cVM|C@7A_@d9-dwh0eDQJ7cdg<%kgwg7wM~+i3u1& z>R%(XFYyko3fhu})LU{xxNHomhqD_7)>qCzN^G6AP0gXZu@>W`6p_+_98U=~nmS4C z24ZH$(XO*${jb=esuWU6t7PM!%JKYAT56t3*VOo&k3(}h(^q+uRviey=$#j)#3=sC z9M2}zLC=3CJjoaNbmQE?cXfEb>8mOIgr+Cp|MX@^zze^cFXrcv(z=pl1F?Sf}kppzc zAyI;}5Nr>n94t~O@VS;7Ksr0=otTSVHe;~gNhFvwZshv0^xgE>m!iJK#hV_G%THD0 z`jEhOx-uR7--T}sAqQ&ilGiyli!V5P)D)G1hyBgoF2iG?nOSP*qMea}T>^VWV- z^jONGkO(~0nCn0q19Z<9qZ~`MC0r~RDWQT`?#{I%ALXcxx=cnwaZpYy7dH~00Ucmc zR^r;TRb0rj^Z$0&gsWwH^OH?)Y`U{C(^%8+Lk%_cZ}5ECbG+`?>-uZo3i1CZtADHN z_p7EWKVG@5BH{joyBc08{*&s?@xZ;4^j)>io!4Y2E);x2vB2d}LJJh1eF-l}D=)N` z=8t2)eI&=@`_8AJTD08J1R8qai|{fyv{}27>f6#96{g9(IUf4=WJ*zKV%$#~!Y|=k zA_Yqs3Ym*z>eu>g2-JT|bxYDA#t2$7PRkB7pnffsW=)OGD6>$*(4`stW0 zHL>-Xv~cWMp&Sp_8%mQ?2h8Y)-eX|L18S1sa5V-K{&~$GWU))w5yQsG8AIUHmE)m+{q#H=(6EW&%b{=(2Ec2f zGqB_gdT4JWCZ(a1M) zkKvZ)K*~dHW4wi9>FQ&UdB&c9-1bmPz>rQuZd&Z|$ia274AG#5glrAyj44lNOKuA3 z>`0ALCs3RCZQ;SYbV(yx8#8`k(O3)%{TI^_st`30B9eK2-UA_dx*N=0Bjv z;gL~Q^f-Dy;o(Dgi`drq8Apt?Tj7>~b%`H3ljHGFJARm)#D;~-!4Js7yc9i`^6-GP zPHM|Me3R*maE@THgiODHQUnY*g%)aJgsmQ?r_&L**n(hl!Rbg$y9E0guAMX?^vwpC zYlAgL=vmZW3Y{}-a!p7cb7vAxZ(#@=ra5Btujx0C=J(+UP#Dmr?-t|=It|nB2KV#M z%psRqOv6~zVcg@HUOfvTiwZ5GH=zlj^F)xbsmD{23?&pU{MahAyiD40{qs1>9m(bDF`MJi-yM| zOzF(SgA+oNm48cGX??Gon$Piox}#~jB^?@wQesnb`%Gt~l-fp_jf#wtIUbJp0DViv z#2ktwA?W02EM|`jYI`WHm2p^wKw><}t3n{Lv1AzHfX-<#I6Uif2P)ugi-{a3<;7lM zgD+j3;|W(Ur01!F52Cq7uWCVq*?El_Ee6@ZHtc(B3`ws@$?Aixwbi>2oHdO{@6vqO z{Lh70$o$WOuFCu?*sursak3H9uUA6z}+r+F(Lo#}}kkyJmZN zEEb*TB_7_WxxrSV=oSZ=!`qEP>=oB?JQMBF^fR|CG^@tKR(3(QQUTpwDPZ*nb36_1 zP%28TzSysbn^dt6Sw7~E+jLBFoKygl(YeG`*iM>U%S?Z5og6s{ma%4^$~`%rE4Pn+ zr)FF($(cJs)JU7$EK$x|bC>X-*GJco+4>I;6IZf}afp>n#&KdXTKBL(aqDqugOfc>-r_74=WzpsG(Jq7Hi6tJIE!2YfR_7e)&zfiz_ zTmkzr1?>M)z<1OFA5g&lwgUG33fSLL!2YHJ_BRx; zzpjA&H3jTO#i#qW0*7zX zu;;u_7Ne$$AZjvkXjGUI6;R~U}Wvf0_#DbID z_$$6F)#0Fqur|;0lnl`A<}Bq?I2xFeRMMS!o}T2)P4ca#xJef}D?@K7ONmn!E+wen z#k979qBV3WB1+_Xe{nZ%y1tp21ov(|^-O`*F}!aViHrhfvjt}MYp(_G6NbJT9t-86 zPKGt$3l({uIA!SdH>gVfA}bA}fvg&6IgTJFon&h(zo9Ssm`PkDnTikCrDQg^7y|?R z@d$)@2`6xnUTur{$;%1HV`IkdD#h*^f`s8N_@V639823|WzNI7Fl zQ)$Up;$@9e@Pk60Y<6oZn_gfH7e=cESDMm&`3j_TAa$HNgpG3G+N{XZ(e_YU_#+R^ z*yb4iHE>sm#+I3L!ai)hJ$X0s>!Ca4@$Z6JK@2QsuSR26iby&k$}_co(N1(r-i1W> z(ET*z1kF#%6Eo1=?NC)avF*9%k=VY}uyPA`vJYA(W}`5Cra%ty#pIq_Gr6u3xEdu|LucKIOBn z*(}sRNeLIti-Yisv8L*aEY7Thd@FD&6uB~?CHxS&$%v26*@(lL zzbbbX8FbM7O7LZ2wJRlIc~0PQS8fq`C^#x24}Fiu4L0LaK90EZywa{*5_z@Vgkvzx z?fX1LX8^ZAS>Lcdm2%K`iLI?O5W-#GV&kVx8^;1lhOiqFqu5Me5PMYXhxO00KElrb zEv~0sO`mUiRpXI{XY2pEe%kZ4x)0V>)b>`lS8c6)ojU`M*Ze1aFwb+_AHPWs4JGC= zwzW>i0vHiWwr48|B}kvoS9~+WXE0qjt*v+n)JepTEsJn_Ch3;Q>RN>2v7U81bN#c- zGs$ukxEaoG!#;WR_2hV}{edfBozHte_bSy_8&id6PWU51h%3dx z%w&-rv?26Z!hC!x2>LO0;zJ8;!-UoJHE`D^cwbAq7 ztUn&_Fn!Gt&}jk`zGV|DHkAnoB7u3w^n)nzR4A~->TEP?tNuy*e{qi9l;6tRn;wY@ z3Nn^o9@HNUlv#v->v|!DN!#04FVkD|TacA@6ZCzwnX!;JTyz$FXJBwG^f)U~l{cl_ zb>X(Q7VlRq&kQ;`Kl`{B^bMTRkgUBxVRIKsCiHr8#6z)%DO6K08B0PZ)`Cs1&3Iew zU4nG34a4AM!_6>i$Ig1g)R9epy>=oLNiYF1gJ5=~G~=$>j-SRB+XB*UIS)HpkeZA! z(e(GAE*oL?Ji284nExuH%f_Pl_jPk*Ea5$;cOo3MC-R%I7fhzEQpX3(V<34rqT4Ok zjTz0>^n@1(?d^3kRkze-AioLgGMc)iT$jQik?e?!N;n`1?8R6FsTJP0kiVF}6Ukpl zZ=sSerDl}Wg7gZZI_86u*mMY6ZEA-6xqGOX*fu_Y)Pn;oj$g36&;Vn6MhKQ!6vO!Q64v+NvX3nfaL`NH-uvm|FYlbgP=Vlpn>rD82PZ>TVask z(g7@ZfM{>NLG&MTVj*)4^fj<_J}E#+Pa1*=kVW=msgy3AZusj_JT=qx6%Nw_z)(O=aBkf4~l9R5< z^TcvPH>;@|0bOmRAIfFt6FE*wtI(^#F(165x;phjpi_%`U{llTB{&3?c0j>!6e05U zkLtzY-n2T;li4Zc9UO%aV8Ngkv@o@{iz7r@e-;+flGdIV&({p*A@lD}c3JV_zhxzEWhi+yy zDm;`HUue5cd7hqa58c62XTVe-4uXN=*%N8mmKZ>f&xiFeDzI<%f)6{6vK@Jzdu<|h zKy@kQ$06f_dnl2Jg=S$ww=&gRU51vj*ZW)Aljk|sv@}^~VJl1=xb@Ae!8FdaT~@j( zZ%V0`Kc2AcO%RXk^yn0u5@9P~NdoIFW(vXlS$o~|=Xt`lw%3y_@7SCUdbAP?srjk2 zQu=h>+A21ug)@U`h8NGA;scR(M@;)-d{~G9RtDIV8^4;@D`ROBl`LA&_&!@aHSwI8 z3e9Vi3IF_p6ruNAi~QgsWO>*hxNNovWKCGA1iY9l1~~qVgR&{lGuIuZN1GR)H!dVf zw{|g1+U!WECeIVsbc3C#Ks=&!7RzF27SQ9_*G!(!%wL zD77cg6V7#|&Qa$|)-`xVr43R9kP@Mc4Q#H{d7fC?yEEXn4`MY%q;j z+5M`1*UkFMU_n@ey1ga*j5RuxzXvrO{!|}X^tg#GaTP0T5%POdIUwbh{C1?QV7&cX?w$8HXN_t<5{fx+qws8rmFtF>S*P= zE52KC%DoJrm-jWS_wLOZ^9|^c%Ek^Yon`h#b-*l zqVe?BTM$Q)sV<^?)=w-|@#J}Gvq8EstTimF!P%-EkbtBWL%ANv^PFZKDROXWJW;Zg z0TLd?&!rS}xtOg_?UtlE2ItKO@;ueqzMB)&0gd02QMFWqKvSH@*=wejmN+$;5Qa?5 zzp<|vv#0K9W}Xv}x@>Ur6FU2bSwg98d7gi5oNmTv&=>cgWzfgdg>N6!3 zlO$}hLd>GyAI248d=6%fcnFfOTIZ5Ad_XEtLqC#wIM371U7=^^SW5G4og8VX} z2E+M7cy1m@*HY)7!uHSXuwfOqGe*j%&_zv)IN!kVy*(TJ@aYei%zX;qBQ!Q%g&a|d1SOvC#cR+>N6{PyNV^NHsBn!eHW zV$)k1d=2dlRrQ~*e^34E>Zj@-@_f(pY0uAimOQ6Ct##k5`*_{k>K5wmuKjxLhiX@A zFW0`h_Kupb*8F8`1({$lknSDvVTq5ARagVnC8&sM#=>U!1Lx{;R8R=lO^ z!OCw}eyZ~Am5G*jw_LBdtMa~zZ&bY4a<=6`_xmft6^}GFHhg;%4GP$L1*}H_Tc?1nRlwFLV5{j^&j!V(s~@9ts6Ph#?_VbFe<$#} z7b*Md3ceQ7uzW3~VO92Ak1EJvTmgGR0jqLms8aau%OJ-2D=i*m{jh?3A6CE~QNZ>q zVEYuX?d<-)+4T>umd@rMZ~A=WM;fB_O?5w4J6ip(Rqw2PL&Y`sJUskQ^XGb=C->Y( z&$YnxI13B98po=3u|6xWY)RMWd4kVzx|4!giF7{6vi~G>Wm8ciiqcpqKZ+;RW1)D` zA8wsYB!i)-&)3=B(dYAxvJB~v_bCopVWu?yd@FN82mdRup-Y4Ut-8?kpM5@7fmWyi zs>9NCd7d3~GEH`(HP?`rq8FkI#pc#XctI)`f`iz4hy|7O_vCrD(XN|=R1K%OYFt}x zyVrLBY-n94Ch;!LcB0+HMckzacSOY`acag=8A1+w!Q$%Lt-VAt}6SG0`BRAo%Emn$jb zwS3_fEaRv0qbTF}3zgJ)mSWsiQp9Wcz$;k7XY(T{VeMv;Dq*%nNbTiHidN;#SFlX) z%nzeXhi`7D%G7+Pik84K-`^5IHHqEEg`O?&sU!JgD3s%=d8$w_VnGm+ZWk@^MR}e} zLZyNcTN86+g!rI?r#x0*OMXaH;C^xiq&t-23Y3CMD}clv%|C*~o=A~5qu|GwfP{N$ zR_Mf+q+|=$4cPZYY)+G14XX`1|8H|GyIM9kFE{;Z(}~8PZLDbs)c>64?>+nKo~iw4 z?SYziR=>6CU#d=2#wxy6@wEFl-46o%*8imT=6O!WX}Ynv`FsE-56pFyIXjL=CX)*b zF&-q&dP1kXAr+uu8+Ta>USQ$2gmHTberA}IlwrA%+LfQhet3qSx75sP ziutr$@W&z$Wi>t&$2{Am4v|L7YksbQ;k6|5-rmn1Il15K@eRh^l%of;s)CU)s-uyIj573h^ zn8h%DDFS}i6Cp6Wj$9gt5U4C2fT8OxvGFPMqO^X6d1FU@3Yja!(GJ-=4>xw^x(KUwp|>Tgx|R>dkmRq-DcPq}{; zz%T8e)b%`1CvqQ|Ax6MueJNu~1Z(dukC(Qg5sTA{dwJYQd9mDs zt&c&NCGY||((P?$|LlSPa| zoubc&wb_;Dc~%b5Gkvjq2rNfJ=UCY9ut6<)Eahua7X;!95S_wndE1*EzWU-HWZz>&odSjU&@7zTAdHz&hgatlI0SoABZkENtHewA?NL%eqM0J`IBK}fJlIJQjDV`=RS1x$PXGLq;^1*qfM=3&mm zTw43FBScC@LBojMVsrkI=-Ip1$XQ}CXrpbQq|6~qAjUIATCMpxq}4^w$7?>IGhGLm zC|d>T0FaWI2t`8kNl4KZ0LOhT0ylN2KJmubb%w_Gz%_YIa9q=EBut>Q(YWo*YUU^a zQjW$-$)_8K6gC1f#_(T1<}-q~~O{3fmbYtqVUX;dgz$h2(5F6u*oe;el12on%xY zz8ikV`KabZ(iusi${42itctWE^w2C^IK~bHZtnSIsS~?ml$6=JPP35G61)HkiV)7( z3qSjOvn+ikggN&5dcROyA(@8wA_@yM0)9{*g*BTV z)EOh?YS7ubS|{j`&mE#DX0#NFB(*aUG$^t5N@t9e4l_;}iok6G|0Is-gR8a3>>@p4 zx=1exx0~=Cuoen}C01xIq(NYw`2{$C;BBYPvV-=Hl({jzrgp5>AYX;MA0Z_ch#2yv zoQ_7cB~U>CX~(@rIkc3c-q_EtRwKi{VIapzdFmZ0{otw_X?5Ks$DzkMTA5je z<^YfqS=Tkpq)=jOmHvM)XFxC}@O>K}8D)-4>|e%xf_c&N`H;H!kHwqmo>dphsplpn zQ=%nToruFV){ht&ZwYRlvAfoQ}zP`5pzP{PExxUWMj-bCQ81#1t!=&^B`Rgd3Bt2KN zURZhg6uQq^1yuOLx=N_Mt9Q8lSkJMxj_&@Bw(hRZuD1S>&i1zcv7Vuk;bWa$BLkhf zgznB?LkUIG6yuy@1 zJdxKaV6Q7+uPI=kRlqJQV3!oIR~4{}3fQCqHm-n;DPW&bz%D3YqYBuF0(M>j8&<$x zQNX@d0UJ`lURJ|Uz)mV)&nsZhDPYekV9y|yw%6dXaB0|$jsHjEz~ko9 zusm)q4a?)^(y%;kE)C1$=F+e{Ztlh2+4i~i-j4pZ+3xPSwr;<_t8Jijz~82IcLrv= z{QZH>&OjC4(_ZZD4z%}n1qMJB(Fq6b-avnwzq4l+)H&L0f7fhx&s@M?!DH;wusm+= z#h#wozP>K`@83YJ^r?CO#^Iq z{{Ucv!M2WIu)B9|ZlG_jW1vo~-6X8adVE@8T<}5WI;OI(?H-A!rgG&6$=h*%K zovtBQ^9P%rZk%s;p?==;kDmML_SgPY&3~`{gQ`zd9k1-Hc-ZwNfH?n2ZC~YiK#$YS z0QvQ&eiyq0cU#OV-cfa15-L@i7*`U$Rh}F4+zUIYxF@q*&cRh~(8 zCp}ajeh=^P94d#uOKWjk`v~$h-$tB+ppT&hIHN#ZM=!go08J-!3ur;>mE`lQJQwRe zx`Q@;h1)4X2@Y~Gp2=ks1J!H5AI4^>Smn7@kJ7IRkOI5I^G8^o8*M0dDG3%^37cnu z6ecCsdT2gA%M4w>zTom<->!9SMAOZrD8;KSX}(=(AMw=c-KgqrOOrDkV)cX}eX*sc z{i(Fhx1o+$!_ewBtl_>i*-{egfPGj}KjYc$shu(DN^VS%FIKj0bt_i3ho1EtU)F7A z9L;c?5Ymbl>>?toTaZg1{Sp#OGTX>W?m?`|77R?yWBZf%cbVuZr;`Oi%qSKmm5A< z|6;w@(^I#z_Dapis{g9$&#UgPyaD<7jsx%qe>PYGsg6~iuXQGMgnFiC4qU>Pu5hS@ zn0}yIi9xis@G_WKM#GEt)tmg9w1ev_duq=r&z5>LHA*Etb2otHs>bduz%F!zFA2+ zLZk!@scl>3c}+X$4m74!PYBJ*r1-g%MoBpht@2!@=Tt&PVU$xAca+B`h{pI%SdT7e zJLR)O3Y@k};HA_{Y~RJo%o;mgwc3WO!@x}swO0yNA8+qrf8a8D>sw{)jFFPP9fub4 z>Bj5F&gu;?_Sos4T0MwzI7D~%x74xNn7!!nZL0kO#Fc=+U3wK?8;?e?hOMgyu!f`b z2zVoSFdPnt*y*27Lt`=U_`eFVVyx|53Ms93A!tXZw*xtLuI@*UgLEHHFpl*n!wEQi zg+qZ*Ld@|t{gebGWoFqOu!+(OGvy#mnvhW?5`>)3-czAj7ViMZ&>gG$koEY@JE>#H zC_vv~scc&ll;5q?N_SLRME- zUxlnD)6?tJ9Ot7^n+LEnKch+53sR;V(^;|Vdsg@G(Mfk!(oLJ$o-hef=Y;B4xW`#r zr8HJv;Uu^oL=xhYNVI$PLEc96*hG@Thhl-tp#&@fa79I8Ykr{|WeXOz5Gl{iLrP%p@i|ehf=GQg-TT`&{w;R0;KV1J$^-p*{ z237#c+E3Sfy=J2NSE_!s^4}}I;{G7S{(tKRAAgO{r)pMtQl*|0dE+s28vJ<|A!HYB zU*KRd7h1B)$_XJAQaCh=jkj%;ryd%mhpHTppxgI^A5^q_%Q_x`8*Yclqot5iW_t6b zTUU9;o|88ZQ3t2sBPM4!gw2I6jcALkYZs5sGGHmebvyG=gObF!cXt4*;|*$yUj1y4 z-nzj>U#`;8C6nr0<(YFvQ{;WDOftnjg{6>E$ym;@);2X*Ut8s= zZMxFr;Cq6LJ_4ov+zgO%yzPBE2os0VonbxZiE+BrER5Gp8=%Rw=|KJ+P$lf zh^@k2>TJZeN)TBQ4m#{4ii;fIu&_a7JLs0iN(t+eW$NkGqe$-%-C7BvFvKh~rFA(e zdMqWePMzkEbxb56G+`JnJPW;J=jy{)$20VhfyO?YPoaE8NP>A5809&%LRq*}21Y~d zUOj>&&(ZU5jD+I;S%}OeR1}7$1~uDBM%CIfekk$~Lme8=3CqDew2&&t2A`Luk-om#g){;$kb}mE%S@pRhdm1mvKI+}p)Le;z#Rnt zttjcA!i!Sk1*>B5H3)@#g{_i>i&w*3*f2NNF_^6US-6svLkj7t`LU60$;{{^J5L6a z0ZrVV@rx=GLYyb3V*WyqQ#L0Q_~}((BbuH6?{=MXwJbFMY4g2JHyS_J*xwMZ|3LkK z=ficsUHggJ?wVhyxv%;cs=iY7c;)}7tf`oBzt8P~7aabi23G$+_TB|BuIsE5AHCmF z66awjaXhx8I*zTeWJ#7})pcY^wiR1`$&T}wR2j`&Srdf&I>R&b@PAXXZPy?1VpYA#vvZ z?mfTro%eUX2hVJFj;@X|HWREGEaw-*;z%UtaqAI^iMf9yolZt)V3TNHnUr3Ywx>Cl zY+K<8%oG-TCj-_E)Hr*+L7~dimt6-{h)W+%Mi3^t}J_HfaOUotnd_Gomp~b zaZqeXTwbhCq{V{QN!ZVwTLNoglTTIkLNZeB?UMDa@T_3{^c0!X;t*%8p}j+RAzr^S z$gJ?ZW1DsI+)e6rq)~l0ktDpdu-3JsSl6k=cAfq?neEy$60L2jZcn5LlNO{wElO7)g(; z@cd#^dXzkUi1Tw9PWHB(uKdFFRpRcINpYqnUp!5N9Tkke!--V-;9^o-(z$ifQkax5 z+|$j$M`st4fm8xTymjR$vKyzHMOcbGkpOF}B?>_ovJ%Gy{Io&y?v*2g=5~5dKp}#~ z7L(&ROu?BnQ?N+o=!ull3@t1$QKAs{t~`wFG<{+%*qx20=Mov9Ed0Hl9adg1=bI$< z>sBU22PNP7S-Jp0ux|NFd0D2-)|JCZYnUGE*nVd%lb`MC+XP7|i7wa-=lF+f4*P2F zulWv-u2*xo?$NrPb-voq*1l4EsrE$USmXMJuQhz4VWnZN;mr-V)PK4DqxJ8qf2zK( zzOnA}bswp_((&1jS2`~72!fSj`>8}2^iVOp@zWa;cwI_BAs)^?1?-KD|3`}%Go-+G zPysupfE`u99#FuJC}1B_!0uPTzC{7c<4@7rjmMv&VR`&18kWbOqG5UbDH@i?pQ2$^ z;!pATJ+$xg_&qf2QH6Hn@q1|B;DEj?!eN5-;|7 z1r9v6A&mo%eM-af*rzlsk9|tR^4O;|ERTIk!}8dtG%SyOO2hKlr!;I@q1||#RN8lW zoKzZ?$4RAOd7M-lmd8n@VR@WX8kWaNrD1ujH5!)3Nu^{A*xq%ekf>{HrzdF)dfmd8G&VR`IR8kWaCrD1vO zQyP}XKBZxK>{A++$3CTDdF)df_7QIX|2AL8lkL9__y4o4A8Pr*<}WwzX!>yDqYa() zvAW-`+gJN@wVP|+Q9W1n%f5g0y=`reUzb*RBJJ&TEwZrt@H7mwKa(mym^B!82k%?q ziLm$6eKOI(m=(l)0*!k*_uZfrCS}EP48bk?`E+8zNE?LKEF$CuE7J5p>{{Wet)HOh zLE~;BNK5#VKu#%M51tY#nV1J}NxNE(_>#0v#$96eo)w?y%mM?6l_TjWa1IX zcPE0Hq(JHmj%lYnR!Z;sH%w_B@UXOLVjCwjs)7-V2bjjQmL6kr)MRM#1&$C8ME^-Et7`a&c-B?IvR?f z%fP}{!E&?WYn4fFTA4x8*I{Lo;4UYWb~}ZO!j(`p2f*8rvIU z^*>dApzd$0-VdNR{#1~_@mxKc=t8*Q?PuyKnJ92aVcSZb(qb9}%D6NVUm87e=IXH= zPtV=?@&;e$nR-e#4z{6yO+*UPDu@Lib{du#=P3w``vi-Z3lVd7#S>w4ndd!){gR2N zLbF;|=?91+7Cx^ zrt7@Wy4(8FOy-=Wz=#I_ zy_c28wmc==ENoICoc+1@-hOZe#E8L+Ljt@Y=A+MAYYb*edn;RN^F1}HWXz8xGoVb+ z(rXm+oh1V{GBtqbD+IguqYF_gnlgTd@YhhJA9k{!!|rV( zSb^27Nt7?gd%=dc^c!mp=z6TZERCIk7&0IbIE9sv5e*_s&O>RC5g=R=y*MNb!Gu%h z3vRneFiRVQEmSZFzEPoAFvt?&!rnk^PvEI7bYsAnfz4Gf#jN6u+K}7I_zYYAtslUS zD5}0=@3AvId%BrZrr-Z07O@59Rl5%r8$#llZS=C3(_^gvac*1q(T|<1*%QMS)FvlT z6Gh`p^9OGQgK;e#hJzv4;enFUj9TvOYFlvL;92i2RQRupVGSL7;6XeSi@~u0zb$5z z$y}{5N5Ooux;e`Fy-2PGzc&mayWo2gaf=LT@ zIuYFa?a%R~_g&c*b_S=UFmkF0cnR#ZVHDs*h*mS>h>J}i<6=aa55VRc&W8eN90dS@ zUxx`r>|)qE{SbwYInMh1m!TE(`*Kyd9XO)zpsEq3G7AeyNL_99ay&byLEP^!v!muU zVh2lBTm`VRa%PZp(`7sB%lVMu_{w@xTr;V&<4})5PXrRmgZ+b!z4tEU6X^n zypvb^6=|IU3z3;&e_$T}3HmztJIr^EGD?F*ZLT@|^3&e4w?;T6v-`E;!8^K0ztN@nQ!R(EC z!wS#*-ldauNXIg%1ue|`nOmRfd@AK&T~JV1cdzgy>)Z50)S=57PvVGddn6?>?4P#k zhS*EPe&hJUt0KDWT`N4ndB5IEWe2Mk3%<+OCq5z_ngTC`lq+l^+2@AEzft*!f@@uQ z7H1R%duPj3VWnrE>m(p4LD-WbpPH2=IpYk{{^m zn8MpjhbMloSg3y6%0*H4E^0TyLeD|?2Gd>GUU&C%DGdSjTfT)Yl32OGdr0<4Dl7XS zkPI>jNXie}cX;|}A{1d%C*rWyjcw^nWNwfuO?hUT%RRO1I4 z?{BzL|9ADNy06upsr{|mo|?nesj56c{(b#_V1+q!nU^ z(lx7;mgBjihFEN|)l}*r9M#-A7JHox%nh%S^WYgyEkM7**1ILg6G#oS>-W`E)I1}U zYdsSrttuSfO-`*jo>!`eg>+gCC-+snUGTW4<*ESlY-k>zY^QmY(YhQ@=+wjFo2`Zq zTP(_nhdq}{#>U4grkWg2zl3`qC0gRnmmQluX<432X|c}Br1L_KXGFqWkxDE)O}<1! z8K-VpBSEI7!9dTRA#9(P9M2krVXTxW7z(6vR2&$oKv?o9q;qes4YvaW%v)874ou<9 zh6(o;y}Lb|#txB^ab58FA6OjRvz_s~lxszLU3#4&y<>?8#3=$VYfon8QzF6n9LQoG^Q?w=rq15HgZ1+i!2YRpCK63R4u$TX0ays&V3!0f zNeU_^##%6F<{-uXdotI=J4jY_x8fWweJv_gmutjI^|J8OO09&n%S{kgfV67H z>~Qt*Tmus6e7TF=D*b!90Xj8)bbMrL+;Z__`K$X5$Z~0cYGn00pwd;wu7q(1BrfEr zs(E&$^u{d^WXckE7M5$8n{f+7Yb|4mzM=O(f{Ga7LOnpZ38Gbj*`V^x4j$&ncR}Lo z;x>pK>K$e{0d|c5m#139sq)~KIK!@WaP_%&%(Vwo?J(n?(W$vma$(I%LNjgl-845p zy0PTB0VBI@PsDG0iQ*Q`)|YR1HASH%4SVXwSJcrDVbE%jUM8&F_>#rBW&+}irlYe_ zEqN2mMz4Y6v$HWU=*L8K^6K)vx@8=%W-DiT-574 zosL%s4mA^F<8WNVdD_%8q5VuanMfsOAzeI$heXyuc?sCL!L>kQt_3Z%jvD<&OzEpYgvfBk=$c&Ey@xXMyAOJ&)$nU4sMPl z#Tt*7UpKzQ%9$E&JO|^h@aFENpffEbQjpUE48CrB9Y0%d`ZV=Alo!p2$q~; zZhV=-$>k;#1m;*;@&f2JS&lzc^5LcIV*19H&8`tavk0-=LBKa@LJ*UIn3N0#Ml9W% zu=}^13RgMBd;8xixaa==_v)M7|F84?ysy2Z?MmxsTGzK6YF=#mQq%s%R~m0=n5)m$ z{Z;L^YU``NQT4y8b_4A7@aIyFr%~=?VW4S>*|U>V4^P2G2(#g}E6=S@q^j7n4~utE z+ufPt36ZB*o)%j9=1z)lAK+^Xsl%bv0ZohZU7qF$#Y=cW%GNOL$lj6@S&ElCs6_ncl7?6Ru>mJ)R7kFIAIeSx1GIF|r2517=AJ@ta&L6%*Y;|Yu>m%+G`)_DBW zT(x6<+0u|+LXo3i3#o86WyGRKb3B9c=InW@Sa4Fso@^ID>GzvcRkKOVGaK&_=I;SM z{hNJ2Pv&^e^Q($yr&CHZKE|*3p=z^qCybusog}qV_#{Gn7M0sj&%at;K(TZVTSxouscC zMi*jvldXopCEcrin2owavXuzx||>7H_mLqX}laMoUz}M za!}ilQf@e^{5hW2d7lmr6RW4?w)gQOU)Ji!G;$Eyp#@{j({Ih)hoZyuV>FI@K%1X5 z%mtm!pPVj+( zd6R969DXEX3AQ|!(pUq1s(Imy^WPeLQ0N?-I&P+wxCuqrRIzJZp3hfR)7;?twdIjvA3fMaou(vB<*C}9cQ^4M;fW1Wl+o6DMSHQL@ zU|SWiEehCX1#FW7wow7=SHLzXVCxmIbqd&81#FE1wpsyOrGWL(vCaRgfc+N*>_01D zzo&rxCk5<3Dqz2>fc=gF_8%0mf3JZ3I|b~w6|mn@!2YcQ_Wvkg|3(4(O$F>X6tG`c z!2Vwa?AH{qUsb^VwF3696tG`W!2Ts2+wuS%+x!;_*gsdmepvzgB?auCDPX^-fMw_1 zoz=8+>~{KhTQ;-%|9gG!^L5O(f3p3dw%=_#+xn%}xt6cDJPla@=9<3VbgA+88mAh5 zr{T@@AE#sdr^IvNEs(-cmp{oB{H3Bc**gp_5=^*N(Fh~teH6|=oPHE3%zzP0n zG|b}Qjf7cHtPmKD+qGmBz*0?BDM(FgZX6j7u^8YqhK9A7DExRF_3L(G-k8dKV!1Jl zEV2o*K-1WaX|d4K6xdVS379`i%VZZIi@8y(eJ9;Floe&z+1ZP}=6#_DY>p<`B15t+=h~+`$g7xOy2$np+a(L28J`Ew=(kvnp3${Lz;@&#;+IvC> zY^rk)A)8$~*~|muRh_{&j|XCj@Og*E*7cacBAVNeEDmMIsWK^<%p2WdN(&{!bL=wR z!Kf@$%I>*Q$Z;KoNX<@WW4D-hU-0Nu=pws% zV?h8e^pZ1jfd@cZ zF>^W=9zMcy;mt@&!E#~hd~|_djiK=e&ab?I9UZF-P)gFg!)(Y6BQb@08%KF?W8%D1 z^+Hsp(wN&TsNA8@aEaIjjoa(67*gjnhj7r$)PayvG3Vt>ZV0JtqAv*;_{JSv!u(lU zs2Svyg;(s#4PwEM(ZeWAp8yM9771LWn6|~~F@3%4^EB-pDP&Bfdvlu##q$;37gp&aeSTAxUZHpa?Qt{+Rr#09j8Wy~65)>*VA z{A|Ut_3B)oD4e`rv!F?AzE3TLoLffQBWdBbAS^hI`EtEN_~apKtO<;XT>{o8bPgAD zyOF|H`q0Fk$|;QAY-eD3ASD17mMq*e?h|`N6OcD+Y{?yA;hG_mv17Ytdn7HLMR|sz zpUHLeSbOwghS84Q^AR_^!q~C0Ff))ho|U|ZW zE^76KsDC?A*X{C}4(@9TKFJ=!+e`lBuX)N(hR`(JIkv+=2hk2X}-KVJ7obw_G{q~@y- z2kN!^3ZhB7f{JCCFmL{megtKCjnnhs;O zzTtdFD$?B`QXcnfXYP?T=NpTu^Tl@vd~0%NkZ-@Ii}rT+ zLP)vbXs*qjMjE?xvWrWJg=g3**JCLG)_8s0y~yMK+!XRquy_}lpKN_aEX$`KOkY|W)!tGVALw`i(>-}Ci-a@)3uV1<>;wT>ciEN$tax4RebWdErbYn4Z zDcOgLyH#ZGmE(=leK2<%S)bJhs6$zlF2;(vhb9QP{43?Siiy&nJBDm0>3iQ2TL^y` zkAML^ji@)e3`dB4h!PFtCXwTl^u@=`QK1)rPz|o$Zk^Drgpw=yvy*ppux1`lGl|gW~b_AP5VcS=sa`p;T081INMTAct zJ97^s!zWfd3_<+ftzUtu_e03?DHdQq~*I3=~Vnajy zQr&;6J6QYEwHs^n>c6dis_F%J?RESIG(w9gZv~AIOc#(f%`x~-Cu9zn72#6(n;M}f zb37$SZx&Kw(`F2dONhvd?Nn50cxYqyng&2hWZ0T}Y}bPi4qG$du>Z#A<^%SZ2Or$^ zU?2ltc>He)OP6` zsl!-o3uSYQ>#>xIbp#`sEx85JYGhLkihH>?MoP;%k(8u`NexBcN+8S4^h1kGR;Ayi zY^*}^U~?%KM>5;>CTjaJPx4a1_K|0QR-P0S#!_w`i|?c-n=uZU?yEuT6KT<<8=MQd z7?ynxU26qfFqV_pUT5*6v_$uXXm##9mb{H_MrB-kV$x=N`L;)N78i0)t5%;y{tCsH z?8S>8RSJ%(7Ce$k!{q8%?ZuDug6DH{c*$_jbJVWxIf;uOrR6fkGp=yY=FW*`CTCI- z-)2^M(M7wQZI3D!u5ZfCV(FN~oVLN5M%QVv&4S%GL~0Uofcbd06RL!kay0gUFXS|2 z*hL?JkOKCg0(M*hJEnjgRlpulz>X+jA5y?}DPZ?2 zVBeyE-KT(kvjTQl0lQZLJEVXeRKN}>VD~6s`xUSk6tH~?*j@$fZUt23Z*^P8I9)zs3MZg`=guI{_F zpQ*j4W)A%R@2Gmt_vi3}%Ad=5o_Bf|-R)>B5za8b9}M%#oHFbx8rNf~A_TQCx8-@t zX$8{@(}trw5h+Yc$TYps@67Wo)WbUY<`;ZgA^%6Tbic~=L3ZItKvG8RCjI!S@sSfJ zSV~o961yeO6H=d~-_1=swXvXaGl+PRtc;iPHCS%X^Ssn2>HePL_8_LEQU*Dbw-?LG zcqz-0R8ge6@;r(4S)FX?Q4&$<-kL1cGOti62l6~m^%HdYjzl8xe-J7^5f8=27kOtj zZstnqfb9L1_>z>iIij);mymRkD^RgQ;AG6OqGoQzn)}qF)uP~ z)7_%s{!17j^*Amltxu$tH17WNXY%!UKhU2&N4+1IK9)JBIr^u4KzSjgRBn)UDC>Tb zuBWfd*I}hM)30$vdN1&Rv{$wCyR?F3Og|PfGqGrDE*NAZ;`w|nvf571D^x1o!wiFe z8yK@^Qg(s@t`T?UYmmXHzLnY;#^a%xm}ahFET)N(n#(SzGC(Oeb7F<9O0_Dp(Zs?M zi_;&2f1F2$?Nmye2YEXuiZZ~;%og%hXw0yQ>@mqN1R-^cT|VZ|(lP@q<2KtJb>@92 z421+x6LDNVm>9&CA~g{&C3tjia0xF+iJFs3OYQ|Es$l78?q@Y-2@6Si=B)FRGCm`?l~l+(ABw7v@3CTB`fN(FH|OaNA6kGzGXAqF^uN; zG~ke))gH(WtW50Q+!7KyqHm-2t!YleoYcjPAwtwV;viQZEF~z6YT5b!PT%vsj`QuG zYv0v&p!Gn@JDPvL>AOvDYHX_iM*YdUKdTGZeysL^ns-%yr}_{?;J*XFYxW0r0zB{7 z2;CR3 z7|$Xnu{|+c`oZCg&84a1j=%tvH>6Z?A!^9;lwP~&(*=x9J~L@aezLI(&GlGH0FFru zS~3l*Ia2A$^CVtF`V-V{4(Dz3E$8Pg7FFd?Ch9O(^2SI>J$Gd zXJjZT>C!H1eV*su8rM4&gowsMjFWl3o(j)t^C5?wsFjx!N#NF==lQo3%=D}!GG~;E zv@9S3qs}}}y`{1?#V&@HQZO?d1La~e3Y*iZ%q*CgPQ+Q!I9MIyq4En-rp9b?DbLey zZKKEPN(KVN#R=R7-tpX zQjV^Z_zld9iu{d))vVpJ8}dAN*2!gZf<5odsFg(H%&=v}zZSCLe5~0~UBc0i=Xr*% z%kKhUCZRq zexp{YGM$y3pX;%d#F|c-Ja6!UXxy6XjdKZ%W|B#`jub~R>%^%?^S5LDcVt7o%wZGS%poPP?DN^&Xnu&)*%4G3sRw&(_2UWHYB=_?zCWN zbIafO%21Ul-I~7@DJkS(l@;bKF}GkVlH%w8lfI7q?L%$vYSmg^ZRu>j)bypM1C4td zK2rac`cU1+AnO0snlIJtt$wAt6>{&LEPMRd2l6~x^BT@%c;fOLE6&N=IR{$btSAfp zQl7_iR+-7HC3wta&c{*`H(@42F6Cyj^?4pdTH*X@&#x^u=blYf4k?ui2JXgVMSGq{ zl~zB0;#y-lTH4ndaY%K7q>M_Z_0BvGH{GL8QRjW3IR_t3Z*_Y>gX|49TBOj zV{?80=bbM7IF;z=eB{godPyy&-C7yv)3qSEJttTg<4`P&qH57Lzk9I87kZcQ;$SbQP4LZkH?lK;t=oRA|%XUS9p$9 zS^a%!B}%hSeVzx>-mapzoXMO!2MXU<=t9DAe~y8a&1cf`g;9)wMukCbz8j~NLs_yT zxll_z8k&z88uFARsBu}Sl;@hRqGo`rU=Uh71Iog5CK64+>40n3xY>ZdF~1AtaD<*S zV=A+-kOUhv@Fzb$JI3w};6Fg)=9vko0$3^wb1QsDo<|1n*LP7T3RWg)FSH2vcxS7X zqjP&9q*TCFeE4iM&i-{YI+F|~mv9E_%=6gc3Wo`+PFXaAd9bLcUzWTerEN;^o;(jO zK0&|4^B`Jj4}$wM!O?=POmAbJhZR@ofgbc|R~mw!6Ec5D7Y93rF3`=~vTFLb3_ zbg`%O*ka?>%@Zgkc9W+Gb0P@{Z9<8yO_Q)aza7PNR_~{ZiR;Q)N{Y!41TTXqo{&4~ zAY4UelA1Y0?TaVr6{+ZqF_Ep#KY(NhmdRl~ch!qvxV9 ze;M{y_I~4fEM-v&e5SYNdHiFA%$;UAwrWeb*f3H;C9$l}^JvHW=~hR45;J518EQZi zvgB?gDNM==cI%PE#gu=*h*Fv7k&OrRUh3AwUg%^Z9zCx)PM@BTN}P6zOPGBIx4Jx! zEIdHhFxU%*z{T!;r6)wn4f}Oto=5l{pf3;hQbf({{mBy|C1MEWwmeUqyN^B{+6yW< z5S61-LP;5ku7ncWlsA&)?pNzZrZHrhe&obR8Ck-dnw`mv$J&t}!^uhE;^?uc7K@B! zl91b#1%Bdz(O|Z;3r>cT(llr7_B>Cr+e2UUO`}L-Zg3pm-Or^oV8-;1o;b5}ad6Mh z#XT4zEgQ)5+`IdhAEUM-&mjjQ63WLE?`{rWGL)3vnjQhngPK$0bAcZYTH@tnceYj|Y6P_p+gPs1ZC{N~6|h>Eibpf!cnwuWCqrAt@JV0gsy7hkvGk+rT~ zqFL4D;F|U?yKFe0vcdtwBc4|I1{og7MON0<$6+I5{fe}cnX}o+JWrl{qYRI%Z0y~j zY@JrsJIqS;=Xv7fwKF`bRE?7P&h@m$8}a|l_xn_Gc8ZA5y@6PyzeX3fTXwfc+^2>?;b` z|D=HZNd@eGRKWg(0`}ty*bgXRe_R3kV+z>!D`4NJfc*~&*dJBEzE=VJBMR8}C}6KC zV2cXaf&w6tbqL?1?&$hU|&|i{(u7Z-3r*}6tLf~fPI$&_WKmD?^M9P zq=3DufPIGo_C*Ek+ZC`^6tK$**jE*>Sp}@FfPI?+_5}s(^9op{`0a4vzO(ww;9zKv zHq;;P8r1p+yZXAj2fK!5;ctK||5;yCcX#cRHSetHsD5{KZPjvBExfXJe=g;D3Zkv_^cGWz zScY9ly5hK49!OPD53)RpEXhLTL3S%~DbMo|t)h6>#kx^EJfIf;e4b|@>ZIR>8l|{z zt*lR|1oZkmPes&4k0W4|!%R)w_l?e{R3^{o=kV@j6{3)nU{9z77V|t;(I&dD_Lz2I zJbuB|5zL>dMT4rBXDZs7C0l=iZ2*f^=k5lU2h#GHW;?(xEg)lQ;7~MuI5QIro(j#( zMAMTegTW;JZT^|AGz7RwMnf@xMG|R9$`TCP3}YPs37*yqKnt(?hVneM(dKLm^_oa9 zcgeH#`%S12lGpM)E7Im{m`YyUpt>9yOTXU)@@0&7Z0%;ovpSXM8JIR@6)$C7jl}C& zZth#VPFJRytobte84P={jck|4$&W%H08wJ|ukH^DiWGIKdgB&O2h?I8bA4f{#`lQ<8 zWbXss+cz{4zDcYP#C{CSi-Cg; zP?LWYE7U_jvj}Hy7OG6_X6&@x&!yzdd*^NWvq<9%-7e1}S9giv7sA5p*ojfzs7$pn z{|HjuPM=tL>v=b_{h73Qd$$xJJTK(WAeGJZfb^opT<6Ww?@|iZ9dTR!G?u)B?kpxs z@Row(p_GGN45ckPJO8iuP5U|?YyXY*?zWG#-PZa<%kM$_|M8|zH|=kHcf(g39;&}o z_iEk2+MlYurRJ&X->%+R^;UR+_D6rNz=P`U&ptz)rwq$*5qXsk@983aXw3xIVkv%OQ=Iq>O7F0qW#_WH|lQUOdQX44l#NzG!l zX8EgsYU~J{@vP>Wodq8DcYwaim`0d#=AIBW(iRI&l=Gd1DjZe=bQecQtMNc^b`g6* zq(mL)@kPE+7kIGX$MhlU06447m~Il&JZ|$*?OZ6lG=2fL>9Dh$1Ye$*oht1eDff~a z#T|JbGkBCfOM8?(b@Hf(&uAH-l$p8GZOHTJ!H4KZupZ^Xd?~_KR+L`}T9Mpyc^*J` z8$ErzF>!nNWZND|%Z8mL^aku>eR&=>c#0n2!I)q8EHaW3(K$wv;kjrUR7$QRFyRF` zRUSOa`f=p_P@YE@o~KVQ1R6%#iP#eOxY=7-^=)a5O5GIvWheqxiEpB~H|32`#9h>>2)ZI9c1R_X*0vi-8FF+;w>(%%)#8%V zm0!ep{0aJO3HyUo6jF2;oPeDd4?9)jOH#__tkjghC>EYOu1ltNdY(0ql9^9MW2}KM z(`!i|b*t4F_XHW{!EIDxPv~luM@r zlJoFipofAJAK(7j#iRDFlzL+3>0l7uuYy5au5qVEn;rfvo4VWcX{@b+ry=<0noIhz z#Aqy(N=-sC1V}7nubCVttwm`nYR#vRmx4bV%N21k2{ZmFEfit#OxQl#!O0s#;M1E= zBA*aF%?Gq>dUP%ti-8h zWrzkfCFE#8Z%k!6cjn_rXOn)2I{%Kwv{2lAo-}`!7V33|4zLd$g(KR?Op0AeLv(;e zzA4+9pGRgV=|>XTlvoPFVxKK4m+LN9C*THeV{rB4by7h~#54U`(`E$*kO_BN^ ztgov5=UT1iPilhIe_1_Sb)ru z;I~TC$97z{HWYZ!)zy&e>z0$lXA0yH?<6--;9*twWjm-n`$SS(fa5*nh{NH;Cm~nf z0U1h480KVC?igQW7=AGavT^L?PvF0z=i*1B@$-{fIs|t~AtveP3nD}+{aPJs0Q&+l zZ`eD&u_t-Ne)#78)u39tWTsR^IG!|q&pOA&7?OHX4WkpwJtrBmW|TE z4qjW}5l4IIrX~2Y2u~sxai{RzH^N;}K%&aI-y*BAsdD!N}gqAl^kV0k1)qvaP+ zfk5;&p~;;bV|x_K(=&0n$ztgt&cu^ky^Pni7KAyTAW23j7JU|-(^h2t_s+%~-x$k}FKNmfub8LcQ!{4tdj(8YT{oIfupx$Qo2? z5uq2hd4k;1JSXXr z>#li93&B;0+pyNG4NnUVqXdFuF>#b$kXG$E$IAzkiFy8ky*FxZaFi&z#ZDIN=JGJ> z6>s?e8-5e58|i)%t@kQm?@_?st$^L2fL*VEy-NXmrvmm41?=q#*j75W<#iCRptXw5 zxAj&9>@5n|4h3wx0=7*7+oXVPRKPYUVCxmIbqd&81#FE1wpsz}qhnkCRRQ}i3fO;E zz1x*1?>M+zX~g zZM}_-ZTUk5>>ns#e_sLn83pX86|hS2+u%x_=>Olkj?SUAh2Q`0_jQEZf4jY_?MmyH zTTiz9cFVS=&0zWeRQ(5PpR4&)^%ubA|0UmdeBd7H_@nn1cxDfUxQCE1DHDrKhLYz; zA%T1-8V9>`Q`MFlf$RjJmYm1zO7{Ctg%_nd7*jvoR^YidhUq@<{GvjO0AH&)q@AP$ zBqd}R@9DP`cs>nMlZ771ebmjL|j&F7X9==Fl?QO zgBNwwux2dLwZPogHKkJIb~YtU>88|q!RIx;ECs_QaVX9Pjt4CZ>|p3Tq*m188f1Xb zylxULSVJnI@Oijj=54}_APt)&3wZi46c4VD9L#j+YvfG7>DpsVJr5N^Yo*$=gyb6vTaf$^-A~k3K82%+DN7~0yRaFl9A741 ziHgqU>gHyN_9?L z;N>x8N~A1eCr)YNOUK~CUqVPA-1D-fFmujvI0#rE;xlj^?@3n}KRM)L2+sYT(^{%z z*J$5H+*8)vsfyjqM$#85p`|@S%rf_>&N47oalt_QBnc^ROnE9Dg^hf? zs02%J7??`vz!)x#R+i|_#FeLXZ{c2~w1aLWZk7Y{kHbdqwI8A*!3-=(u ze!BmjvGq53x=4BsL*#w+uOara%ty4sz`Le~a%$U&q$=*|ztz{BZM9 z)0Y~)1$qCv>n_*+bZvFbi`Cz&J`aE!`e!**;F;&UUL-t1=u^6^Qlx!#%kdA zi^arqB@xfOtS`YR6bvnUcN^A?u*(o0#+C(!Eu7|u#i|E}l&~u{f3>dHrh}WP#zY)4 zJX!&K$rn#85jfNN50iiVEd$zV4CT(^kR9_fGLcR2SUCaBW`fbvnv@>j=_LMx|9x)BqRmaDDO$-fRsB5y+~Oh78XB!h!ePN+h!j+a$H$T z*`0;mNa@h>5vml$L6su7vQR0p(z4>Jm1Q!O^`Fw)ytzFa+VY)>ox=DaYr^GNp$Fx) z|HY|Q%1hSC9I`6G2yzmmOsIqSymDQ-Bdg->5vGMh`*YKP*CIa9ge4)$0XSUo6VW0h zQD*;Tffxex`yS&JNYx?{GEJ`OrsZ@^z>Iv9w0hGSwkQa_$3lK!YCXf=|xg45L zjK4VljYIafLN{-3eG|34p&)Z(Qf9G}!ldnOE_vBI3%ih&wp>MJRZ5#KItz>~@S=|` znOsXf&OWuMyeZ{w2p4Z2%<~BMd$c_>=@|T+7(w5}*>nw8Y6=0AO!URGRLKa{R;ijs z$ygFb$}SlwJ51Nr-X%!qxlvH;vf*YfnYeemZ0X3Bzdm<38pjC6%p95>HLbYk96CDl zOlkuew-S3jZyqeMqR{Ypry(0*^gX_4|5)fEqszvk^>=m^vo_I^%LJ}9dJzuW!-X#F z22=V)YBw-d`cA`rbJlaTJ>dmHg9p4U^=)+-D(u9%jO*u=>rxselFg=B2@fQJy%>zP zix3<6#|k@;{Mjry#!ERxsiYR9R|wSsC7CG)vFEbide|l#cK*NJ_a0ySx7ts%{R%|? z&$j$?%a!K8YSJ4EjqMG!^_jXaLhS!XYu;Ubw(8>mylH>3_Z4{J^zF-&)INhQe-ioH zpAiHpPS7k`gk`#t=xHqoJU2Vu!otmFG42DcCwfGPc$|D`cZS03&~LXq~4l&T?3<LrJSr z>KrYFL&#}}en&KQJ_-k}g{3p`@LVVk&g&=&J0ow5l#ihS%hneTBAt=tI%-S9xeN^= zjFY+S;33CJX&J5Q_mfo1MhPC#u`P3$fr5Edg!?y`8^z(Cv#v0Xk{HloV?YatF%DtO zA`vZOQ-a&u#S~iQ>yr@`g11em zrX<88z5&9OGEx}Dnx4Euwt^BfHXN`VK^J6|L)~9FVG!zLkoNn{+X?3vmt6N0G_iX0 zQ|G7Qvcw=@L9?xv(X-3Efj#Q3!U2@?IQ<5H3ck&aPR&9@KnyKu@8RW;QrQ~w&xOJW zGTTZ|8N$kg`S*yXEx3t@2hws&^Kez+AuM?peYlH~L20nKSuxHwLG_+E+e3HZrbBk=(BG5NK0Z6ky3_Lop2S`u+yWLp7K`!G8}VRPdMGWv z)OPC%JmY*PJtl|2fK5W)#j_{UvhDHj9-WU(nWG_PCKK9Jcr$jXNu7L2V>F~g*E5n% zC!;ekquZ%gLQClz9WL8c7)FX(maL3$P!slph9b#insQ&psk|wrUfFQ?v^Kv03aVq{ zr`encdx4#gfSoaH{`WCo|A3n*Bqd<|n4SM`_2qmWC);0b`)=#5=1(@?-L%~J$Bo+> zPS;--eN0synLXngm2D4EDC@P(0I zCrB2_ReV6&UdB@8_gfY#&mZx^K{>V*G$+_ddY@LMx@Dt$+;yBN@GM8#a)v5lM%A#P zR1>YroBxJodTW6vXBu7JK$WTWn1vlxc8(|mRFl|E>~Og4+E?ItpAPBsRH2|IHUcqK zUA@c|3aczsDi|+~@34m!87pu{fhT`Dq;Diw0M;lxo)Rih4l1nx5_`D7Q$RhTr>MkW zPXt$+Y2+rGBwaElz9c1EQg~qB8+J`zSewHIo*?Qmx~mble^ILp?Vana%kcuw4fUi> z4mWC^USJO>UB6sSLw$=}AFm5(Y@Qtjo@eSwdY-AVL^y+y_?Qlo+}o&cNvni(w-

zsV8*up_;P(yBdJ_QhBoL3OpN?Lf|w|?V7RiPbc`Co=Gz!LHlM|j+0U{w#oW~1)i#E zlJ0g>cA<9(uM%2H(J`a27SDzYQ@E)gxIzy8C2m_#dXi0{Cq&B2*kOT728$7^ysdL> z-7LFD$H=r^9f{Yxj8l!nl5tXVoRKZxm+F*E3={M6!NMsNbN`FCQWqT|Lne*#Qnn!o zLI(AyQ9nb?W)+LI?aWFT-ZJ8$<@a)*lB?b=ADFhF#OGZXd6uLaMtKLou@o|Vg%-eS z*z&b9jcWPG6dVK06q6ubq1&~52d@qV9ixBZ6nUs{5?iv1u3;6QDc_3b)9Y_R97UG8 zi1JxKu~nt1a006`Ob>Hy4+d*;w$GjtkhEeb*Byo9NTx@JBzZIyx_M(P;o*KRrC`Vf zw6tbiX}nsth|$0>y3I9d-;wH~ujbzBZ&ttBI@ock<3z{(?cZttbo=|;)9v@ReY5S= zwqjeX?V+~YTffr!@z$4HBdx71UugM-ma8qnmhP5X$QSUz=C?JUZhoNYdrg1X^b<{s zO-Gyjjo)tkWaE1q7aG?$e68UV4J!?E4R3C^rT)wHAFY2^{ZsXQ^^J9(ulq>N;kqkz zkJjz1^VNQ~_LbU8wI>?KIzC%nti8YHJ2juKd4Em1oSM`~}!O$LUs6X5_sPzwa^>ud-b`8zK-y(fIJ!Y)H6kwks zVi&+}f*QMFUV-m3)vx+KPvkJC@ZC6k_X_d5GYa2*S^*nXz&@^keLci0JPtjW+8?GB z>h@Lz?2`)EpaS*@1?*V`>>~=;GYZ(#3fL(H>?sB8Nd@c)1?({e?4$zrr~>wg0`_4A z?1TdLumbjw0`{N+c3c5Frhpw)z#dS*jwoOsQouf{fZeZveTxEip91#H3fN%<>|O=z zkOFp40Xv|8-J^i*SHSiuV0#s?yA`lK3fOK1>@EdtKmpsOfZeHp-JyVePyu_F0(QFs z_5lU#HU;dP6tJBN*!vZ*TNSWd6tJ5Wuzm&XrjA$0d)ln0eiOs zRw;fvoOh{bhNl!bJjU<;KjUkEZ`)wYUpE(H7@z#QhrL^q~UJj=7(H*=V(wMe{YoRKl(blES2#m@;lYc0(G-YJrNQJq4awGfYpF zXk&FQ4wfI2Q7{dNpPK*&ES4?RbUAR`3n;uOtzgL%X;XnG;Z(5saT5@s(zsDWMY?vh zl%si>v9Z9jaURjP)3tIXOX>*}uA#DxF!p8ohZ{^G7(=z;DhV3YrZQocu$x_q$_aXa zD-&!hoEJ(~1?z^A1i>agtnvGBIWY^UGNF45Pa~m;)ivqCP&9TtF2>8Lj4SQ2wTHT~ zQhKFPac3cl{6^^pr`9r=J@?Yl1SXexH06jgQ3gn07A?#nv#zXyin`R4ZX-7<9rjep zfe_I0k!UItiutF~nMgDd4DRmk8GwA;EGal7KT2uA;At&1?`MHGAdDu2I!Q;ve#7Cx z`1#->+{N&`SeFXtu&&$b36q%@#lnK|O?z*(Ka;>88!YuElbl(E2G+D=ldoIHT z1MFJue9B{`{3ww{*Pq z`X^iOvv(IFD2v|Z;ngfj6&FeYxS@5OoWeUgOW@jIkoOy7{9fqk4|E5E)>gEj1J>UI z=}_{V(Nm5U!YG~aGTFMx-0ZN6SPZC(e)pA)uoPaDO4GPhd;OYxK3teViB2yksQrzZ z*?SwZl{KX$zxHofnoku%D9y|jvdSW(=KHEYRQ1*_q<2rB*4xh( z)5RiB^0`$f`|7f?gpY)M|6q9_<3 zDS`&txs(A)xp}Na$a8c&Hc+X9T45h-bVq7Jx!sEqStirA=q@tkN*05+y zxJO~l>OQ%+9!p8D#n#Z=F7Zv#foMD!49!RO^kMC)iZ#4;bZ@+gd6wv#Rl>7nT#u!- zGZiI0#cCumplehSJG{=h6R5o(dqSjSlvQWzidCX(lcO^`7)dOzWGE?hi1vp;!LUL7 zMIX}YrNbSmZHBEV%d5ND5CF7t!hBQ2w z6TFPJ!4pnkSzCBcbhwUHv4jA(iHsu^i&eO6T?K%YNzZP+Y}Xf_6+Bke@uxEL^Pyxp z)dL4ed6e31s<6a+Q+D%eB!Vhm4F-34rLPSpWu-Fp24bO9It;4tkcc;uV#;U61ZS4* zg+;8^S-pQ%)xr$ihhmADP|UcK!4Spr0mDPwdAuU6t~sJN7cL^%$<>XWsn7*&66PDo zdIB+lPibsbF2mCUEu}aTW*bB%(QHHE0+JkEy)MzvnN?IIT7Xh&H%p5s)VW-l$fMd+ z7cwY{UG%gn)=A=ICaRTbAbc#Xc4_3^SxEB+S)GcXYo<;oz{3tA43}9%9Y6xJ2MQ@< zc4l>h@Aw5RnT$p>wqF2!UUVi3=~l}28QB{Iu6>0hay_Xl1fVWmM@%LnOi5l^@hjYZ zdE=!#`E+9ayl|b@M+(m%@7`?FY9=^ww1VGA6X|A^Re)w=;aUO4-+4=uA-+5oh zCOH59dE5Q1Z)v&Q{L$uHn?@Ty(D0r5@6>(1_G2~gss2&O|99Rv^RM#X*}IE8dqn^8 z5LI52DYyn(6fuE4k2qcksl?Xw3^y4KCljf}Y+9o7wlKG9yy53ZMTG*QMmV|OQsgNt zdX~vI)RQTeu?DZgB(iZne|<=X-QY21Re3>Xh|kGn zB8hVXI~&-CTP3tqUWu8fgF*EE3`Mu*^qT;xV$mygpGML!am5#ItuY@MrPoc2La8@O6)7PV?;u6?BKeQme4{y@vuTHf6J9=+9D-r^ispnTDyX`JJfdh`(ujBy9mhU7TH49%`Vg6A>a`b1jv zn$B|O_EMs{Kt|Tn`AIOzji$k51FUWX?C1_V{{W(F=XI^fGi7wr&+GURxCnRedaO@g zM`FP#D^Yw9r-jZe**fu929gzcw!ihsO|K{x9t`qz&+Hcg{Mp*J*(ZwIvC2Wso zpM$WZIMtblrWCWrfJ;W6zR5mgQ{TGjqB4oGFsuAD7AVz-DSp!2DjgI;eS56K#|sb2 zKM;WtH#fVl_yCIcrSL*6+K06?VtKR#ce3SA$l%FFsD4P zC5@;?=rEOVUg>&cq=MonF8ppVxR9BNMN@M)W87DK6Ve-3h)9Q@@jmj|Tb7gbMpCFU zhS|xJp%?Se#@NG%*$ocStrxl>;+fu=fFNR|oxYgq% z#4QBh5T*7Rn;X5QxK)g#yQou<_#z4mGz%e6L&Y?Q&yqJr%GIQEXK{<5)1^p$roBeD-0K_@Ex#Jiaz*LGQS2>o5Ym1=B0Med2nM!CWN29S{ zC~iWAU3!aRTZ55X1_GX6a9r>RM&{Fs4D{yWeMn(|o}1<{+?1P!Q}KwG<&-BxN~Y9g z_Z2rHn_+sCe^F(&y)ZUdOjG39`<);uBfcNR@onF@=*3r()E;J8-l*pQ{VHT|vTdR!!hdBe1G=Y2M#Mn4< zv10#a-H@7#Sulvy#lNiErslej_|E#i;A4^Z>aKKrw&N8?1i-^LHU=O>^7}$nD~s*N zqWo2TygF9>Q1$IR8lg1~AVdnZ#0dn_#6LV1f)*L11L4Gr|O3%1@cVEbpg`nAEH{@I@X-TixZH}d#& zXZQ4lyZ7{lhv2$$H(>XK2fISM`)8m8ZDz1{rmufC9BMqzzq@Cqd$xN|&tTU~U*Bw3 zUntbuHMDyu)TQ<94$t(42E)5|hnuqkOZhI36?m2sudp$}ze~c#6|hMK>@y131qJK{ z1#CtE%j1;L4zWaj; z*q0TsKcIkpw*oe#fc<_2?7I}O-=~0mrvmmR1?*J?>^l^&d=EpLOWv;V-75;%Wd$ss z*J*tDyiUXNd7Xyk^EwU7=XDxZWnSld0@`=^o`8nsdjcAk?+IvFz9%?C+E=Ue9hLn9 z-}lk@@_io-s}i4%@B3)q<$GlsmhY8mSiV=LVfi_LhUMn~8kV0$XxNy-{J_snwC~=i z_~I(D)6Xf?ZB_xRDPSWC*f6{QzukAq*YRNcK-*8Z{(8&joBz1^bkqLEBlTacKUVjP zbuG0EHUCr-ul}X#wyN6zxQ2i9+loB#se&7&snRg+yzmz7^ubBHrbY^r>TB@M4z;=$ zi##dnRQ3#22kBj$;X<`^3Q~Mf_}N~NGIeQ|g26~44g7<_6uZ>e9q0-4b@xJWEXU0U zyM@GSk2H_7W4rjks&^K7D%J_Qw$U(j1HBn0I2JDMLceXVb$P73!Wl5=kEg{ak!W9$ zr(d1Y$=W?h;UmfLTr>@#5;IAMij?p|CCb*1Bk!gnPue=5-$CtL$G|-dUCNUX%qkuU zB_l_pGj_RpLZsXb6=|~g<|bcN)tSv?+ru;I*+FijYA?U^d&NTayNW#d>IB_&dfFTp z;xZ1E#s@+vbY`$qDUX%X!^U}2aj(#1k5e1RyEwPHU5=AdGAk`C4aA^Drgs#Fkm;yS z_88{3eC9{3lC(>(3{c9|=u-NI;vf<`L^tK*B$o{q2aw#! zD`crb-mDAJuy!yslZ=MNe+a6c3@hWMG+ooW|AEE9J=-l;*ZztT`ONqt=7JD>%3Xn z5D<)i>;n(W!R?H+7B{tzARkNj3zRVeMB0Xd#0$kfl*x9wZ#I?%J{J&61k4OQ-u`bw`>@`6c;`FG8yW|*M~-0#or z4Q^S}Mzq`vic$jFq88kO%fwrYyHN^VS#nN9l!BN>Bqo`br_ws#ggRmkqs1QH)v{!( zIjkWXvP$Y_KD#-!GbdfiRE>PGvW>-VtZYAh^C&uX88a9!gtX!%yM#n>7jhY(yU$@s zRvR^m{GAXf8`jAJEY=3tcLfeb(}y!N5F#QpGZRfuo(u+)__z6Iy3!dixr&BZykO&? zWOG6Y2Fv(KmBfFl7{Ds;$o48NZ!)hg{Br5xO{gZ8SX#+gr();-JA9XY9Sv>Yg6MzO zT7IedgH30u`rx$D6dIOF?5wcLq-u)CaJ}fEZ-Z^5DzU-m6=`HI6(^BK z_zGE7CeB4-Qsrkc9y1rb7|Wf{6ke1PFP+rH*T6^gJkzLnp3oc^3=RLRmMopp%u}B6 znNo0Ya4v?S4ArxtGt4nMk_l_f)ECr_Y`sid5fgDVqCTArm4dgj50&^CRlpJ5Q#^|D zpVs$Lw++lgSqQ)MQHaO~%8?|5T8k}-T04B$$gfFdZ;t!U;t?dhU#F|Wj%6TtJ73Kv z6Y(f`R)D?qsfjWBEIBQMNl7u+54KuC;GCUevD$Y5mK&6AQ}JOWs-RG1dq3W&5C_Q! z+GZ!|36T;srFK_w0?G8yT~N?2(i_M-!9iL7m;yAMX#c{0SI6Z>h z7+!;o#-i*9&j;1PB>3K6gupHKzFH0`tvFn zNkCF&rVhcF0|GEv4#T`@Tp0!6&WJ@@!eMkvaTHlkEZ<5UMrHxFYgaa^=4WCKeO-C1 zv<@znQR%dP9oL%BW_^2hnUt7(#C?iQWvOS12T&$QvX5P#OeB+|$-pK+6a1P;g>?oz z|AT9P$7Aik(Dnyy-K{GvKivHJrcX4!r{P~4GWCBBHUKZz{%!4%nh#ZfrMkE3X8`)f zA77@(bD?e4$-!qZk~k`t?K4s7cWEEsN-Lajs){`4S+7zyD;5n2lqF_wb1`rNq*RbZ zPtizhMjk8RKbC|AXqIi`x#!yybAxni0LuWSq}a^C-UI#Kfp};s1lmAD&xg*INP48m zbDmA5%DWw@&SYV<=A?_{mtYDf>zOyOE?rbzYm&gERaj)*|u-G{~**f1O zv0qo@S-TW8l9nz&5UgANQeKv6v$e=mUk%f>YSYKS8}|Z)?ZSPNOn%-VDJ7!|))#s5 zsD7Qi1GDpiL)mO}(b1STG8`dg0;3nZ+g(MTVriTn!CL4)CPNUkh40-b;!KI+K2wxK zN|_m_>Fk!`G~bdflkZyuAF;&1fpj){ZcMwtn7Nml3ScS0wLAZj12`x7ni<9l1tQvo zfN@O9t}nh7r8K@w4xZ&zak_{MHhHUiS;*(r9`V-VOUnU#(OkWNum5u#aZ*NwU z_T^#_Y4_3t+X^zqFqC$7D?m!}HR#|Gm_N)ut*aI}TpGkvRq`he><15l+=l?r>KkIA%$M)K`MC)I)o^APy zmW|Cn)bx#}hZ?Une7#|`{>8d4)s5BuSk2dJdaLiMdK$p5v~5Ak!- zqjO+^C1weB1#~*$jQiwq-=^?lMM>-1ukmbP3i)uv0o0rCq?Qgr9;uL{Pw*S-@~>1R z3)>2w7HndfY%43~H}EhxkcmfPT0|&fQy}#P$23|=9JV^dJ%N+r>1aAuNtgyfJGL^tO+}vR>^dX}gAT65 z(?kh6(UmC<6?qD@bM*UWrv$ym5|MA&S1Xg>R^*A!6s*{s|LKLsp8CvDPv6jRJt2ZAPOiHSZjfDNYYAsk~JBb&cL07+xsg}M??Or zl%%=UXeln>>1Q9k5gixylG`d7N=ga0Y<0y1(ixzqRyI#xOqpV2x3f2*C!{=)TZ?fd zGOBMNpI#(YcBSK+mIKR^N*3plRA+XHN(#==5(gRU6KS#FqZ0OWSD3(>Sn!iosgYQW zd&gv}i!rQq|8f(x*3-g3*;+??m+(Too~6(XXZd|~SA30Qjq4k}*6@jjm4>;7H#gi; z|K<9R*1xO%srtV9#=6hfeMBiX;9zTO%NJUHq2+2zu%)}Dw)u0-A8dYG^XcXXn!eZc zhfP1xwAggC$=~?x#!oiBw{hXMR3^Mp_8Ss-LjrF|;I)+i#%rO)^y4w-XjmR|j)vti z=V(|SbB>1PG3RJl9&?U{cbn1;I^Js_v7u z|Gjp9&F|KXR{wnU`l@Gr-vGGxAN{^-JYV|}g-pGWSLHZlj0rOfb;vJ*eve=T0e48u zEy%82VM#X1fTfC-lFNLsl6PO@`OCNI z@&-%wfesto(NVdyoUJG@^fTVDzXK%s?9 z#3EplZx@yqLdq4a9hv{_u=qFL_an8|Ydm$gf;F$j=*mjZ&Q1c75;SaRYp(HB+6s=| z;#%KQqMeHSxs-*Wa!+2nO);F`M9LU!j>65~D;BEXc8%x0?xCAvVWHs7}Pe4iL?ZU>us+AkABZ z6rW?@+1XI+{5Uv!^1gaPOPUz|qNq0x2{B$9uJL@>3b$sWlZipe(sqR%ZjxRIX=RO$ zciu-5Oms441u>^UL`~DXuJJ6>Ptdc8@qma(3qOlKjl3Q_u~ITI54KG9@kM+| zS|_8Ov-e!%S*1sochT2U==Ppe?HuJ*lG3_<+c1z64~ffK4H?*6MVVa9l!4xlZQ&5_ zyvEa7k1DuUh;T+QBuf?nU<3%^=68> z*N!~;joZdr0+KQUCl+o|*LbZFuj01TBL*=S?{Stn@kAmTcWe{w&!olMug&3N5QS5J ztpU00pzjb_d0-X6A_uyK;&@17gG{zut4Ah7bfc(gR$6LGOS1&c=#k@g1@Oj5dGUQK zde*a#8{ZBr&U1P7U#mlw3f7R*!pdEQN;(L$lrY9+V+^bcp(BZ4oc3<7@S?On=Jd7e zS}hXqUDl}67nBc9t30bKUz;5pTn~Vhh!G{m?`I)4LP-sR>xgfgF-HAMH0QONhxImnTQ# zmO&DPh#x*4k1ZKJ)THkBPlJRnz*#~ZDofpqbv=9$hKmI+;_H-fmS>`|3`OKHqdbvm;f)1*`(oZ8*fxu}x)^tGr|-L)-zDrNqx>Xq``_gm{F z0Me>45i{vtjbGy#c{^V|5A(ga zPdKH)D=94)EXB%!gBe6+)xsL{rcRtoal1Y|^_ZVbX220nORrII_GJXa|P^2H03J4l88I4EhGxNX^_HdwEgK&k6Pe8B&b1{=>8Z&3?1@pDi zZ>&|I&aB-mLd`&~1P}`x_)Ex$1_9jWp|limDv8f6oN&r~iA_cJ;1=MmKL&0;!5~Dm z3&n!L)8HQm=N92o15a&H(gMbD*0k46F{4nUMvARwe2kgTT0gVPB7_}#kDck+)6HUT z`u$I0L0eo4FB??ine7Y%zi$zph;!T`bRb}a$(|X3JzO$_lUX#*I+}6^+=3ebp0wFQ zi~qV9*3i@)9>g=T7|b!Egi9mwrO^{-j$iYm)~(0K<{L^rEc~vm&h{@}ow>$yV0XSe z;_LkPHHYC5)iP~a{_38=N&{%uDrYdua5ZPJF*X^#F@Np)w={oI+w7*yUPxwDa~HK5 zOjE(9RkfK5zc1#k$!qr+^A^l8tDCp1--}$^h~FEAs5R5|lpNXYpc9DT_Idv`o^8G>+rkd*l%(2DodQ2DF*UqVfD<94JANS)%fQ(! zBGllFixFNv0M4y&pcF{M6&Dcrb=VjhTUL0d9};r0=+1usWmrGpl9XqrSGXjd$}B7- zwG>E<-Tm=Uyl3Y$B+L2f+aZ!sL#~qIu zEe8T-Pc6;QfJ#b;7&|Nnd4z9v@vvFfI(Bk?hByPHFJCY*p?(P`~f?illLX*NlM4TdF zj~`AZQi<7g>2H=;kfjb=;cvz#zF#l06!a~E zHiTcR-*T0?u>xPvH?1XK-pB*NiLvn@|GU@Jz%K{I6`?7^`>ry-Rp8XMww&Bkm^C|F z@B;Qzrt>%rc}6U4Z2V+OEq;}GvsU|bj{$Qw8jmC{T6+)75# z2`p^rEUf!{8)}3YOqm5jGd*)dn#m9eRvi?*3Y?y}${bTc2oS!>*>hGUghxa3F|)>( zuQESV_&P*ccYb{>mNAbC+sdE0%G^t#{C;=&tEwH-GzDNig{*95CH2~?%wH5r0e8`x zR7)=&!K=)H6KHIA(^yqy;iZF%W;LI`%7XmD=jYv@zd>!u2s~;M&~LxWqW!{*0=~jG zNzS&t!6;9>D~>WHUUgSl0AP>|xRbvYyv!;0O;=e^Ul0(SQ*HzibM+5;Ou3_ph-T=O zEfbLS=aR^7yUHT>0#nHQdn1^7Obq3ka)AXis?}?*vWUIVkQZMYR)R+RRThyKgwuA@ zXo%gMq=&z7l?CAixg>5jA+u|5zRDu$f=s~t_C|CVN!Om_x)w`+7QY0*j18`WPDkgp zQm^)3WpQb?1TX&^!OV;Qt>>s`TC1$Y?^5T=j2TZj9{N)BM z!xbinmzdqYIXT=!LZ!*!C1#utGU1cMnp0St$>AktrVk|f&EH^p4#7y^rBcB}B zoTKvO@X~FZ51$-vA|J2G0mdG)?!UQXkI&??h503B*ne}!9w%guy~dZAp*_f?3g_=N zZ=%xJLmT5Db|Le}05?1q8>gO^n5jK*nYuAtuxze?v8o2d{D>rkB8=PaS+)(FCx4ee zHJ6`5URJKPCthME_E0wH^qZh;ZcWey;W#s)|Hs~!z_)Q+ zcLR(2qz>z{E=sa2%Mu|{yd=@GOp%mCTQ^C`vLVwT2}-a)fW|?IwqysC#h6T*qjj6$ zNSgHPS36CbIQQioP2HSMnxt;xrb&}D`EoaR8s}=iH^(k^7dyZV1k%c{W*dv#`R~qu z-pstY-n%?(+Fr_qK1m0$h7&`<(w(ujqc z@p8i}eWGx*4_*Z^*M6#0Gzx{!2zz@J4$N#Ogb(3Sujb;es)rhkip6ny>C8=pF|oa=IpeFay_wlWnDt&e zvMg(RGjk*1yRf!=$?~E~+nbqH#KK!pcu+kjzUkis9bpijqzIXa=_CD=>nfIu7vF8h(lxMN~OYTSAUe`(IXPmu`_d0H}zt;9k z+Y#$$tsRzkS=LA?^AF8^rZ1wi4}qWH%u!NsqB`Dm)f?n`)p3M;o~RDZ=jTgx9476J zsE+wyP_DfxJ=QjJh)9O0j(O*$5V>*YAQ2Ez9W^IXOVx1)VM%_7j;j&y7qNOsHjbGv@8v*aPFGvAQ||u6%Ka>!~m!C^BUWmJu|yhMl)RB)|uVxn%OBTJhjEm z4*W80LWb4Iw76-2j*#Z4QLC$YHEtfZ>icri9~vCXuSZ02v}ZA@hIObaGL zEp9aBt=S5vsMom6KFV0!G-I;V;-=rvvXi^vz?TN47)Wijj@WPBOJrnNqvl6 z)^5ni_yfuT_y6Ojx(juS{eR|f^}W&82zLN}>$%$C#wh0^6xfO4{d|Tk9HCF8bP&Uxleu*)*8ldG8Ici zrC5wrB15r|>t)oGPctCaRI!k|VRTDRlTFR~vvy0DrC7*yFsfMQhKSN(`EJygQ7q)r z7*#AaC#&$BC&fZ;oKaK0nwMtY6${w$&y+40b;Zp4nK=4`5wXjwa+K{Bs`Wy4(TXBCB~{KjL2Az;UI58*#Y z4On5VI&p!G=SrrCB~~P|HKL&pote|548)G7=1rznWzcN6D?1PkGeN?B&UKzr4xScN zQUeO%z|7r*@S(YB@>TUvgCiik<$KRGbb=XYR97yT2)H|4m+NKIjN?rvg7F| zLLhcLS1$yO9nGbgKJs;9$D{fB94&`5`47z;C;1aQ9!>sLRk4x%4A}7;Be@Ve9!)ND zR7xWrX#Ky|^a)el-`Cw&SLgp1|E&M8?~A_G-dB6;JeR-|z&)-HxRyBo%xQK!VE?v# zm+kGg71q~UcUs1I4qYiLweSa?Zo060r- zl~U(hn$OQsDG>p+0pKjTDoPCi=YxS}QNgfr$k=AdrBAwBIPbiawZn}w^sXkc;;A{2 zvMN_?>8F~nsUItIHZTCBmo$kLPtBPcXu@(;IW8Ljl53aL0C3(}Q5yakdfyVJ0%&Kw z)+48Za4K2xkQuPvF}x|;vs&3=d;sC&w8}JLs*C!c@~`)edq3hedv?1oxjyH*&3V!B z8T)VSTWk+me`S58^@Me$Jyyjfyq?6Cm>x86}&kbiqh}uqmWR_ekM6v#$d%exjh@(~QM5~gy-mSCi zaT|tnE5Q%aZaX@=j;y@b;cm-KN!@!(85?xsp;>yzZ#C}3LK(^Cdn)f@STHCXO_%PP zU5mv5c4i{t(Dm$FXHkS7$s{OLmBr003h5)6XcIH6W|qax>?-^!G37H>b;cGqv-EZw zG3CPd0ayq6WKgVucmd);e52DAJcUX!=8+7aWhM9tWk>_P36!b zv>pd2zUmk)YLhnVoT>Jve6z%_EVa0)d17n3g)vs(Fc&!WbQ% zRb_EAOWoLlj+(Qr2Zgmfij{Bu!WK8P)XOcgxS2ztmszeT8y8zjTcMyY$_ynjKZ8 z!8goOZ@k3f=9*=%5Dv^zm%WFsp&nY^;%1gO?4?nwYA)idu(+8e?tE#~s+u#aW(Y59 zaWm_|%amH5$Xt~a^rosT*ljwc-T z_7B=SY+tkWTA#DFS^i4;xpb%bZ{W2*&L5a5b&`r8TBGL6=UVA)mDZrw35nLIIpJzr zy3s&XJabz*OD+>qtx332s)R<~BPqCF*ZWQ%h9|L1XT6 zX?6$sIx)A=e7zRi0R{!utSH##Hsr=9-71`SUdj~U z##!nYnV8$uoJd)ftG26Atwq(3i$njSS?Um(nA_BxsexiBSC!+`+-8=zIHu+{^UjLW z@Xu1;#xV1SJ+JwoQNi41mUu6wNB;9jNNL*ZW~l>WVs2A&3XG;LXl^r0Jq$O^O~rAO zEN5;rOZ^BFbDNqAQt5fT<~Fm`O)xRHnMXdx<~Fm`2k<=hz4GQZv&8l9eD*!9xeZ7H z;{SpFzrFs4d>{7Jc{835dA#mjuBh`P&Nj#A9j|c&9qaAivcKHkWc#)4Ew)DMgO;CI z#-x9f4w|1bFBkOvhxQ9H>t^XaMbh1$n!Ce)&Ei3{yVHw^q`SXxB+GVpdfkw8_nLDQ z@9y+AA?fb($cNG0=~Y3}-RF*uqPk_5RE){w!?WauAnoq+NJtrKowM}PA2GbCIR!-& zT!uIFvL7+LsW}(id~0o8H%ssT5vz!~;j9QzKC&cp#{;wECSb;b4MUzXw8+4=V(73u zoG9ZUt9`a#w(S5D6Rt1G7IL%nb{?^itNg0k#zsZXz__M=mR`Ig7IJ)_R$0iAQkR(1 z+%kI%mvxL&YC1cb_SvICqEZ{s9FgCInZ9vxmRTz2tP0DEUOnNf#(;+SkEI4QH7}7;7^C{B&VYt`nj=fQGuAB?dG#XH$(t%No#7ue8K~rsi~u!c%_ZaX2DiKttWw z&QSwaSgSTIjm|AAB!lvajYcEGDMObvv&8c)HK4gx>VVIH2Ce_EH~pNP|A&45i zc&(nxo*Uc+cf0Gou2ar`boM*m;aFpj*`Bqnx884gr}PtPoB1X1(jVnd#yv~#q!EQv z^C^6>&G9K5dLxY}oSL(#xx%40)`-HXIo+c0l;3KsaL5HW8n5+Q;a}2O%PSmuLoSSW zqOaL9XbxqR9f*cmdZ&)q-dwZn6~cj8a-nYO(Am1)m+3^V|zm` z`BB@Onlr0LmgQ}4;zW`QYg_kMXM02LC{o*-n#)j8yhf`O*&&u{!X!UZ4uE5`^roXh zhpB20g2VPEIw#e1Rkk&uS>VKKo-e_{E+2)S6ltw&)v(!KH<{DKcNJwLQL%c3i+nf0)B_g1) zy&V`N)rn`*u&P$mB+&D{p857%^niDCja@9sQDz&SAtf=11 zqFL(1nAqOboT-6gC|8x#=*2P{BI<$!teSULl!kwn`Xh!_FWQl>^}(}&a4Ol}5Rb$2 zc_0`c8;i%327}iBPR~+P-7Wr?`QGpSq4!qLyFEwX!HYjHO5jBayeNSeCGesIUX;L# z5_nMpFG}EljRe|WW>T5o7+dZz%x{QKR2nf#v%;uqU&Pqz#WqVEn$F|G*qF%XS>nT# zMvT&ww`Myu%IcWU2BeJt8sh1cn%~r%tisc1<8%(pZ-|>zYJOAm(p0mRezoQ|)a&Y; zpA4ya(o3b)ncq+kti*cZny3On^Bc7O@3X$iFF4-sc%$Q`jxom}M}xy> z|GNDN`#Jk=yWRFF+q-OkX?v+{%r;=_u&uP&tzWgisqPbXkJr7jE?qZJ*IMWCKj;5T z|HJKXHE9`CjMioR^)$&SvW-%g-(EwYr5uYV?)u&-q>gy+)-Mh&M&o}S{4azX`PPSO()?MbPN$rKpJc(-3PiT5r*BJ@klh> z8yiojl7ZpS@Y%5Coc!Ll>6qPgNAW#%2F7pPI6Y=J?KFM^QBpp=dOB)1ZIYb!SU5Ed zJVN8+O@T(skev1E>2pTuAvwKu`aY2&jga>)@7^{Y;VY8z#*Ncw%N9uiuAUw-qCAMR zejvGZ+4PXzv=WMZJRA*&l3~kfxiHJ7L)w&}oU(fQUZZaw$LaTty>ZF(pxv|#zKM;9 zE#y7OYsvII>gOb<2flaLqUqCi(_*vJ9v`~zAR&ex29<}$$iw8;)zfzy<=l_cN4D0l zp1#W{y$`1kzvsKFr%xHBlkY>D+%bL9ZaR&cu^cM1QnNgYKYja`pV~fs!fraId6n5R zm6tY857|nF<7$bMH=vwLrjOC*jaM#^ zj(a$KzCV;a7hsW=egz-B>s5vSc*UkG=k2BrAZ_#tP%a`DU6~+t2*&C?^6RUwqz&po z`h}dn>`F>g8tEr;%91NdRcVUPmtDDE`^JxpZ-81-TB4*pUvvd@4{dS#W$>aapjgmD zV5>abbp>=s2-Q${I2@S>AB>*?jZ{`uN#B*f*m4E*$$;) z>k23xL5ANcG6c=T%}{x5%N0;Rl^81M)mP3K)%Z7L605I_8m0exF+FUQ{&hKh*%i=7 zDjg>MTQLPRkviooa>|k`YF$)(W62dzJH-~G;1^v1%|lzv?ea$!T>*7NTa5B>^%Wx> zBRwa-wB*X2>Kwi-KW~`cX*cbMTBpI-yCaG4a7xo3kv>=`<5y4bFp!F+Sx#Rz-L5IS zWqUEDO`Fmrr>vfCHTq_YoW5kbMaA8sytib!S^ZqeY0>m{MQV4*A6Ycrq)1J9*gD-v zhE8=TdQIUqWBVrgV_T=U*-bq~sS($&>OO{qroh{#19sD?V%MtBl`S{P`7};9XeKyp zYRW5{rneG3NmYmD6~szGuAaWhNbEPrnXjJSWR$+Kn0}*C`UW|D+4M$Dg-f3-rre-S z`9d*egEmEJsH>;f8|AjH_~tt8o1c#m4EiMEdfJ>I&904CR$g z(`$(Ijb1_0SCFfxR~waQg`9cY^eQ3N%jFjvr&n^aR$kdOeSLY>3Ub->3XPO4OXX}= zPcJtr&oViE$@DUHXI0)?G`&>mtlctr_4Fd6kGYEJ3ysnpa{4XP3+$$Fv42vnR(=Gv zxaHT|rt37aH&BY2>Q`QDnD+B%Qw6_z+HF)0yG&%+G+gLYjU*PUoU(e_Y4oN|PG2_d z(7tJrQO05;=SksaLC+YWc&TZ3hPLI@}JcTP? zAJQM>7aONdoYO_+l}%S3EysmRxyI zCDG#Z)mI)c`r^;z_u8&Z3du>CBfF)~oBl$&yUu;R_pNnbaqe`woo}|}>fTy+#22l* zt*)uAzRvIez5fUPulPUhT<#0{4m$tIx7(R@jyQhpIqtjBGUIrQ_w|+zpTqlm@6Wv7 z@&23hfa7W3qPp{SgO-OZ_gi`__d5Q>(c-w?Avs=R|AGDU_V+oG_BYt4?J>uw{e=A% z`wfm$cCYQ{wy!u2+CFCcTic&{UuMgACv982r)_oKgSK(+F6%eEYphRueYQc*@2r3B z`MPz|^EumL&r{ahJ#VlEJg>Cv_FS_3k0)gLmg9?#oTcCO8&9XF$+O)3Kko0iKkI&% zJMW%yN8CrfP35CUf$9WHhxF17W!qiJfT(jom-KW{b5?lKR52kxG+~msqA(Sz9IPL?nD3t_`FT z@n{sbsqkl|4@e(fX>FFIR5}$;L_*Qlz=h%XNEq#4N#~^xF0`&yrNNUAus`*;(vzA` zwWvNdA-!4isTOHM`djv=a?%?#pK4ZpDlO$TpK6xUQjYzpS?N`pPiH+B`nol*UK9!Un)O@N*N=gqbu&y;1CA(HSuX)h2R+`W}XkII&H4nD0l~S4q zO>3p(GV2ye>QATI(1`)m<9(rtkaS8qr#wejLn3G7=l2z#M{(pCijT<8TTvU5zjLQ_ zc7=5t{(dW+?b96Yl+Gw`sB^ee8kL{7sK0bl3d>(=(SGTqG@`tr{?bWlSbpBD{?Z9) zNd8i@_Dd(Ekn)E5ODCjz<>%YgUmB1Gni%{^-{< zx1@AbI)?KlDq=Jd8VjF?{b=d1bi@scNCHK)M!Fp$zScpbG|SyRdDG_WtQ!?wog5BD zLsFa6y~w(bDi`@tm(RM=Y(_EweRFgae*8KcUIJ8J;|@dA)gw`J(1^)yQgo(ER6`*SEuy$26~RUt)ex z^SWv@H9ugU(!AaTPcoXsc^I9?<{ZKXx&fMmby)97S=DZT=88r zIY1xEDru2lUO| zQYo07B?I6IXCxY4WDcuz6ljs}Yn0D&$)WjsnfdwR-?(Fb9*ocrlNlb?9%=kH){|Iw zAm1-EoobFFx+jfhbRR*DS!CX#ed04a@dNx>q%nS7{1fSm9~A#2q*Nr4p7<)H-zpCa zMC-zn&&p4Zj>2CbG2^e(abO7-eX7NufO}+HUkX>v{4d+8qXi)Dcd7eBw2G8GKZgm3-EABPHOD#`u^p%%d9!KZ@ zOHFO2x<>!o{R@3lK9hIS^Y5P9-S2Vzqw_~jkK+}#*Vz_X@3#Dn^e>X#e81_l05)Y7 zXOXjO^FU8#rO7mC-?1aq7T(!9+^{3ux}%|`v2jPk&QbVnq@}5;xivK0+%`HqNVde{ ziAj9f`6%+rx)%;|kA_lbAN0BF>(?KKInDZA_3O(a*Kftpo{3O29ZH2qPQbtTrS(4d zrA&PmIlMLx?9M>PsGb%IVpW+ELNVzmg$xf+PSvD1d&8q(WpS0|VSl7@fts?&{kM5wkiTJ* z)=*`YaJ*KTbaNIt6*murGJC{op_n^cW=0K(=e^3b9a-dw+&s{lS)qtM^(gM-OVEtEv56bSpN;8{}ET~_j z-c)!jS?l~@X0-i*Eb{Sg9@vxt52}1)1KEQ}C$I+AR<$OHSC zEWnpLZB4YPDI?V3`0;o=rDanV%48Qf9v+V;gTcW5Na{d(C>WF-CI*9v(9lpMHFkf4 zyj}vB+&t-?4Kjiuq;LTTvd9Izd7xtoZgO8$0lA9CEEMWjH7(d!7CDtS5A2+}ySjqy zOM|{BnTTntOvcPhv7n-hc1)xS>DC0U$pu;Dv>s|Qv$nbd_gqMYV@a5_l&eVv#4NIw z(^kx>DN|+ZLi68pbnyI`HUBLU7nakqEOJ^80|>g1P)&<3oeJw3MY&0E2`9CqED-JbgB%z11$V0t(V6!lb6X682{m?XK?qFNLBhb{g z6W5U^dlROxGqX%k5b`ESIVw6#IZBO~&Z;c(NpBu#&vXdVp;HAM0=RiQt0kk^1cflk zluSHGL}A45VirY?HxD#qzX_2XmKH zdR!SK4Qc2>Og0P=1%vzJ@iWnIFxYiA5g&tp!5=YrF2vJ=V6bgxpfS+gva>zV)QGDa zom&U>ld1Ihcsv1%>;6#UOgOasqfI~ zt+ep`&Z(d=!6p}!91a=gzWH_~;>jcwbnbIHGL(!*!>RD`FrBc?!(8!bdI&6v&dz<| zjwZrz_BBE80OR!)Y`CVv7gBSdH`>`Xc1J&V3V|vEs+42~N5IS_0ag<8P_sz4)5%tq zx`+f)AP2JO4rwxgN)rqYrQz5zNXK}6vRs>J^?$8ec~{R1o&T>e9X8dS^?%g&CEspu zm*<3gk86u_%4udJwRL3H*NHP@})>c6`j3-J`#k@22 z>|vTY_dx+VxxmzIGC+>{GQhyBgU$j-BNn+;S z+O!>IeSh|L+}+mkcQ?GhRjQZBz88AV%(LeL?r`JTUed)M=Iw8?Ledsge#*?Rs8y2L z16aaqGZ5X8uaC=L*L85^F-NW$YZgVJLT4x|c(c_gTV3ATG$sM8gF2`;5ZuGoWlv)BA@=)LHeflGI zZ6h&+Fv;8w#^im&i3sVJ7qcja6jDqu8Q^O*>g?D=nE9W)ot6ey+r})40c9TO%QW%k zuk1*WWjK6oJb56L+#3$Zh}lzkL`#d~1twd$>ZTTCQJ^RDz#W&lPb|CAU`ag2X$@Ba z%p}M>3Q|ffupJEd)&h;NCx(d!F!O-&9eHmGlsd6yoLZdi#4D#R+c7+NN84K0ifODw{5d~ z9hf@CTiC(gSR@745w*qy#Vy!UTNIu*$_l7}YIGn(CviSU6dRg^wi<;cex!>Y`iMzk< z*}5m{F4i5byTSjw|A2p$@29?}eXsRJeYg3p^M23!l=~*v?_HmF{k7|Y>!7RN`Ag>~ zo!!pmjvqNb>Uhj?)^Uqtf&JU|_t{@=zt`SkciO&cd(!rZ?M~ZPo5}jD^$F`m>rv|s zmgg7GodxH(_f_5z@D1qoe8clD&!e88r_p2eKjVLcKPBBJ zU1$ED`6=_O%p>L`fVBu}8i0BhpMdjCfN``-fC zKL}udFM$1#0QQFh*dGXBzb}COo&ff{0@&{eVE>;0_S*v3ZwX-kLje0t0qi#fuwNIz z{<{G7YXaD>3Sj?D0Q(gI?7s?NpA*1-SpfSb0qnmBV4oGh{<8q~ivrj$2w*=ifc+-{ z?B@iqpB2D9BY^#k0QS=Y*dGgE|5E__DFN&!1+bqGz4s{r=z1hCHwV1F%u{VxIRuLQ8a6u|yM0Q++R?9T+SKNZ0KL;(9y0qjQv zupbt{en3YcdW9LD~d+hJFWv$=0 z?zfCe?~)dnhXDS9{A9LgQPf*>p?Ej%uGZc(I@uZNOpYH8!x4W1juWH(+G`Dlw`cg@ zWA3rQ?O41?cykuT$~6z1C4KiX2*ZHVLGWrWi;65yXMOhS3899;RHf!oS z8y-HlFP=aao1@YA`2pk=68)krJrl+(x>^aK_{u^`fGV`(;rr7NM&Mv%7;a^UJBNqE zl^UGd~i;2BKP_8DlE*iDvJ?HbQH`_ZOei><&jm zlYL+jr6r&|X6A{S&4uh~T>6dtwqGbK+1N~*r8(%`bQ7LsYl!zgBZ=FeO=BBd*GK6rjk+OGTHrx2`o5PG1 z_10u)G`u$&A3mpJQj*NUB9c9YS?r(c;cs~Il{>jP^o2u-;j{P(sJ3MkZ|506nd~0y z0wb)*i0bkMz9oLC>lJvU8&j1#)sS>NbRNBkY$h*ZT{)1w6Bo95 zirc=(fVZ}Y27vi5*uv~dQZRmp6L6OXT{5BLUSDcb@94|`z$}=ej_K_VEbS%P6PT2M zNkred$T+cfz?LOgzmf{pHT5z;CP~F4!jT=o#01GCs}MHwL~Q*mbdDU~I>-49=a zng|nPAY!Me6OIvrNk!4iX#Ky^^hQ(No&LY_{nnT8{?Oaud71lr?tO5^A8>xq+2;6j z`?u_;Y|q(xtnak8Ti$J1B>lOx(fkB>ntbCtYy)KMIU5$%CjP08+&lXtDSi9aBr(Nf zXuiCTie)~QlkhZU<%7J<)o>9? zA2RcX5QYKll;VM$nN~Ts8!Y;5G&P7^(8^nrR5|m^+MEgJeu#f5JBZ!8(Zx8-vB4IV zdJZ5qMOs3Y&`gf9E_*nOq6{M+C?4JlDbGlsT9LtI76l+iw*1^)SO$BOU>QH0#+P<< z0#PSb%sb=HqM*ab`4hMEQCb_yol?X0$pA44q4wH>2fey1iYzQ-)J+FZI*|!QqeGz8 zwPG=ZFxhmB#2~aoBHW6*&_h`i9T?rj;&xL*v+LEFPAiX@IU8zAxOs!3`I-l|@Yj-V zR;QJQE|JMb6A~5IP9TfI^r8*eJ-pq8PCuY4_m7VCjfaQ9`NuF^3IL~JsooeBi4nhK z`B#{%JJ2`L&I4w=I(vc2u9ufFC?Dh}1iY}q!ddV1QJ2VM(SN+NtEZ#8XYauN4zxjZ z~%9yj~F~J7@WlZ_?ls=V7@$f)XTO;1l8_!N)4lDR?yBvKdxuFF?WmK3t*zPdn)8iD z#rfiQIQUw!am=@sf7&!y+$QgZUG(q-#8}eSyAguP1uJ)JHil_z<6lPzxNZ~t)AC=BzMyFO_#}e zx8sA3_4Y~I_iTgKkHh-^6_%A!#{6CLD7*gNE3zdm3$z3Pfwlq6@viTNK13KxcHx9MH%EVUX z7Gq*}WH#}(twH1240VBXLPxGVm`M=!#qgN3F1HBt6Y$4CDomGerTQ%cXL3{&+3DOu zOtP8(rYv1Rp`*y23t0K;h8+U{lSqep4zca#n>+B8Q97qUf8%r|0sV6G&D(Acq`~pId+nxSPM@(_RmiaVT^lGL{}QoPM%U%%aK$k)B)~ zW+X6n=&IO|k1>YHWnydthw`V#1iDkXub^Hij$Do%2yqai0_p z_Q9!7(P_7#sEjd8R0V=Zdz;H<`q2m(2X%nT53g7lor$_bzb1kxiHIh{Fc5fSrwl%*{FqNz~*Ak ziOFovxOm4hbnU&Ev9{-F)5?=VRW_M(;OsZ@2i}oKYlGz(bu5Qcm{}LSHa(ED;a(U{=fS< zbpPLfU>@%OALqX};X5XPJt}}bB7i+CfITFDJt%;^Ljc<$fZZj4-6??GA%JZcz_tls zTLrK!0@!8&>~;ZclK{3+0J}{98xX)Y2w=AgV7CZhZx+CA7Qo&lfZZg3y-@(WQ2={` z0Cs}_cD(?0odC980J~NIyG8)JS^&FB0J~BEd%Xa5g#dQB0Cu+k_7(x`G6C#T0qhb1 z>~#Xz#RAwx0@#HD*aiGp@3r7RNZ{VEZ$E$8eES5jJp$Nn0c@85cCP@oQviFL0CtZ6 z_ErIGodDJ^fb|Jry#iQ|0M;#lbqQdd0$7It)(%I(kMP~;_uVe=-ChCg0RgN{0BaS% zS_H6?0M;ykHSuG;|AWr|uQM+*)p`7{_FeIw@;vVTrF*~YjV_1te#g%oLHnod^|oef zv*m*H5%UiK_`l;Pb0kNCfM3dRN7N-(Sonh3_ni$T=xt)%*+I2mVQ%{Ia@y@seUZz(S(*C990{Yn?J~C`e-gKaoQEWlC5e__Nivf}$^G-I2|Z{SY>tMQ zF%EWzxA!AC5^a0SREW3g4u)c9(h$pwN|D>TPqT&%Yw^Yl# z!b>@jy8#~(-pw!H&XE!Le{i!OkAS4!8$6so z6V|m)?EqkeU{WcW-PXpt5^8>oria%5OHDbG|69IK`L=kU^6vIL2DbmBt}nXQIsd}( z6UUwQ*VtZd{kG*p;H&?V`B`%Zfam2WvpUyHIt9Obi@x;ucml=~Fbg>{+6`CW4#6KV z?KX7UQvuAZB&EG9$&qkdt(k4S?FHot)>+{ZVz`3hi0S6SMhGSqxKQ13G7>}o9E=Pl zLWxN_XD0!<1m^5yz$M|7Xq0tj{@w?%=f^@io*XYQX)6+3nIjRqdigC_4e~{Xn7kZS z*vj-)=SZxsJNR3m0llu!cxWgRg@IUK*A>7O2~KUukN1nY31&y zco;?T9uI}U>U;$4StR#?Tc~s*taMSWrY9qBg;$uOll#P!lp|5b+AniEzaVvr>_#ip zrVhd+Q`34>?Xnz?C!>>aWvZm&5HU@a?aq<7VyzkO84>yh@~r~<3*?GP@`&!Lw-JIV zgF*DIbSiu}4*C@Wk;483+PZ)#>3BGinuN%M5ZoGte;x^U!UTIV83CUk5WYN&gI&T! zG!g-Vsv~wa9iK0tb+J?r)F$*KNuFQrUjn&1!&h0|p(8AE^ zBBOAn92FbQFp+U1xF1CqGD_vl@dlGB9>E+r5?E^+ztK8atCQ{@PLOqiR%j*3Oaioq zL0e-g4LK4@YbXCn0O<8lI+~)Z7c|K4Pe*iaHH}hQ2>1u3fZfx4u(A3o3 z+^~0F%ie~@#;(SeeeFAY_U-K={>~QUNJOmN{JT!-frxLoQlprpmBnCYd5%QC>d9>6 z)xc^_{8JGDJ~xv6Fp+7`zEaWLAL+ld(o%-=er=R=c8&{ zTz#ImP02g$+KlC=%sjg`U`=p+t_>HrSEvyqO(5q$rU**ZKP?StFJ-Vya)Dv2r>2(X zS~0sLm$^Ou7zP|=pMO<^Gdb3DK2ae;Ddw-9OH8fEwP48{yUgt`$~fw1CDBxMtTu@^{tjyOXtl! z0DR$pGX5NKW81{v50#med}~9unk`Ldwq>}uQQviRVC#h)ZCfw2VFx`^fgJH}yZiDf zUR6Zmse^;rzHnj!+#V6nhUttPTo8am=VG)5kkyq4pKvQ`mS*qcok#L*CA4lD9KPnA;iaa>p>yhRhLOqFrMn1HIT= z=Y>@1&Wk>^79=<4j$)FnnUlOE;glOyYkwHbNRYF}QldtPie!}yBDO@$xg%7fb-ZL{ zmhwVYtH<=IOp;`y8uy3|xx<*mw#+eJ5_0Br#;kW#TawJA@nGA|mhSGId)pfJ?r3Xm zXz6O*+tAs)qqSj2TXSn$&(5wLJG$v+nk9D#(`@GV+@<4DdOzF%z@$pI9=dY}F^&8A zrB$-wN!`~b;V>lvd&);*(aGKzIEy$B5hM(Z^2Fa~7NV$i?72H|IW~*zO%A2coPkZ< zXlNp?bJ2#~q$p|3{OLxlj7IHm%9^_!Guc1I?bMuZJ>3}^i^{v;NhR`xwnvnOGI`c? z6jg>!{o;*sBVHiT`u}>kRk;}) z%Mq{0;SBc_)O*bFWj z43kh%EX#8w`mL~&Ls=%>ktFO>OqNy>QHBOECM&R59f_Y$*0)nXq04h5(rr8cP_E7N zP&^hn7uKx}4Iz~{ZKan?cFWvsITC5MoqzqW%@_jNmTs&XLYUleyLRSC#MgHIr~%qs zXvwtg$q>RMA`4|vj>LK0&94r%85J+Yl%rEbF&WXOge9~#C&zZ(!#g7+tdv_vW!jM* z!(^oL;Hfkw#notC?jEe11nwxFiiD#h-RT6J6r=D!B!m`R>Cp;~g<{f_wYJ-zBL4rL zGxPv>;Dz@9=zj)z0GtQ^e{bOTo8bFP0qpAqu&)!q76h<)0c=hHn-##$3Seghu#XC0 zUn+o|7QkK+z&;{?y)1y862N8zurCq7J}iKJNC10D0DDmY`=9{!0Ril!0QQ0a_PhXg zLI9f( z1+cFW!2XE<_8tN3X#s3d0DHFp_AUYJDFN)A0@#xR*b@TS0Re1392@ic3Vf}=cV8ob z{R;tXp8)o_0QQ&w_NV~%hyeC5I{#l`x@@W&_J6{^#`k}~2f#7Uz3#tsJ?-jse$siX z<3o;H?H{o(w>@C}q4k{QvzDdOwE4%T-@_}l`kBZtz}I*-bKmq-9m@?QbYXS1Y0Ui( zykiv0lRz|)sRrI1qe1!ndM|8Z!k*0W@JJ*9E=nNgS}L3vgTKI*3(joG{;YPBM(kZC z^)hiiN)Niw@$E3)WydAHE>B|J2pnX5;H?Q1i|~9Rl7eHO&`RW#x^2C**vLO*-_cyi6X-OVx^^ z^hi@CQPze+*Ay<~&6vPi{=3lK;fbEuL`g$X9`lwxb24wjd2g8FjyFbiT4^&-B{1_x zcB%n%zb^^@?vJDnq=$mReO{Q^{YI2@S> zAB>-&rn3f*)Fwl_a}VR9t(#iRJ29XoD3NRN`8*X2&$z~N577c7c?&?#N=v-t7N5^k z0m_)_l+>dV!uUk)66pw2`^5@eQemXL<@8}~8)BK_qN+^iF5-2{Chm0#DL@xE006H+ z+ObcQ#H>y{$Xv)hhy}VS!|iSv!gdxLi#B6T5;NnbMiRnxW9|W*w}2-K)dCF7j8X&R zBd{dG%cF@<6e2FCbn_>U7nnS|!RZC=X3KMvm}oD*NkaL2wNfjOWzr);T#>tgx!q9} zH#ANnA5^f|WH^pckuw4_*&)H9_5Tvn`%HC7|Hu4meJSsgp65LexWDG^c0K0&t@D`U zPwjtZyT^LTl9IkA1ViRW z)qg@c)diet%C9Bk=jC4RnocHRdkwa;h_hp8^k5>3O4k<-C5F$I&e)aGuwP&n?Lpnk z`x5anlH;zq(ha&CX|vdhY~(I=;8yWqehn7do~iqr~T$guIwoC!duM}|cJMyb> z@jEkd-s02A9*sMEJbVUrbP|&&2(q^PY#dVneeu!M`A{OPa_yq}wZ5{{4&gK6aRKN-N7)r z39U(D<_(uKp*7$(){*OEB*-e)YmZLk^D+odo}_+72!HHnT*<{<0~59WKKi8E&`DMCOVXRD@r~lOhw$ zWJsN>&~IXKugx!}RJo5xp(%npvt&G>uDi~pEJvMm%Y&IzRab2q@{2IVyZN;x4E)Im zgp!as0XrieTB@8cF)1rr$(3J-2@BlX;-F^;VUih3M(|n$t^cnxhfH;Qyiw0r-Ossi zbG^^i?);du(~+`&*}lv6I-ALQ#`0my8tG+{34kyDh)E!`GEbbj9?ERs9n1$}aN`=e zI3I{5$XpKZQ;?I{5^u|u(9AY~JGdiHe7Nr9KS4X12;(zPJhfnuGRBmrQkQSX{X)p= zKr#FhS{boCQp4H2q7JpV@|0HPiObh58Sc$&B_Eg?muzY45}BFbcGI9vu{q zA}fN;xb`;YiPP6s{!yHK7q$)(u&HrAo;X)R(g;zRsrHL{qD%6`2kSu4k5>|>Sb$P zLll#6iC*l0C(1%nUY%l%*#Un=&cqHzV&@KpQz1Ci2_Y5qP@V?E1(4=$lxGqoPNeWmLVji;b4>^=cGWi(dD)X8$8g6bI9X<|j55V4x)i!jg zOb+q}aDDwCT>d6LJ?W=aTg62b3(Rpqv8n#XeopltmOqQzh&NAyT8cO!pq;Xu zFU&zh3{xJMH{x^UNS=hUY?|G~TPG-F3;qD3R!Y;EJY><-*B5`opGL-`u>WJ#5L zbt+ezf?vcFVAXTIDW$>J6vuI;uiX)zB%MK(M0=y^3G7sWBVxMYdZ-&645(5WYXKEP z=}!`uo~?VL?qc21x*H%Oz%zcs`~U8nT)%gH-u2h63$BB%dgm|UoIr%pJyv}C|F(I!|NmowdlUaDfc=pG_J;!4 z9|&N-FM$1?0QS2A*zX8npA*1-SpfSb0qnmBV4oGh{<8q~ivrj$2w*=ifc+-{?B@iq zpB2D9BY^#k0QS=Y*iQ*yKPiCygaG#A0@!~Pz&_I2{*3_k{|aFLS^)ch1h9Vv2dH;SgFHKOzW*oi-ERwE-zb26 zg8=p~1+cFdz`jlZTM)qJ(fNO!>2Z_qx8A3{J3SX&{m#E~yx;y`_95FBY|E`3mWQNw zK=KRy^N1sV0G|y)_gZEoInISh^3Q`jvNXl&UJygXebiX zh^`aD!-FO67!JInJ^d4Sky%j1y3CjF!o)lHuVl*xAE<*cjX4=0CL!6vEVCfL7ZVb2 z=&s63v;VFY8w5j3!$a%48?^t@?Uss=cvfDg-_+kkUFB zC!uAu4K$p;4Hsb#|D|trdsIe^nJMy<+@&bmVn*4bhxi8kz##PeHl^nH0O+`49V6n|ZJBNh` z%~3O~soPE;#QsW^(AtZSs(UWLy)JYwRs8}8RSzd^qS*PA`ztaTtfi#-CB=wTNo4Q{8EBr{nk^YiU_62d&hfB9z+Wh1v5h<<8h zxI+|*RyzFeF=-ze9YxCGp*#svE@1D7Gw+T@i5ZbT#1JY`F_D>lvF?`TNks9D{C3(h z1GH^nAQ;FVr7-g@b#Zg&SX7oi%ykuyH*51GX857Z7G6avSEf!=ccxN_$Pl<;)6%Vk zW)?wibW^T8i47i};@)S_QKO4wS+OZhlV~EMr7Q9#lX~SP1&TTh{-+N2^doa8Sa4|K ztprM$f?p}rmM@3$Bv5$6H1~9Y+Tk&VJAEp%P_l-uucr#$P`lGKBYQwFQv}n$=Iye* z9q1)`HC3hb(O{;0n2G_+_F$%}JXMdOid#}zjNaIIS~XLZhhdtk%4ZO5s`jNqW8-9? zHbBTNS0f>0dDj&hKC7O_pei(YU&#TFc%=Zt$9Q_`%ae%fd-y}6(a#@@3}3*Tv*l~M z6vnJ}Ovs)m0oR-P12{oL00EMaKd^6%;{RxSngM`GLQ$oYc@j{46My_i7<-9nYH4TJ zBr!9W6;Wnmo&-v7<_~0zng%H-vqDM$Od>pe16SAKJPDG%Wr|y=mnEr7WD*1%n(fNk zOVwlX$^a#&6L7zF?ybY%bfAz1 zhvN9&&e2dZ*`)fKAz-@-Q2droUbz3NfFKg2K#F+%aHyonzv%zPU3O9acD$>wC$pBf zz9Az;&6OGKm@sC2D?{GY(tIyw6~1idWz`*)&y8tgfxd+uGbvn)ElxWsi@eF?E(;f* z1{Ak)kVaG05p4b_bYy;5>!~o5zJe=R|1UK6nCim5Klm1VXFV@*|IB^b^%u@(oo@R- z+jrQO!tMXBSn2@s;txv#m-ppK{N~o_g}lv+Mj%Ibj~LS$BLqitfh7X;W4x&?YjSmq zpv@IJgjZ|JR`(OqDu5O0U9f7^l;P8E*R>yd*?-AQ?PL z)0q@xxu~yX>hF-r7({n!O`ZhS-hBBGZ->U;V^P%0@HUc0_(5w$${AL*-#ApGT}C@ zWn_$D@{u>hrtEnVOTF{5jkl)dIg&EHV=5@!G*H1YY00%&U(dDEEHi=4cbIPBC9h0M zrNd+tWKU;#GDyx2PZ4Z+62HBj|8%Yg;!ur@ghw=c;@WyKgfPpGiHzn+l=gG{b3n9K zhGQFb5HN#_^NRen6a`;ql9#1fUr)4|EM+ulMtg>M#V>>KNI8-}jhDs89^p1rq8hu@ zD*&r-3Gl8SE+-6*^2nrN{w6mj{TC-ojxG4aYS2#gpN6v&nSct7rdljAsyA?pT9yxD zIrs4UfI|nQ#4c3HgdY5cbuOpMA(^t3^$$A#Utl_F@@IWN^!0lm2k-wI-KShHbN<}f zs9q?_z!aX{4$A{C{O9q;LQOh7P!B+EyKWZ71 z7$*WURx||I5Fpo~$c>eljH~&=AF+(@$&>Ib$w#n03HQ<;gD2$1z!fuv4&K3Y#dzh_^pZbb3044Dqyk z1#BFXlDyQ*+?`pp2m=SENdwXPYN8#M|CBxbb!zs~eh zlmD&0S9u@tOt^pTcDu%%pLgzYyx#r?`(3s-Sif#vYPm;xhqT=MrvRLrpD9OS0j}*X z{%uh8Zu9YUG%RmPgBY}ZrVNl-^E@{cPehXGP_(`;l^%)2gTd{MP3^&84-Ci&h>4bj zh)Mn7&{#dP+Jt+NU?-c34A;xsrQpR}kBOMO77tM%XcMsPOOKByh{;$IO^(>D+ZfN} zxjz~o3PshQrzY~5o`MJSZl2;cXi>`;!aJ8IN&!q}WkT_mUdtGXMgzLs0}!MT&l`3Z z+_)fnGTh5z^{4QrvTRtzmb(U4vqIqlv=v;q0K@$EUNi+b6N7!~LlHQ9jh*QQ7bM72 zzG4heMp5>bf00?pq6S%8aAM{H*J4VUQ)dxmaZ!=37R}_S%!pPO9GK!Ana$Ox5+Wmc zNFG7#%d` zuC5dnS~Hsqr0`uH(ozoRFJb8nU*_H-RVF*gf(Lt}!3Oe`x1t4JWJ+x@cT{lcL-p231D{$V0Q>$+Xb*~0@zjoY>NQ)Mgi{`DRb^#a%x0@&pO*kuCPr2^O`0@&*Wu!{w- ziv+L>1+WVQuyq1hzW~-Jfb|MsJpx#_0M;ddbqZh|0$95M)+T_p3Se&%z-|)2S_H6? z0M;ykHSuG8|096?ZvpHd1hBss!2V7E`#k~dcLlKD5x@%g822~vf7jnAfZZm54G3Tx z1h88Luv-MMHw$1l^J9I#6~O*R0QnLci+yBjP3{@K^-{d@09 z&lUGq+(%t+aV>EM9bdNp#@=Rog>A9*<(4;F>ZCFATL6BI{bYs;B(iAx6!(=+rAO zXj-sb-Nw>W`hpt9WTpA=*7_6R4-v||yCu+w{%>nNbxyTA7EXf~hv?RNYj&f`t-cSkY|~F2Y@fHMj`drnp6|Y4oM%oh8Xk(sMslmG&_x_M%ZCg$iLjtwD9GNP75xNR&htfb9* z18+Cfv0|8?vQSL=;Ls0`#+X)p;d)G~Im126QJ=6Oa|Sqb)k@OIQcM0Fz^JxZG4&j+qQ(xGmh( z8G(xd%d=!>vL}&sb)Sy)V3(^OSfZP-{W44u2YxtIpVWF@M8 z1JO`2H4KJyA?imYiA>iJ8!Y6_g+;h%C#$plCGp;f*{eLw#h!@Eh&>#FkVpovFpI48 z>UD*MnCzkI`cGeIB76v}_8{O0xc)sJMx%2Xo(5;FZjCrx!7{)F!n z-rsmndEV-NtLsmlHjczAm|+@?rj7sA77 zSfoto#uj}lQ)WuFx(honh4#!cUJ3`m-dxdyu@NIxXb54FDR%ZXg?7xQBg1VkM2n0T zEpjI)?dl8=lhNTc_`?d|MPvYdx#%8$aiI+}6u1r5n^dw-oB=B_L=UYD!n!a5Y#fuP zT#ZvV6k0K@X8xctxQtq6+74*|U=o?DH9#N$PVwpg$R%UAmD1bY6AY5S6o<2LDMg80 z6%1nP^dF7M)%ArIET`7XJ9(S?p(I$JUZBo(4Hpwei20F}s>p^WX)5L_`2^tcowPvE zym6yM>T_yAp&3i3=`#0Ndnk#*vEXY#4B6<@uMNqd+f0a=S}gK2b&JVN7Pe!V9O5@5 z?hcQ_t(@?P%5^fHE~1WKx?NQX&6HPs=)PbO-wO=}V_}$Qz!Y_SyeZI#ZeVqGZSQL8 z+}qjE)wQp!p{1p}rC~?Y_V$L>9Xs}Qw{$ml?r3XlU}Y^|IGI{iXu^e0PCd-qU1Y<1 zy3`vfdWeRWGB%E6fHoV@&MhoRdSf6et=g&L1J#L0*K)}77mp|yP;+8&bq6M@2Hu-f&~RER;!9z14nuVGHJWXsQaA@M=eY z#FD&pJGkfu-WbhfS!R^#MIOD-RW5m8fJq!)7;h@vj7zgE!yP0Q?eyY9s(sOr!FA1& zWG3H|lQih9<_7pZ_synB+mvHDqpyNm+1bI%N+eZ zeUEtm+Vi0MU){T$zj5U3kJ~&D3;tr;IC%Yc!Y>Rs+rgiN4XwAN2~qj9damVrhs?j`t?C(*q*}v*5*@ ziDZGq+-RSQ2nk-TEgACHLzrw(H3ZPs8R*Ht{z&RTdI&C`g@%SAsYAzt!36$o?EZ#S z8n%catRlch;we}f04h8jhTS5#Yndch%7Vc%in&+?Ckh9!R@gGdy&;2NW(^~{#Ca+z z&XrD*z&QeHT$6?UxL^Wt!|+$g!J&TZMw7%Wl(Jj1xUdgrzLEc09L~XTg{@9uWK>V`>s0Q1%?wZnxTA{PFoHvR}07BRXOO}U1|f)!i5&`k@< zeen3i3(!mX#G8sOn%aMV#w^!ft6(cON6Xc3XOCcVRCU@3G6=^8$sBk$CZ* zpnzb>9^zJ?yS{#X&qOGih9g|G|CJ7}-&MbUuC$L*1cpeom%W@Vuh3vegDF(3GX zI~Pt+A6$%!+Qt}W+aqH#{%$Zho*s%ul4r5TSW~zS)9cCbdyK=MQBN*dgEAp$jO3w; z7*1_0?7<9o^T#P6`6{M*aI8*Zl4;u=3&mts)7I8Eat``tu^|yQ0eBn?4k0&cATc|7 zFLS$QQ!Aw5G&X}DMBV5Bl*rJKBB!dF!2!?fwkh;g za~7?MLApTVYuqu#z5A(rR3j6{oTLKy1(6DF!ix%bV+A8%IA~m!{(XnEjhG2z78X|) zW_7-B7iQHrHNZQ77-y$c$8iV;$-__c0+Z?7G*(>njfGRV=)L^rIPzvQ=yDvUhu#6A z1D3Yb<+1Dnr{QotmZG1;L|Y1Xk~+#9;jJS^=AB?47fFFz!E{1rTgCB0CCciLW8SX9 zNzA*Qe~0rhcp=3`)CpOkfnjY#vz0ebhgY8r?zG6x#fY&nsq{ zSymXJO>8Z1%?&F3g3hk-;&X2(i46<1RLWzS^l;_eSm?*pIx{_2M-3g0@X$gyCMBiN zbnAeQFqr9*LLX+@m08EjluX-|kE$i9rCJ8anpkuR4!mD0}|uRh4QQ?1(V%5D{lqV#$|!d2S7K%_AQb@Kq~~zmdbeHD37yM=^9)GtFK36R&)Yt_golEHo-6nB6fwLi=#xFqX+?eiz_4FLHYZ z&J7IYqNK59lK_jA;ZPJ;i&Qv-DeU35W5X0+s2zh<3q(;3cP7r@NMuH}WCUXptKT-3 z96~!suwXyCD_GmjQPoXrnoA&jAsk$fhlzU%2eA|yrh0jY2`mMwMi^%-s#Io~YuZqa z%ZN(o_NPpTq^QaLock^Am$>`uo~?VL?qc21x*Pn@`=9Y2@UQay)c3USwZ5qDHs5vL z?|Gl{zRG=*>-VnDyZ+jB!FAA8@BF3nlg@7Ea>tJxA9XzDIP18@vB3Uq`}^!Kx8G}T zu{&*FwLNKj#CE4`tIcG6*7}6?qV=ft2Fvr7XDn~9q$~$4tE8VwPfM?rqRxVI+&kjk z;q`jH;rajUy$N7j)s;T3#g=V(i(kkB0pcWtkVW3tm=L@sCUG_=gn)x9OL8J2OGc8D zIBTC0xD_=)4fAiN=w`Sx%Zy;^xl)Mbgz@p z_CN7ViGAMp-u>==?!D)p^MUeLm5-D+lowUaRK*?FIxe#R#QvoHF1z2}VXv?~E4B?` zlkl@s^%`-%301F_z`jZX`$`GyDr2fjuaJosz(Am%wh5z;2bmZjrza zNnkfiU^hu%uam$IN?_Y0u&ol<77473kFk>y-#sCLJuZPgCV@RFfjuIDotD5JmcSm8 zz;2YlZjitZNMQRVuzeEPUI}cE1h!iOd#wa^y#)3eSi6b(|5GKt`*I2FItlF664)*Y z>{^eu84p@6{AE4nk|5hq=gNS-KFVxxe3VgL9PYM)tGqy_9+sS8VRpBw!iGoM&bKME zQ&H-HFGp1rgmVi*uZ?AASm504;$A)af-&zH_+CPD4&ADS?w(H(XMyJZ+QRt4G*_Hq z0dpn1AHfcBaC~~m8;A2;2o`6yamjfLPvnilROg&w;d0lh!U4J2(a~mTJu&T68}?d# z`_1LZLvbl(EVt&KVX<=8i=PiNHd_L5G9pkmIm?U-2-}wbfmiI3=4|eElvwf zmJ0IXjih@#=&y=b*)-eU$?4$ z)hb$c}!%#t~eZY>xZU+oC^dDV|^ z_2XadGnoimaQhd!GSS|Q=qYl0*+1nA5TjnOMuykt@Vl_?eG_b2_k^h=Rwl&@|@S;%G?tHE!AK{eJnG0Cp&G8<{Or z;01}zWGL7PwO$@iZu+Yp*vY&Hlw6cJ+X0E5!Cs zLcp`@{E;YIJ?Pd&W~znpTojf|vqm``o( z%hvxRwyNi=uC82I{Ps?C2jro+l;{Xr zoMf@P+r^zQ>qLm@h!%L>+^2Fv@)M~^vQXT;>cygMd6bi7&{WKH@&NObI+A3;x0jzP z6D0+!e2!6(@d-CsuMM-D4CN(s?+U>r&u_v&+OKNfritz4%_E1&?P)HIOE?r9+YcWdKOC)#MQ9N(OR^y0{o;2?49RYbz!kM=5rSFBLL4XQr!|_F zoMF+s`_+}Aofm1svV)XkKMc!LakA6GEytWlE=}*`Bq>T-h-=TVc-jF~*n%@3yWPR~ z{>T(iMk{-3gQbllCtK^ALhR?BVezgdwjm8oK%ii=%b&~3Fl<(wIYxEkF7d6j(Jini z5AJl>O-5e%W7T{rAVD0~3d~myTjpEW^z;bR1mF_UcI0bo z$#$kUN+Jy6w+(y$SX8iWO%4gjSO+mJ5T>uA40!FJUV{WCNxY%3kG{&snPw`38G!x< znWPiLNfsQd|MVi^B4bzUkj|C}J*vrFc6pEjg~&`v!l7xch3eF6Ye%7k55l>LHZu%dTA+$zK3Bn>mWP3AZ%1n)qi zFBT@gGRb0kNkp{4Wpr-7LxH##qCt7hr784EL9&U3Nfz8|@RacVUp!#~w;w%IVSgy# zM+Yx4DD_Fpu#+FlrAOvc_}adxccPY#ENAC?L<^pgxyzg31vkk}nW&p2xuBYVYm$W< zlW2jc&kxfcxFc{dNbYS9!vBp&q7&4F$s5XPLn84ax775m)0kwz$0SZswb6MCi|(ln zBC*Zh@V+Tm>SIDMGc3V(~6)aP>Lt}lXFx|z;DoXb(#sZ=+ zdc)JgM9t{J6ibqolwzy+(XO>bNr%ooA!%bMK@_Gkn5>{w)+b=~JnHJ`@U{gyTYa96 zKx+p?ziH_3bdJMs{+7nZ=2ow-xozC1QSlp7BAqoipDY-cR37t=?7a|U;uulI?cQnI z0@vxSck$Vcd-MVTH}H*~0M73IKe^@aemVFVI93FH2DJP9noj`j=0ExYXdrj~-8;*R zh<}2N2ZHK{L^mPmT?ns86)7)BVE-tAeO?0l2XXA&5(%t}Vn;>Fq3U)C>;<0*w0l?m zBlt{UccsMI`d`G`j`E@e_RkX7KQV0ESi^WjTVsc3tfgh#)8h3udpessy`DfzlW(lq z+u>_!^35xwSh4o|m<09%64>`kVBaT!eXj)eQ3>oL64>`hVBal)eU}9Gof6o0NMIk9 zz&<2_eY*tqUnQ__lfXVGfqg&%d%pzstrFN7h7I^TTE_jYUQbIP0O9ajIyya_e!t(- z==Zm@jgNP>k2iK!$Y4_v9MTe4neQegzI#Rjd!GdMEfUx_OJMJnz~1A2mu-zhXdar& z#&vIN>sWicucgt`+1^URBR2b>J+zK{S_2)8t>cZYO|5NB%5xQW*-i_7w}SE&<4`Vv zbxUB2C9rl0tW6xN{7nM;S8?pzA_=Th0_yuPZLj=b#l7V} zF0Xe#>Rw*f1S|CwB{Sg7Z>sof#hZ)X;e6WhVaKKRJ+@!jlJJVKIKsgM&$68M>X z--@vA3*o^Kfof6i>fpc)&WsVM9S;J6ejS1j;SMu-rxm>PlgqNTwa4K=SG_#hN;kST ziHC3GDLVQv%f?)^ta7w&;e*hws_=w50dAq9s*qS*#IFf!%J7G(*;Pl56!Z!fB zLl6u&;Ai)(bUQ@2e>^-rF$U4ru!z|?{8StaJaXMgp6yq-d8(WAk9F17P0;_sH39e? zt}DQQ4+X;$e)yM|F2O&O(IEWy@B{$5YH36BCs_#kNJ9A13zz*_W}f#tKi6V8rTM%( z$->G@v_=v`W~&7*6=ObLLx~PYP&13SG4h(I{~MYaX?&tw0^rrH%GjF zLUk|dL zf8sHt=rwDS5OMLY9l>Rv{c&MjR>V*V8s~v{WO8JLzK($|m@j#fq#i=glf07hzDYcC z8jBS{ze}4M{VK}`4Ie^`4#BL;QmGS@k!ZZ&OWZtZ^_*CgTuuphpQ;z_W&Bjl9Qimd zt+O{VgOXyQtw^m=23eJ*heyo)*c2&Ze)0-hJiQY4Owgedbjgfi0jzGoQ@^=+jjMfew$A$z_yTm-t;{Fi^#QLH(c*|3BIH0XQHoBe>DS4D%|IODUn1;`h^t zg?K-S61goB3|j(EnV)f!&pv$zRhJf!JGq4NSuI|5Buy}|Ah%t!3&!$LoDpGTv)PAX zr47H<;t#C+*l)*aY+CaBQq-3>Oa=W!Q$E_>+0xk1(%j3Nd%BzZ`#rt= z9j&cRZ3E4X?S01?5##%srrk8UC2)ugC)p5O=r(53hCKm#bBt)mBys&^2r8$22aFje zVPTHB(1-)iw%(@h{-$??QnczW7e+C7cE{p}5%{jHtdJp;$#qqO}qrkD!5 z?B)TJObEp7iN&Y7}8)uN9ouyfWF; z5F*`z*EAV#jrG!_{rxTNJ>4DMo|f)b=oGC3V6W8H+3o3V=dODkWJWT`r?VgsV zmR?WCKzpaBzqhHmv$JEMwXLH^u4fpu0Fu7p&kH@|LJx`S3YA#P%hN*)Eo*kY#P9)5 zOSSfv_LhF2-P!7C>TV#1_Khu`p8obGPe*rOcYj+;TU%RCuS{=g(dH3$A8=&EBDm0F zF7%j8j}dEq+#X|TTeImimQQfotF_-W_4T*(^|y9=+MC;9mg$6k)7jtL4WuD zV{czei(J1k^xaI~$r4`ZKNtE>rvG3oB!~C~T4J6)l-0&&*N?J3L;6ydP;0-|{?yS1 zidv<1JpY0akdn7_bltky2m*4W+F(Fj`G0IX<;y(QS(H} z+IxB$`dSCtWTv22V{g^FjiCoq*@doiVFJobKw@n$PuHsLq@vdXlEYwbq8 z-2=@{{Y?#?f!>AzPs>10s|W0rJ3P&eecdfBO>LcR{Zjh{ZKFH3^)hpF@7tY3^(3YwYiCkm)0JVG=LG!2JA77uu0hjss$`9C6D( zD+4%&;W1cK=0)r2FusW;O#WdkmkvilG}4yoe3Trm-o&t(BVZFk)6^{|s7sAUkLCl} z47VHyK*Xxua!Oqw;jEKSQ__Z0Px@)$#7U<2!udb3|1WZEv6VDCiybNW<-*T}5}0)f z3?3s$>^6 z$?@FjB^N_F11)XM?S8nD)8>aO>0@nvPe(@s>@Br*1jhU=&0~$7?KmR!z;zY!MYKhx zzh+Dt@IJ`M2)h@e=_p{uGVTpDv;=$&p5}(eaZh8Tzu7Z3-ZJKCXz(?(jJJ0N#>afx z01jWl6$$we{yN)l={7St%x7eIY4!@)<}k8f%6CdD|1HD%jdPYI`%Tfke);bjxC-pu z%YI*Mdr1DP2G#|)dt|>}XoWGW@8!|PM88Ls379g!xGuT2+-A4$TCLt+LWheMe{-O@ zW6aY$-r537oTe7fSSO4bf#yb^uhHA=ZEkHes2?Qq8J+Ysp*XJ zds|DBXP^VtN}w8cdU|@B`aHd@1AYDQtfN8BaE*;W)^RAKEu0?(k!e=cj7%TZshVQ2 zxT8-+RIUp~YqPPu)2bkkt}fQrGHu1OpMX~$v!3HTo5zwfccWyCHNH!a_I3AkceXaP zcsiQfTVV?B>xbW3Iz8P@eb5m)dm0Ctz}D2zqTrGwvlPv3!>P}pIVRIgCN6Y{|GOJ( zVl6JyRDw zTlKH1zg7KA^<&ldSKnEEtU6e|ySl%+xw^Kxs_Mn6pH_XX>f=@Ktx8qhUUj%CP_?6K zebt((i>q9fzpZ?>@;@t|sC;|n8!OeyaOF*v8!KBYmsVC+yjbzmimz6Dtm4s%WW{SL z4uLg(KU%)8e7Jml`Reio7be zwEK4VA-B)H)!pS@;htOex3Zs?eXZzYx0c>ndbBiHx~sIi)KhwKX>rM~OTJU`nUcp#9w>QT$?=i{B{!7xl{A!GR^oR3 z!Sw^zf4QD?J?y&Mb;=cS-RSCfHMkbJT*bdB{%-N7i$74DF223^P_eIgOYz#`<;8P~ z{#^7wMPDp>vgqwauP-`Yw7+O)(fXoQMe~d7&R;mc=6u@uZs)zuQ_iq+kF(EN@4N(d zQ=W5t%kfFadmU#SuXIEmdmS4c&5p|*Zu{@;&)Pq0f8737`yJ+mwxV9`vN`N_m%X~u zS^CxXJ@cP<+hdB_g~FzCgK#YhJw{|F3LA~c4iv7@gbiLrZAanijIc&+bAeWCcO7y& zSmFfOiojI}eC%Uq6tx9~D~-Zt6keqXrw%D<6AD*oLK}Ru5rtP8g$*cNj=~RoW1XVb zqwor&unvXGG~xS}DXIsBOEuxuzgN^XC|sfm=Q|a3H3}DD$-RH(QAJ&a!dgU9;Yt)P z)Q~&wSJbOexL89H;R+O9Y(!p(!b>#a>Q^Z0aum+fghfzFSD zRMZ+oI`H+^ZF;Ms&OxCag?D}RxT030(1yZSS6yGDRuN&D%l4#;=JJ&0;UYt(X-J!X)(QT8y(-g;P3;rnDru>Gxw<>tibFBG*Dg?~jl zllAizwFHHKL1FNd(Hhl-pG>k(?qB$o8nqZ@59l&QEn+V_o=4uNN!m{Q;*0pj(e?d` z>OkS2P!s0biPSUP@=ukY-6P*H7&{4*kVF1k}WiNK#AaQJt3)SO^#Z5Ot+Egv7N zIZj}Z^?Mk_&BeQFj-lvvOtdLzt2xSE+>I}SNI8OOK8M9M(DB`xX$HFqVIWctBkbp8 ztW^8H;jKA@3EajK==sjS)Eq?7?Yc;r!Z&}0Z}!|7RN^T6sV3XMqb9}@9mYhj{oXTk zqC`~YI>|oP^|uczx8jRG!52G@pO`brP}2<6aeYrsgneocehNfN7+?G`zUcYG`|#b*vv=qH^-mWm6JzYelFFJmYldyhy)nPgu^ax;?zndJGmE6QH{()WPdfADMF#d(+F_{FQrwawDR?h8({7-q$O8Q1)aAZB+BVblH2A8&LKb%D(X7 zrOIxU{RfuV=YIKS<$9ET)F9i1vWM~A&wcVXWhcrW(PZhv$}q}4q`kX+r?LZO4`{em z1Il)kJwb6dhM#%cJY^fo{*B4@+&46+Y(?1z@O#hfd6%*UW$!b{hEVp9CTsdvWi!g& zqshweQ8uCMT?W~8DEn8Ged?)%GKjJya{koa6Us)E-LK)6G%FiW_BzCU657%L%FZB; z$of$>W03Ws>@5aaFUoGi?|m%ww9+f{>|YEr)BtU-$;fIz0VI0aN&MW0-}G-ap#Bk&HzQI|`Ln$W z-~4bmrJ(L-JB_lZUbt03)z6m5$ZAmYJE4ibw6_KnKaxTaQ+Vo~V>O`m5z(|JI^9|W zN*@sg3?fkZi0GL1t-Wh%K;a{zeHyB5ZVjk=M06Ot&r?;utpR0^h{&endU`&6=8(Otc44 zkNUq?1L_???bSr{KT-qA9TAPu7jJxU;=w0tK(!;Hm*KY_IdZfH6gwhXiy3;Pc%TN< zIwHCeQSUyHtO2Eth;ByF!!_Tm0hNx3Mo{$7)R~$kOtcZd_0X2r)POoiP&a5On_2_P z91&e_5P>R3L^};4ROEJ`=Wa75IKsN}D<*MRy)M9nC=@4*{tKzSpgCKSEpdl%J!>PAG3 zn&=5v%|%Sqpo!jKs{vh(py~}G(Bz1y&L9Fkj)**(=)kjcK#L=D?Jyg$-&`?V11cN= ztwGSeKe~1fC~yRH69e6I+v9UUeIt_HO!B5zf2{^|H}cwQeCfX+rfvJ3bJv0ZomFYVpOb?mx@{ zJ@Mjk@sunqak_rx`iAS{u18#Naoy&cgrXa8HM%Z!mB70BJH^iwzaQ4kuPL4?ep&IR z;9psOo>KzFGB&szRq=4e8!Jv$+)}Zt;#$~4m|tNp|3&%N z%AYQOclo{Lr^>_Sd&>LD>&q`GFLpl%I|!e2zt5d?zsenR-|QZAx40L(-DSTod$#Pe zWsjG=wd{_vLuF%SLuDOh%gU-sUnu=y>3@|zQTn#hyI}WVymWifV?{GXw-+5O@)m6_ zYA;$^RO$Sq^9Rn)JOADJpz}`W5of@;&DrI=(plqp(eY!)mmE(y9&)_Fal#RF>~ySm zta8kA*z7;Ie-)x7zRP}(Jz<~F%GRbNP$6?%F_+fB!i$3SN&+=9$5K`;3#+y~tRys* z46A)%rGHRKpibt%DqUDP-=ic@DRV5w*DH#?t0Xk7>~a*k8$PKdP%U#@hQiXDhLi;8 zWmI*)6on;|UsV#QnmHDs(DmhqlmzHz6ggiLzT&k?0@O1qyo9yIg~dPXR1&D6IW9(I z@s-AV#AHpd(k{yOz%C4nlNqZ)<3 zeEaW|1nO*#Dir?wg*Pe*RN5SsEbj|`w%Ms9P-}BkAo8bk?^Y71wmHgC_~X|uQWB`Q zIov4xAJ2Lvfr^`>423^D`M8om&COAY!XJchR}!eYIZ9CYy`TJ0NuciLaB0FfpHUL1 zyg7Hku1(Bb*>laD_wK)5W zDE#z;?@@T43Q_X25fr^~{k0|`aE3Z=$sL9!%*MxIEq$E(4 zv;P5wPyZ4+!ukuFayeK?tt3D(q{7!AGIH<}1- z6`n@nzOTT%358CDr|@{Rkp=RM36s1=rsLdz#ZsubswE?r`3% zsD}|ajZ^Wq-z-Ykr`p zF%*uX@S2@(RMaR6Z#D{VWkTC+n9#ca9#+&z6yA=)wXNS#)Cj)57hi9D$1RE)M&#=d zS+DF+)Col1gviy8!)`DtmG%)7UOD=-qM}l1zY&GYc1$ZODwWRlSjM&et%{0DrF{<~ z7eDm8qM}miT#LxdzTBp$s8rf-K;&ibzDiM1skHA#;iA8tR#a3fot^mlC7-HNR8%VM zyAZkH+5c2jR4VP;u^&(&DwX!@HRNTH8WogEvYa`I<#Ew%FIQC5DV_B!o%t_}3@Iw= zl=fj(ne+en5x1hEPHEr4(wYCqW#3X%)G6)TaEJO22Nx?U>Xi1aDEv(W4E(55I@e%A zzbV_MsHjugw;=M@-*2o@L8l}%1B~YU=bnc~gDRzc2!X$N-(@u_sFVb_4}m{cgI%)4i;79*>ucD$lY41hhf4nEHsG2%? z4GN!J)2pbOI=N007Q;z}rcPds!Vi5HnyaQxb{U15I=R*;)YQpNqfk>PJ2c@3ixpK< zC)lY}Ab3?T{c^z_DF*`2VZd%P;$n(NnG+S*#$(bBP zO4X8-Ft$ChA<9`ihUZ*LzV$BmrtHl%sMQTkAUN8rwQ) z-IOOcPzs&u0?C5VeCXz*V!?0=1Sm1bzLzEkD4lk-OOg&WTM~Ml`b%zZ%2_pL2$xKj zm)Y8@4tKPzB*k?s*-z%~qH8!y7 z9!mDo{H#o@mMqVnAo#M5@6VYHd?wFck2PO=J@q(RJFIyeZD?#C83A9kfha_Nh(X4% zuYr9aG~JOANRn32_GAxhAPMl7EH&&B|FPh#os%W~>E9z$#mR1(sb;liHkrydK+t>% z3|O?eylNnMEhV!2u43CtpGzcW4+(`33PF{HV>n);2j9)$aJf6W&v5r}X?-~2qh6U= zA%nqa{Zu&S9S?Xi0^k0C??AwBkc1*Q>V~tckbx!?eE&rzq!AAxW8*l|IXg6JNmn~Z8QAZ zIND%*4X#%i_|fZDYe|YE3_u1q4wI%g6xG5@qe$)sCtC&7^pS+=LKs?`v?iN zZG4?JLCo~(wOe*Iwl%cEum*QjnJ$5<;f}y~09+{h0<`nsGt=b}xCo$m7-rm-VweNd zod83_0jKN1F#OFTPl+_JrBqq%C-q~b!K8UG{Q92tJi9+@&7q<)qolc786BNM&YB+_ii zpnhRoqOr(~J^!T`mkQOjJQA=)IM02?0VMkM-O^!85H{}u%$Vim_HgT&bJ{6Bd zffm5n#X8d@O6PyN5Sf?UOLN?-E)mT!i!@`+XpZ{M1LWpUizuVsoE)LV`V$bMQfh@{ zWyW7E}h51 zW#%HEcSlpt0>&Gh%YLJ9c7~F>Xm*aOd(KIAdIAu& zC2*Gc;eVuXh8mMQX@*9{8#XK3SyqX_YlTTSCxx%Pd#Z7kRHR?ULjU zN}Go86B|T!#UNs@-aKGmAS>EiE<`~p_dAo@DV4^L$sRsH+*+JrEs7xON`~iL8eLf$ zVMd{eksxhN5CplUp&9mi{0BhU(F=g=jMULEZrXn!7%%8~=iq~E8z@&|FGUg<;hM&d zJlE;L9pgPmlG|u~uTa5VidfS#?dh01h3OHumf32H9JuXDZl$SjNC?kNX3bllp|(VJ zL?V`GaCxCzc4w>fQMF(wxrJt|D>2K1Ry||p0_J3io0)T=#nKGzO%BlvbtYzU1V^H> zlhe&?#mk%@4RcC4H#IA@=+Z)@)*DilG*+^ZccVbz$Y z6V0p-W9L7kmUak-2kaE!{HKgI6@z~8*%cfQ2BI%v+H@;v>-cyG&I@}XUUPt-U1ld> z=uWdaMmD^z^}^mMI5G^!@f_&x{U*oX{<6oY;JU?M`Zr%#hc zwOilUW&60?(e&(#TyJ7^=IH`B(h%BoufbR-Wc5M!Na`}o&uJl{s$ode@GD*XSd%aG zoKH`B$%QpxO%bN|mnIQ&C1v-)bCDqoMz1^An%)tJq1Wn{CX=RxAh+$Gi>#8y+!u@y zyAZIb2>W4kO;P@+yXg=?YHw^v%S$sECv}p|0!)9gZ2tG zDH$`3^PlFnsWC9J+W!(H6a|wa2s=S4FGxa?N5Zfb5f2=WpZ~PUo(EVn#$U>=fr9}K zN*aT$2f;8Y=m%@2^FBV1u^pAGS*FD%aW-p_aPzS`k{hu2nSu>{oa%8-%{*9^DVRJ=S!_u3i*CteG<|K>7!G)&zWrq9$-*cvl*{gDFU*KRzhPRUw&lmWj&2Nw z<0P2@FyJKHwIJF_EeQ3=Q{U5rM?1WS$cx0{`#8<)uH+$_*=F$*@Pb*)0eI;%R+Bu) zGN!H+twk70$@GiI3B&Q}kmXiI4gfb}I7sUA9xd&8$tg-o!VqHkKyZ?&|8(f0BNwY+ zOT)?op|hj~!KI=P z1yji=rLtK3h6O!j$i9!Gi@AyFHqqpO!jrs}CcH=d=ErR@knx#ny_95)1%mF&Q`SSHWSjM+$8m?Ih2gh5?Zc0MU$j;Fg!gm26r3G z$r_(rhOtgfoTgLlali(GTg@|y*}%3W_-j=TQ?mi zBiONI2#X!G1hJadW&=XPoOk0BvE&aW576Y7iI+V!$|kmKQOhx%;Q=>sILsxtA|T_3 zleb{W3%55i(RPzN4PfwZN!#>@n>x7)0ZHGQ4ARcEM7(p+O99!V5Zj@r9>TGBQ@<7S(VI9+J9PYPUJk_=EDTUC!}_HnmlBdCTUurBi*fZ#=>WoZjD z3$=o9E?aHrgUhpiO0r$tN^kej@O8teQt6tgxsl|AaLHWfJ?I_wMT4wg9!vTtqvfjb zfMiULPlTKP?&~l&wAz*@$7uS);`WvLHZR*iq>9r%Q}2s1@5;5X9}c!A4StGdLT zq?Z!ibV_*Y=$!(6ctX&^tpJ!yFw6AjZ1&L)vaHSz;&VCSOL& zWa!jf(LTpMEo!Y*2>tgc6~;YJvACTZZA13EY|cv^&lP{W_|f9i#WxhMDYg}Tx#*#y zV~&qI?sbG5*E%k;|HS^J{jRdZWt+=tE3d7*sNyFTPgdLoUi~{NDoTD)@{y7^mh5+5 zRrX@p7s?*2ii2OjODmtN{CMTPm7$WWOXigJl`brAC@*qg9`{nMPt`=9R`(4!!RUa$bR&)h;-}{_%#u;~Rtln1r zWxLB*Mmd3{BR8bY7f4{|OJL_oU@wxux+Sn>)!S^}7HnrXN_=;Z z1oj3A>~0C{^%B@!64;#**trr|MFLwRft@3Pt(L%6Nnk4_uoV*6atZ7<3G7x0>~#{@ zK?!V+1h!iO+b)4^lfbT$z^;_QUL}EDA%X3bz;;Mr`y{Zv64=cW*i91H%O$XvNnkIP zz}87%JrdY864=!e*ew#+Aqnhu3GCGp*e(g|S_$k%3G4<5?0^KeUjloj1a`Ru_6iB? zG70Qb3G5OHY^?-#u>`hN0^1^iZI-|`Nnjf#uniK}dI{{c64><;*lQ%P>#DzOTO+s* zxJlx>!xGpXur?OuFhb7%7ucS$RY$8{s5((qU3s$NI~5zs2i&X5j+B1AxQ+LS7%JiX#qY;&b+u`&_noBO?dys>oMXJ5MHE*L!~5oBw{ z=VMu?m2TPDmu@JOyOhk$G`m)K@8#o7OLtYOl(OEfwu^RUOdb1*e&!}n!1-Uv#}x<4 z+EfW;J0yNqmSL+I7mE?ijn2anoJ!IXtxLHm$Gzf{Pc}!1Rse;nan1c!KF*Z!-c)fp zcwye9mZ?F}MgSfSGOTfeG#6}l4ChCjLBUo{pIXh$`Ru;M&7N*DqF$aVqE)g<6?X7h zAamvn6aaG>l1YRO9&1ug%J8Pyc0+K{m%H{0FwOl^KE|ZUBo?L|l<(jvVaGn1xfP2G zhhoqMvVA$}%0ezImtEG8;_R;{)YXAI9{gYCATg5%FcqdVxRwcaNtJe|<0(5WoBl*Z zv^Noll5o`{c3mtI#%l{#(0!#I2(j z98a3L6#xq`tVo`q3_HawQnU)d#J7g2nW&jqZcJf5q2zID3bc4iv>EpWLf+|NFnlr- z(8b&|NwYbeJVtZBT-?NqB&FGsnUgd=;ijs$jf2UfH0fpHHifW+fs4n@O+7)2g_q$$ z;e=Ip@(4}2UEJ~cPVjge-wl3Y!68emJH~vEnsc8MQkV@{|6dAD{;T&^eW>c<$_FYN zD&AS)F2BM3dH1fer^^~jKTz6Ka%YL+y5Hp~{4(|u+LEWA{=h`7RhFjR+J(rG=3sS2ooAu&W>Xwu;_t4Fi&xLV0W&9{p zYGtWalv=&G`z~$xq2`C#UN^EHbE#1OyVOQ*WQ3Agnp%mqCVVGD#C2V643`#lSBJDR zrA56?QGIA~(VmGa>V{{G>=> zOsB4-$uAf8@T09Evn_>FTXxPd8-?67iHmbOOdm=a?3MZ~EPA#UX4~Z{Z zN2wP!TzG>%4d$ijwuE(WGoeCgE=SF{^knLC%FrXe5uBfq^=Ux{)2Yj_hJ<6Gj1I=Y z*xffpBN12%#Q3OS+GSxNN%o;ln=I>Tji8=wRv+%4o5~bilT12QAjn$YRjXP1!UotFF|=H09Oe zwPV>0F_(hnA(w?|N~X0^ms&`f>=t(u$r6h}7v4EOF+3UYfyW^q*!RcbO35GuouQlA zx%d@$h0D5&e3R@hP{x;~7GT*8ijK4}=n&^b;3O3m$8pOjZ+XaN!NQCbaOF?VGVH1O zl%Pj^(#^kSvOeWf)B{o+pG?i894;2WxUwZe(lOT?lX24{Aziv?NEgU=EOil`0GA72 z3Br7B4jc@G%;_4Ra8qZ)%H^rKG^Y}KC!68Qa*SM1);E2jEpK6msZFB|W-0~1Ty{+` z@UaMDm#36-$*|FS)|-zZfVm9eh!+_yPSqeo;d?&$6O|}KJpe|ID^X5H`niWTShs-m$;2Z-;hdNm0}UR z4xAG94vBZvGpup{cmSvLfk+7UR6+Ieg{Ht~hq(hvzRb((p%o<+>p5{ zQJP|b!8Rp??=14NI~z0vO(}aQdt~IVQ4b(^)G0{c&gE8S*{qLa5Jf`1k_to z>*?^;n%F0*F^q1Rf`C`%8Z{SvE(Dj#c{=?e&5zUc)VV1ZZfS|QVuwD8;6|i5s~I^r zgL(FSCYk3WwrO@EwT@QBO7W|anbdRa!LV-wWAcp44k=LeaenG*%Ai+WCfXSK!^8oY zzAhr0h?;*Pb3x?+a=GaPt2#f`CCjWgGC57dqQQR-&(Ch)CaP?sRl~2Sv&+7ZsrmfU%7Sn8~`qnE~5@n zziL&N@nnnqO`q!z$S6;?e0IhTR>S|L+sI|6hHC-mwtFPD@}9OJEO4VEqzUp9FSH z0_&B)GXDx<<;(mlh+&z31u-o1uONmUk;ogn%Omz(cK=@t%kKY+VcGqEF)X|PFNS6J z|HZKE{=XQO-TxQEvinbB*c}q}#_oxVeV5&P7sIl9?_yYX2UZNr?!by+**#}5EW76{ zhGqBk#jxz2z8IF>ffd8DJFsF{b_Z4r%kIF6VcGq3F)X{EE{0|P3dFF?Ux65w-H#N* zvip%@Sav^B47*OEZ?ZeaV&7$VjK#3*j|$7U zmt73o3BGVnJH)V2iM-t^ft{4VGCv4ne3>5vF)Z_gAckc=Kg6)i=Z6@U`TP*WGM^t} z*oZ{=h9$5Q64;Og_J9QT771)n0=r)V%lxE>)dllIBZg&uXvDD02Z0!t`5+L(G9LtD zSmuL349k2Fh+&xz0x>M}K_G^$gVX0n1;@UF676A10vngW#>n~qd|T93JybPQ`KQX4 zReYx6y7I@$m%69R?kK&ZUA@JVMZ;k6f1hKG{oVE=0H4(lSkSR3+Y%OZnkf+p zxJ)+1h9Mf-gx7Lr%K>qBLNW(L%Tp}Cw#-Ix=#Y0h2DccuOicu$L7z7?JT(s1pM#Vi zIW)7d>n{8Pm#Maucr3+&Y_AYEy<{6ixS?&{T{Au6ri~%j$X-z>bv-?F9Nx5nEE~DFKm!w#{>p^w7Xo9#es-?h=>-Bh9W*YgiTyhXRldwz7PqEcY}w3c|S@vyR2jqn}k4uQN`=P_UA@IK?7lZ$Gt2u4Js9RtptP zKK$RKY_h$rW)+UQHO1m^A6IV@Ega@37{(fbnDqQ2o9$P)1*wfn>h=_i=Y3M$drq>H zuUgGrIB%ZveWq}xT2m}&wNLGq%Ty*@yTzGup{fyju`u!W6pMEqPs(=jh zd~X(}ek{czTGyWv_PfslMB(t6eG4t?F_*+S9Wrx9wZvFfxua^*2``vp0kBsmyrNa7 z&2%{@5X-~Af8GtV1Q?>QVAv8$7g{W3OfmZ+K2X2HaT<+{*r8ZvP=Ob?g`y8{)u~N* zyeT}LX{J?HdgjieaG))wm9zV$6Ojm+d5nN`Z{~sJUtz4t)7}Fjh=G=xKweAqA$f_RNX3GT43|U%qs&? zc0B`c_{FXd#)4oDy)_(~9t?vQibD|3GKWqh|2{VpnOVw}ViB)aiu-?{t`YV@CPLnW z5sP8F`58BTyse_4N&8C_rGj)=*^oFY+Wv5hibRbkq5tT04o>u;yihLBbGkOrJxh&@ zK#fnq#$kNQAB;d`b8i^7${;Q+?T448_S16MBk#s%{_$v>NeV^ME( znwH%16btetv9MrT0SnQD)u1mj3hp&?Uf|N!OK?$&MFATWx30}WRA@gOIU2Bq>0Op$ z@xLTmU=Dh{-bwFRFa)>itaV)gT##U5S&D@N>pitjv<0$>E@R$aVB;VskW1_(9wzjG zM2nK0VQY+Gt*%V5sAap=R?%W&`{pE?e1kZ1flUy0{Ux^5a_2l3f?EcoPRD}abR-lQ4$uIaa7k{I&R*T(?f_wbdt)R9j<;zZqJ!hz2fe`% zxgch4XnY(uGg|9Xm!)o|w04Ov#(RnDwE&Et!Ew0TuIU%_fR9(s0&j4s(iyBIwU^SY z7dNQS(hALmmi3rR0BaaVYf8nF8lhA=#g8jsT=!0e;;7t_Nj`fCl^eq)rLFk%MN}Vm z#WyE)6D7P(Mw4Y;EXe7y*mPw?aY<*i>xHQsDW`s^gG}mKgK!d8MXboe+}Qd5h^=~e z)hDV}R<5iFmp|ry)?HcpT*+5m54x1%lSSVKkAF`%8y#=5zhDpAzHb{5J^oi6Y33HW zUff{^EQZE|`=+9FM>l(kmi3sML%OJ-P1u<(#@@Bpf^tu&hdRLJDzOgS&(4G;YOd=IXayeCNTOFoZ+M zKB&qG;c}zxx-`vP?zW4ELNKR-IWxDXoDeP%tx%K{bF{loJXWwdq0CNZJ~|l`mk~B4 zT0)CcnseRta?MEJF3!`AtQamM!;LGwG3i&ss#C{tx)MHI+7k?f{C!hV@C8eJH!;6v z;IqVBa6A;3rmiGarI=IRM)BE7SJkvmZ&}u7Kj+eb5wo^;+paZ-JKEM9ZlkV<5_Ku& zt9RY0J)-rth zaZ-fnA32LIr*V=I{?e48P!Q<2$vA16cDS=PPBP}z-1YJVg2tl!dz1|`&BzV~Z73Wt zPC85r=R6rF@rw-3>0o0}%*4s~6>dT5quKV8=*<7Ek9J8x`K*?r3JfLl7GH`NjS38I?C_3_ z1>-~8M@FLbw~1Rlad3_k4SGWW^GD*~;uTQadV51b*bFuN3I^emS{RhpG;@x;Bq40U zsP&F4=V0*7fG-XQnddnpv!?S$jHw#aid=olLKC3<@iG(n!zn; z=C^rqLOAFd%Se{jHeLMp%O1(mRC*D;jj=-bh=39Ag}qrg#xW0crbpa-ts?0jPBZ7u zE5!W`f{z!LKz3s>J>n+Z*uYHImZzC}XNjZTQP`yqMW%_BD48$fyC(gxpHE{!9Q203 zJ(tyOvA_#lo_%m9h_<$cY3BWTP<%fmf4b)C%8%vJV}*Een)!L&G%If86o?!O!qS>^ zuf{+w7nsYA7F<)B`FP$cZdGPTkJYtySi^RU;+BX91>szR`ruy&`3DP4x<^e}x1^a@ z=sl{i>uduJIGoYGCQLogI|BRzhXa&%b^0QzrF4sjBGPPOVH)%u*a{J`G|HB(6+Vv3 zk5alS&D>7+tHQxwa6qR0Tw_C89&cyb+)6YgmlnU;2h+>}bwCyOf0`MN80{PtsWIaA z`GRi>;)gY8Q%=rkQHwEC&VJ4%rmxpmq*)y2UE*8+hOU&I zBAzswiHW>Xm}*g)g>YUeeoV`1E_Vf+pK+7VG)Giz4yIXT<|X2W_gGt5enc~JZt_NL zw=B(qF|QV%Nic=nC182T<&Y_YjOu+j%>ptn5s!ex3Y<4e5P4w+r0X0>vlz?E#INOI zPP5ZCJP=D94p~{O%sgkORHrvZkl;?Z900)NwY}E636b4RfxhA(9f(jFRA9P z%0qFPX4c>rrCFTgZt>vMM5NaDk-=u zN`bMdeHI9pjW*t1@c-A`>h(3Zjr*#fk?@=FDGBT+C9t26z`joc`(6p`qY~IhB(U$1 zz`k1o`z{IWJ0-C1kib4Hfqh5<`*sQJze-@=CV_oW0{egj_I?TMTP3hF64KcVJB47aC>JpEd{fd41FU2jL(O&Yp(g;*mABrO-Rv9g)nw(Y!Q^Jk%?` zZ5TFYu{OMWfJi zjUT7HuT8TUMHA|fXx|W^p#`rDO~Zve%YG_2wHS{?C-UUl^fos~nf|gO&B7OLQibo~ z;#o%&_Sg?aq6fOQ!q4NVQn$Cag1HRQm<_*4i+gce3uxpKF79Xq!b8R)QDfb8$Fy3o zlx}`7m#X2OkSEPz8r>v5TEf+zSP%kzYMg*wE*@s8f-i9?>!VUxn#DJg*v=N9mlMJz zGZ71hNCh8E*HfdImBL0bhNHk;QOk^Ce#T9lwyg0q3po@_2)pDO)y~L!;QABHX*&Y` zU=#)(h^`k8L?_@cuvCHbVRp02Tzhiwa;Y0bLFF@{s`Jr%c{HaNrCBs1iDMP8F4d>= zEs@@kHx?TTOpHNjT63=WIBpIy!%#(f4K-$vxL`-3O&*HEXul)i^%KV{M6(6biK(@7*5^`EmXu(IvImWN=~!Z6gw$Cf2GJj^giedF$QzlJqJ{dxN-F zic!1`uGcXbIY1b_K-ib1WaNc%$?27RJiU^VTP?0-P%GiV@HTH0f+AaWM$1Dk0ljp} z(^p|56ZZN`)4&SVOUP1zxiN+5DCrfH&SLR4)*A|V!=#;Cx}GNHCTcx(uOlDX488%n z$G{f=_zI|tA7;1zm!+?ythS50hT#o`8BZ~0x`pxFd}wufEWMnvTqbVtGEDLbSM9P4 zCkzj`>8{!ZU4q;+_ftE{W9chqn|#*cy_P&Y5KaC>dKpcAxhi}sT1zF{iqrT+lz{3= zFQp7T;^s42I=Rh9tWQOmoJcR3ZBb+!aA+j*nvYnT!r^o+C9qiBfTS;Qus?h-t0CxO z(Y%xOzhb+|Ry|(zROMeQ{#O1O_fN~7EgLL-rsQiSSGau6yPP)ri*~>5+W?aLIgw_5 zQ&)@UiVlODgW&_+KGMz1UEcDLn?s7Dno3ccxk+slZ{zf3P(z3x6)p+Wa{(R~rI~9~ z35|*J&;~i?TPMcllM`2%SHhNN9#cK1pc#m5%duBAVt za2=jq%)*zuGS4!<@ep(}GrU2I&G0w9tY-bN_F39SD$>k9tAy4#ijz5-7P7UhWkS!5 z;g$#GP59ilHO;)THoitU?M$`x0s=Pw?zY! z-e>?EmRd_5o=_3purs`2RTXo5O>?qie1xxU3QV)kVE7{TMuP-4FyJ;RdIA{gBeR9! z>8>!?y%JA*yTZ}HKG0v7vk?PA?@tif!y5`7p@!aQo(3AN0m-}r4Z}Ju1TM}3IWgMT zG}C0``=IZ$=0oOG!*?^~3cD8uxz2q@ZsrhqJsO}Mu|w9bu??InWoksLUcuqQi`VL)IW;ekRbA+2BE6Gh{^X6$Tj{ zE-28Hf%-Ia>$_JK_Cd^ADHKdR8VL=C$&MRyQZC>`t?*miOl!KWI+59G4e)g>=3|ar# zKpY|aNypZ&{8$(Yy}~7{b++2tx=H_-p+D9go(LKLoQwvIf08>4KDsewl)~i}lxp9l zqtM>;dRh>B62hKVthv%Glx0dH_d6m*aVQv`@EbD**){$N`7~xQ(U`u5W^nkF@FgUj zTqFeB$1!O1;CzeZZaCnDW035Hp1=#-tR1zyJP?gcuoTyxud%_BA~uUP#QVE6uy+Z2h1NndFIOySXUdjaKrd}6(Cl}mucq1WRwJU>M|}m4kx&nr z?(xPf8%lf}w*ZF0C*~ngCk=jX48PV6_ici!*hU9W%hO$ye!KYTnSPAKXPy%xN7~@? ziI(&H^jah;>@3;Repq<9yiJTjxI`@<>_1GHk@f#v+vjZ6w^zHX)>Y0_IxEJ@KV9D7 zer4H@%XXH2x^$K63OM)oIsesu0$~5pKWbf?x%XVB3j2wIHf5OS=xSh^_`Nk3G!Mls zYk`(bO8@i~Y3Av3`zsqo`yZ}^wA$3!$2hCM!gy{jwCTmT8qCP>!&y7qhB;~g4z>ov zaL+oZooHm}8ep&r()%2lb1W+){T(gOR!nBKWL5H!qp|*sABTmaH|)>-)WC1RdjR4< z1i}GWDF$+_CJb1uRJ^_eu*TGvQLt>xu}B`>2+70cNd_hpFPSFbW^Fvfl8zspY37FY zfOudL)6#NxFuvbBAfsnHPNR{0ncIRW`I0nq$=WHt(QZm#grknhOC`~iW}aBLo)TUb zVdKhb=6Z_ep`sw1OEA;3pq&Tzg)v2@IN;*i(9lMQ;nuk3WmoSau^zf$N1x3; zLS?FTUS^n-^E-k=8h&XDEc!Ww5TT7}ITO>z9E*W~Az%0zSd!=b0&aj>%0(-4ZV|C^@8ZWAam} zPG65&weTS^^vz5!BvT-V4j-4F(xqt@OLw)pLA3I8J}^IK9W+@UaudJys!_`r!@ia= zWmrjTZ+V(U(`^;E-(%l}eF@EqEQ@3=L}8}pFItJtOS9m%%f(OJ`2>wm3KP@OEe()W zE3u2yEU@fK@wlJ*2b;(T&GVS~nFKldt!#2EMC@$HHRmBmpGlCT_-t}4)a$Iswem}@ znLLvrNATI?SUA_&kfZH{Q?2xw1i74TZZORPwysN5i;gO&A8E=kXPD!mxP-ID#V(NO zGom)hvV{Xv1;{b;P$2FFcTiq31f57@@Kwp>nhszn8%NP6GQ|3G8nqu)mhTJ|}_wUkU85B(T4f!2Uu4 z`*R8G&m^!vmB9W)0{deL?Egq$eucV817UeO3bd-xApGN?^Yuf&I1w z_FEFzZ%SalA%T^;$0+gL^K|EYj#He&9ESwfE{?7Kx&-!X64mnE?OPXhZT z3G5douwRhC{+9&y^Agzql)!#Y0{dAB>}TMBT=4$?97X)Qb7~~8b0o0U!{cZQ0(n{BFU3-froa-F#us?5K4v=&Hqb^TJ=stO~c=U8)wFyTa za4^Ez`N#p_Zh(-p9P1ttJE+yA%$@g^beIxdomefrHo>dKTwmv#;WV!Gd6pPryO@~Xn_@R_YM3vQ&@GHVRTZ5Q5=h4_2ia-fu} z(;?YY6}HpIjsfW2AE(jqad{~v)}#+mN*hjX5^Wc_vnf(=d7)fl+Sy)hZC0)f$9=r^ zlX;s}Th59$e5YXLY9Az3cq){>g_hU)R|rR$uoMEXk#S)H<%GQqtuR;fBt=rBTz6J&;QE)B*cb(Wl1h0{rcy{>$LSSG`{&8@K3X!tS4f!0urM_NVzRO`IHB9I)0F6K z*^Du<#cCYSO)^EKvCjFfKvc@Gh~q%Ruf=O$cH9tYl93!+_iV|tu6 zfnoKKXy?$a=&bhg`iN(#cYzlKD!VS1fxIa%o#_D0OTT!02Ax`_hj2P}KBNG9?1(1Y zLlgNuX+I^uJ0a{PJfCe6Cl^Am2xP~2+KT!XT8N{ep=qE|Thl(8If(#(lQwrav7OWTuPbH;_K5dqntLV!j~#?bq7w9%?stS)A|;jLI=aKxEH*E z5Yyky5f;eD+&}~AQJRJI3E?m_#`dVs7Wr+-O)xHXG69g#sBrnAC+wZ}j*Ng)pgu5L z7#ShtL)JSIT>=+LfGl0wlJ);Zwr6eCr>p){6|6X2e#rf0cX!!G%G{;5l~$D8>MAQ< zTy(ed4#!^{LHqpx{3rWSubE+C?hmNKOEk8o+31b>iH!)c+a`W^y8ZqjaZ2C~QJrFN z94^$xf)M(~+-)RZ=2p6{uByE=4%!qu6D6WEGHUn0+-L}5CYl?=<&)_@q%dd^WO*ji zFkO&pFF0uIhQgYT1=$|ToEf|9Kn0B+^nAE#%Dlkny~Ugn9*UclOwpFl*jUku$G;jr z5QOE|K29aQSGHOTv{tN$GT-Di*D2Sf$Zh3EDcHw?5|MxU{s| ztgVHM|8VQ7xk*a|^mg~(N3+O zhV5aEfB{W5TDA6{=MCDT7Nn2Ta_$#5qaTKEGc8t61U*v(ELOYukleD>#-D@fBb3=P z@yMPeJs5vC1p<@iu4Z_^O*bN$5l9bb68!Ss@<46XsmzVJN$^n;vl!*9Ic8{#R`G+p60t z|5oX*=qZ0gxy#*EdTWW>HB$VE;)O*)=iQFafCoSyfc`E&>be;gTzP{!AzDv#E5;A5 zz1YHWLo_lq$!R=!q1@ub5y80S6YI*cBTO6Gycrf{d4nqK8k$UybYUrwfqYPI1}L%X zW>~D{o79+S$$~ZmN0f2O4UcaMQxtrOOE$Ar!S46NOhOKuywQDdqnTWmq`BER!=f?o z5#M!WeMl}dV(*+~UbfD#V9a|};mbh!x&zcF;{Tn5Rw!IGqHhW3C)dF;t)A60EU@!l zaXrx#j8!;GqHl4tMCq=aVZohmQiYepmKd#K6(IOhezJ3CSO{nd-(#?ysk@fn8KM1( zwHC`+9UsS~q|Ghrsu>m^dPv-B1tFq&DJa}}3!%9bEh7r4@q}-NMUZYkE$lxF!;RC@ zLdgDY%-#sI9Xst6PKi$=waoF{GGJ4a~4; z*{!dr5uJ3f49U@6{!%s}1PU3ncP)R~Hl(pwjCH4HLUT5O4-N8spW<(t8$K{_7J*SBOd%YJhGp2DQM*a`>VQZW~(n*4MWGx%V$_P^OdKDgz4s^YI-I> z6W6-rHA78voQW6^dYKqyFPT%P0 zms7d85ZP1!d%99a1007z5r7L&EqNu#Lcg+l3qH)!d?ujD@EJ8 zDJ^d>v^6{wgas(XYnsXm7L*^$rKeYiI)8=*#po439Wtg#4qvA?N2m|i8)8{Dvza4# z3s8VraE3+6@FXN=rA&g^8&yW$@&_X$BTWsB?IR=oB#aig z432?A(VYSBL@hBR1|u5SA&m!pwVHK;CLTBp!y5A@eQbsWVR(SBuZy4 zr=>BR5H?9Q=8#plRx?_mSd0V(Uf`C?OVmE;e0|BxWwb1sPYJuCH)f6PndNB?2sp2K z#Xy?|v$c^C)^4=^d$6&!u3==v$lQRgGs^4YbQ_Shlr1xt($evr65i0%l|7= zDx&af|HP&FvYAV0X-=IMHt-VK&CFY{v-!e5bs1kQTgF10;Cah<}1CS z8gI)CI`>v+^rVV|;n9A02Qs(pq9kdUz48=N4~xyW7BoZ4vCV{ZBB zi+azD76xLkXvJDA)R~Emd6kqC!X=aEeqF|1O*2rNJHx_3tP@}5Ti9@vC?1MS8+-&% zLn_i1)Y_R&+CiGdodg?Iaa?wqOECw4OJ*n-4o*ygBWoXYI}$+HPq$d=qGY2bz+%g~ zW;&3gu+@%{0$8MtMXaGpasap-^+me6Vy2xk*(H9UZA=L4bco$5v2+{^4^K@_M%hJh ze(~|%;BwVFh%(bgsje5_fHqN`Bv)$j06q^tBaBNbQ-DinS}CioYQ1Q;HL}`CtjTwK zqhS)0uscSBc;#E!=7I~bEShP-1}E&}*2EG_@*-1~cp^CfTqcc84YYH*W}1=5tQ!9C z)Wn20ns3*G0k}Le^|p1UiM6JL#5|hW2^^mC`2qpx+{EsN->?$9-@o z$%}WAVj2rtxGQHGX_j`Yt+Q#0?1uY>P-M&-(#%|`L1muo(Fj{PUg2g{@6AhQ8YtPJ z+4Y-Y@4>(jj5QFR1RN{u2$0!056>KEE=3Zd_F#aNXrg4Mo|5dH{T8OSRabET(g5UA zd#N@raTl5GVKT!s$4nh9ihA+*C&mF{`&2NHr-JBXZniVMcK(cqRfxFGVPwHJ#CAr& zmJfnSj*MvTQXD=2e`Yc$!+G5lA~rCuR4m!m!vUN&bl+cjAn%W ze)L|j)b&-}@1DD#dzNDa>;wUOlz=@#z}`>5juWtl3D`pf>=*$%O2Cc~u)_rG5CJ<# zz}`o|9wcC2O28f_Gzd3<3K90ehN&Jw?Dy5wIr-*sTQY76P_~ zfZa^M-c7*XMZn%kz}`W?-cG>YM!;@@YjM^1|Bn#9J59j8jDS7I?*DHpnJ#JG+BDtx zJB{}?e6;@g`o6k%)&51zzt`-qUaI=js+!8Vicgk*vMg2lGyrLTl6S7~+?uiE)2eDa zLyaMBrUT$sFRn&oEW!v=m@*Sh@C{)1r{iHrR%}<=tl|SwJxOHdQLh(GkG$Tn1~*7> zi@2}=;Y_^nhtY{d;a1Hk5wEnSyZbwPeLcNxt!-LQTWeQaZ*OZ~Z|_X&Y;Q+Ld%)Kj z2>9BCUN(963QzBuP>)4z6joe5x!B{Y6;SRAYbv3(&Yt16q3)s9_O8D6)~?Qu&epz> zj<(jmvF^c<;h~Psk^T-tLYr22j?qX`*%e-0LZd9EWBB}P#Uox{Q`wC64)(T>^>((l zjrEPRb`A9pwGMUnjJEcT_O=bRw+#(7;+1yL?;yEWD!zyHg3_bG;!vMewK zkB7l1#SeGc#=-#JJy@H~E8|$3eY&zQKQl;U2^BiVLO%4LvP(Gcv6OGl+{+(ZfH)i; z+pC`VA~$3@uyPnF_N#~ZU>}0Hjpu-1>mVDhjw>K{42`TYe+JmcSUE=_l+NG`-1|Z# zG_wNzD~GTG-RhCz1vz%lQkcFCu}bpBH(bfjtc)S~-lVeMDB3PSpjDHB;Wl^4B#fOiI)o*T`(s$}ln;)pt;sozxynz!h$c z%M62Q;G|=hC?h9BO8Mn3ZqKa@aj7Mht(k0{+h}HYshJ(z3X`(3eR!?b{qmJTtl$p) z4prf^L2Insc41qeNUPztrZ2AChb*?~)f5)43pgV|S+2LQ9K^DR)ptHeBfbCz2xKXS zn4K1^og$30T_6R3Qu!E8V=XPFiy01+gDWpZo(I%dxxC_CZ3kp13d5o)m9PpAtsKBA z>`Q{xyIL%2Tc^+83gtbPl3w>Ef}Q_2l>DTmxxDe88opltzWNPy3$=e$`$)|vYZ|L# zRew`eQSs*${pD{jI}4!ytNtV(UYWsmJ$FUfpw>LmK#WtI2F(Lhj16G0Lgrba?BhxG zt?SbZOg2`JTBr{{nR#+GVj7M(_m~IGM^{fVyaz>K1mR5{SmB9DPAvOXhmA?iO}s4F zpJT6E9RGq7sY#iI$;}hF)tOnpV})l?=~qwD2(F$Nw5Sne2~EW!PMdFcj8stk^o8H` zdKVHip5r@-n{msK>V9!ZCL^k^wD4Ntvzb zG!9Xj;Fz21NSuuae)f82zy~k@F_=B((9Of;DrXE;-MexQ1vQ^kc1t#66oVUi9F(Gm zApF>z@DPEx8&MvDU$(=bzAY8(=%PQA0MlPiLS%5{9%Qitrj=m*iWlqGub$>Zd=Z5O zS_U7eq(Yh_o{Bq0%GIQE%gV!oPOIw7D2if%RD1CuzBR4 z#4){hsHPngKw=_p~1vyU2)96Ua?JK8{R_C&E zZcePDota%|E&wT!HC@9j+A6kI8UF`!2Dn>8=%(?JQ5OD%{mZ%`H5W6l7paT?Shr2d z+gGMgPTkAObJ#=-!eK3n)x&ija6?=lNm;7w8Y9QT+`1`%pC1$zf_*u5O579OuyPWm z)4r@6|7-%Z>#;b-&XUN+`TT_;85Z)3F|&%r_|4j5^re*(D3b~G$YvuN+&V|KK<<8& z&yj{!+dj;Sp{4RFaPM!H)2+BG*6Pzjv|=KKHv+#K!yzK{|Ox7DABDX~XewNo=ZdoDKP6 zXrN%HQWz_xhugB3tnmCOgZilICc?eA{AE*)lTtD(EmqHXZhFygUg1eThV?C~O!;oz z{HRrub_o^$O1YY?d)o?6_HjsEUC+xi&NN15cGoGeAhamCq<4iU06B3*S!xiD`(n_q zjrnGxLBIHipz6x7I9^I~O&9)R%bDQW!YgKkW;EaOSl2+$;Nyv?=HXC}T?n=beqkko z6Z~XSIS1&N?*is}!Q_fO!Z7wsN!*R1aH(`%6z66#BK&I3*U!|fLkMzq&d0}MM-2Y1 z=3`vwZ(Ipuowuk53dHZ>Uf4eHa=%M!ab5ce^0BV!Cm{A`Fb;+y5Z=?nmV7Yjfo=gU zXxB+Ty)ut7*`@A?jbDL_83-BzCAi4Nd?uGo6mDA}O)oY}*-8j098|Z5Lkes!47u$g zY_K*MJ)eN+C{AUl6ecCsvTr^%!#Wb2)93bkx2|a;T6XxN6pyy3dAH(%_Og`=D23Lf zvUvtpPuzCr->5jBO6zWDQAt~|=ST2fj2jdj32EUBOQ?E2KsoOC78Igu|`wq_-W zmF-qf?S(HJx+hn4mK#D^@tl6)!pa>=Kh3S2Qeq z2YJzSxt+qY#b!)e^qS5`N+VWr;k54RwUq!Di~0c>D-YI4lA$D?ynw`l6Io=%FDj}W zKN$5;u3K*Flj~klp&sL_u-Pv>__K9yTnEltQ>D+8)ckAB7i!*Fvrzw?`j6DVy53vg zR$o!~t>*1bKW_SR(@Imk>2TAXjX!LBuJLV+p}Ko&|D*P6wb`1HnoZT;ul`K+o2%!l z@2$Q8tOY(+^}4D@s=B~u;MS*Yy3vYSf3SNe(4XKEK~kJh#{-q(0j!}l6K(eO+|prNm!q3(lqFRwe* z{CxAX&6k^xmj+7vN*hYPqpFA?_(J?90s9*S?1u^1UngMSNx;5?fPFgw`zr+O+X&dV z60mO}V1Jo_eKP_3O9bpM60mO~V4opi-$=l|fq;EI0sA@v_7@1)*AlR=Az)ukz`lxr zeI)_=3Ig^D0lQ4VCJ9)bfPFau`!oUj6ao7r0ehK%eS&~}oPb>-U>6D4O9bpi0yaUw zlKdD6-(4@C^LGuo(h2O~9rI*cAeHfq;z=uwepro`4Mzuono}M+w*<0Xs*)o+n^u;as}6 z%-`4N>(TnV{jGgkcOQ6wxAnF5&%)mVUG42=yt!W^eD^~H><0#eKP&VhtqV^<|`E5LN+aVugxj0VuBqQ0C{7yD3-pHT%=aJHv-y4Pv_fNI}l-o`@s zxsO7)eK3fKLM-*rlBl)A)KU30sqD=GwIjuotsW$pzZ^?|y9igyPDH{%@QMIi=ab_j z_TfG)gGos-w+)s!80_oz3V*!=7a<%7O1Cyuj_TuH^?R_<`JiZ2h@fmlWw(=bg-8jS zQoA)(hGg2+-A61MYaui{llkqFyjS|?G99)$Iid3FGz8>|44#j3nqkfOZB4KRcmX)WldZX%L=|}Ju7cOwwRXv}5 z#-iXue+h!F*!yQ8q_onx07M<0cI4Qx@+5K`(3Q;$#AXQYOCb$)FfOKchi9DxBxPo~ zVdC?n2PVh?m@6UqYB=DF20TZDGb~aPW1YNVxBHl4hJme$%o!o;?C6Oe}%4-`%Fq~UUc<3NUS`8GC87d zw_twMCKJhoSOoktkqUO<4J(gh#R<8I-0N~`Y{EXqq%dh^v9XZVrIjUQHI+PlZC%uC zj+2pyBa4SSKidmZrt8yLvFbZk7WwE@_s}r{#;~m*J6Q=kE#VVpZ)kta`F)pz^MY zB;4H3m3_TzBV_;k>N=e5*XWa=BH)SBN7ei8G%Ur(wD{pjEPgx!OX8APsq%xL6hcY` z9SY9O!KWAS)1Fuad+zNip3!_%J#B?39F|qabaWBC1LI7$A*Jbxl+yGqEHIkLZhwmB z7}wN;XBA?1CK#WKB!Ds;U}M2Z*xqd^Zz{3hnBqCW530K$SQ=JAu=(WQg@)?>m424;NsJ|1SOll&7!A*7U7xu;?d=suSGiQqA`#! zJh>P$(f6fzj^R;#>RM%zKeM}a7bX*il*%M`fVVfLNjZ_a8Mh;y$;XJ4jUgxP*j9j) z;C1ZG0hlAq{;S`Vx`|g@{XRjofKe}L6IlV$isxF!&g+iUM&vcF9`ugw4k0!p90Zwi z61C!7J;u6+<7{6TD`jg;iu$?K2BfzysqBpi(H5e%8PUFMSc|^0≺~5Zo{X z>1}iUVoT~qtl*@s9G}BHSMb@APy2}|#`kk+f}(J#0L)g{mbw8+5-!6=f-$yZG)@qv zW(pPfiFn@DtT?_n&7G-cq)AAU3~Ke@?9zlU4rj9Pd54}#=-lo7N9B#;RBuQ%A=Lxw z_jX*xcNBV0%s83CTSCANw2i=mYM_%KEm{j6!mLF!z+a4i^!60b zf=;;nG$!g}JSw@N--;deh0iD8I(jf3j|OL8<+YD^<=2X~kG?s@lcW+Ho=d zi*S{pi&MNK#WSQ6_A5?`r-JcNF<}}6?bzb=}LX~GuzXqxh#@-(d zF0kE_Vs~(Rqd3)VDV{%_u)lLkl^K^rgXiZ|`)xkHIL$pNp4$j;AnU+);qMg|36aW?`^=OJG5Z{pus*(alh9m@s^@+4t zh=Sp7;lVbpJw||%3O5i6iMSh&r+7B|GEq#M&oP+wtJFMK4#a zJX9Jca29yQUgg~H(u!KHeo9l@u;5O;mQXOu{sa0C$y@*ooB$~moCexcTam=Dt{fMG zspViVI}5Wn6vv{wPO(tG`P$wBKq)Dv$z$(9?2DnWZ^;KnGhAd|F9sAw(u1ijNP0?F z9-Y(TkY0e3y)6}9xVB2%o@&8L98^~`TP`HW7Ng<Z z<>((x9U+DQ9FL(T8|XLf&71pODim|&-jL!su-erXzouEbc`C3MpZ{D+LqJ5Af`aFLYrPj7Irdeq4*182+NDH`^q}23oMn)hV7Ei?9b47rk&WV0Q8> zWVhd8a_NSUR@Uefms32+)h_k9ThvFKXI;C4cqT2Ksam;7c~^?(sXC}`;E6`cjD#~5 zvYm<)CS}E<^g`#n5RWVvfp@V_h#+gMNHe5-Yl>%{dRRS@IFI0iwD7ZN;mPa4gDOWO z^I&FauZ7}E(mEOKoV+8&GffRH?^7LRa;kQYa-5VFTODEPJrBmiEjTd9wy0>3YQ$AW z1~#)(CRa0Efcs->m>B(*6i;_GOfb?A7RI)-I;_qR!p<%q7Ai=+NmyI9D{L zhH!ZuP(N0HAB#9C!a;&7`tui82}sHa%wb|ks3OIaQ|(eG#LUG&mVS(@eDkntyQ{GzPPiNW8+v7TgU$2hzY~ z71C4MyF1}UX?@ITYhQ{dr|MkRRHrQ{A2#tklM7#y^9ecuQX+M1ER!N69dvU@T zy`r2vZkk7c6?Be8#QNkC^sNw5L5TR_$#7`N=%FU{mX>Ld@I~0$z`9`f@MB#MUxeXe z!3)2Z1()0*h_b5XW=`{aOsq?(0hB5sZXayTc`syE z3HC8!dnA>cF$!S#?#IF@!xy%!!*dY)REU#x%=|v-a?#56x{5CrC%!AykHpUqe2n;o zwL9MlE$$2W;y$}H#gVx1D@DmBH>LWJ?D(>Bm}+5=1e=keL^u%A0>U>c22x*eOgn|K zQhL|ERf_Wf=G<+^*fN>U8HOh#)B$!-wn}&wSS@gw>rVAjd!RUvOrgibN$p~g8Ap%9 z|I5F~vo|N|Akltz=~&ioIiWyK^EhW#rlJ|f!kRO!P*ucp|I}dEDB)r^Qu}1jD?`7#ACR1 zjDQ^_U=I_phX~jX0=AuiZ6jd23D_*@6Ox3*~=z@f+A*Xrx&o`FOu+Du>POjq};-*@Xv2;V(Qz#c)YS{#_?3D`d&V821Y zew~2*8Ug#q1ngG{*sl<&rI8F zTTgpm>r7YIY-^X#*V)?N(eG>3x;p$boxVPQM~DBm101Wgb{{8TCkfbN1ndN2{aT=} zYc|mBYwglBn0LDR`eE)11X|kzfv%p}+5X_u~ZY?-8)SOTd1Nfc+f;_O}Vxj}ovSfs^Tj ziu2hi{I1%3HbubhhO@EioO+tw|2LKYq@;PN>F=A4HGa5pN5gXcJL=wA`=i>9nlIHn zQE?O={`}9+CGc|z{9h)4$<$div1u z;>oUeym6{zN3cp|2gt4%;94ODp&`T-fVg55na*Nc_qROUSl0r7w(bi@{OE?xwVLdg zL^$S~)mn2uKx{Jq1ubCtB^pR z_>Ex5qwJ_*If%nzKjK9#?O$~3W{ujOD!<>n+S%3^ND%LZw{uFV3-5} zSs5RXUd zVD{jKDRD*9(CJB+;j?vG3#@q8pT`3c%SM1 zt#9tLRCdq)W2f7D+L)tbOUpU@_EvFsmAm3&qeVQk4OIAj>j>*=oYYofiv{N0?1^D` z$t443A;B=S^Z~fn8`k1}xG#qIFkqDA^*X!LR-6=g@?%Tk{MSXlhK@4uAe;z=;Fb_S zDyEBx)EQ#}g2`fa6Oi?Lfz$)|y#dH67_3rJL5|17%@}msXgskX#K~`40<8Y0mKHQ7 zAus`k8~p%Y^&Cv`{P3;GdUoZmqRVhv1n?5r<)Tr56Cv7Z^rA16fScEVxbtCLj6`xC zo+wTrjhjC};MZYxG_1_vooF=Ij= zfcMOthIV#v@62n&?vWYAB4B6bAd7Ya-!mPblO-vh#r?^oa-iD5P$+Uq3vjzbGg=OK z=}s-p&wxRR5HWU54s!GHUF}z-b@D6(W(Hb3^Z37Dn*)D``3(N|QZPIpfd8^U9Ppoo zXb}E)aUKA|3Nn!5x!NO1Wlta}`)jPc>~(pq)oO|Z>h2WJzfS0lXJ8SSH2NNRJ0m|> zKy4$~=#53d(mI&EQLj!N$J^ajUD;%Wo8Iz%mT$h~d@AK&T{}=%x2GnN%1-@|>d()C}*}*!+EOz;d#7CsVFu)BVJC*$BQWnPj zKRf^5SUOu$|GD~m>(1A{rRMWBhpOLOy{YOgRn3)8SNvPWO!=$Iez)|m0rK-dtCqmy zDV_~@r(VtWCMv3Y==3?SSbHnoPGNr(Gp}jQ$DvYot8{(i+fS_3{VAU4cYv*qYBH77$}U|ANLmwic)0f3oJsLK zzWqrsKVMC4#$bb;zs}ezV_?>=F6IHjA6tOFgAH{6~9{iAI?%~aCuB8_@qEzCv%|G% z><}rLJWI=#dlvh8b}@dJQ`1PVRj(w{I~EB*auaYbb!BEgm6GCd@Q%5Y62uzDa4lYMPe1s3b$0dldfMA~b5Eqs zVSRS7wC<$l7MZnOt0A7z*_+0&Ee`}^316sXDxL@gBM=k6t-aUl1=kfV3g_1tR7{LD zua~Euh9a^5o=ACl2O+O-=nNuV+03Uui%M0d9>z*_vKYFgRzli^CI~A)S~X*Kcy({; zAtbWnjpvy%|Nl>l_miVXM+c`yE&6uLU-MP(7L_q7_~@$loFaK2D4e{OU-H~djNM>H!s}n6xV*6S-gU30C^V}&`erZHKVyt;fNZW+g`*{4}vH%8$wPr4#DD(h3eIR$vVd~<2+EhqS$ zo0XRM$pcXc;A;F7M5OuIa}pDlgwi!>h8)_I{JCrG+nrBc*Q4Fd^MSR2AN0+K*0f3a zTnuNF@sUwDePQ)XRS_B^h?P%7v@il&NaxXO7rEKtJ@$nHIL@6CbeS47ke(Jx0ZVaX(O#=A@)YfAA@UA7G7UklH2l}su+^}`bbi&>gevg z{v{R@ zwaO{pJ)#jI;L)nDdS7HOvitvyCBI+N)ZBQb;VTWB>JQZ|*8X+v!J21lZm6ECdQIgI zD@!YGD*MmUzc0NHU@yEsms30g?hY2-R!s+cW@768DY)}sQB>@Da_bYR*7eN&;$2j1 z??~}nwo@$Sgj)ILE{kt1;A;!9!@k&%riJ+qP;-PERd_+l)-d#dY+WM3?6UHm+He9w zan9p@)Qy5&c16Haf_d7cYuRC6W}CUs-KyQ^Qu$^Ttl@(3pf4oOO;Bw%mE;a*`L|UnZxj^JHR=)2j1cFmn^Qb#?y$PS z0iTqdwRCCh0zhfyjQL4_IK{K#j*_oDoy@?}H||KmRH&t-)Y#0lW^&)2O5hdU3H5ct z=rlv%?qIdQ%;{e3W34z|TGd?txG5D!o|xK6Z9P-vC&wx9+L($VuTf@#tHx{Eywo== z)D~ilLw@%tgp_i_;nb3fBCP{D*r~6cR=yRF8>ND_JZ5Euu4utn<@6g`V0E5g;ngWJmQayz8QfZc{E^}nYEOl+LYORzQlV8giNb5eNq45^k+e@gNNa^$ z=`_KsyjPrdbt;6kG2FG9tWU?l>BijDfQA^(%=Vt)hA2uU^5y`*`* z=?hKwHGZ-2Ov7I{%+>#(K3ey$pb7Y|+Sk?md5ypNo7G3Feyi&4%F&7k%fC@RQud{? zFC&Rej+KIViit`DjZ$+=j%?VXDBU;F}GzIsob^_+l(lXhG zXfe(6U++*i1Z71TT6lYr)+f?ZP03$O^E}quSbi5Z!9y5aFeT{h7z#QRL6!%_3)bt> zJdt#-uIylO3S4UA%rT9HxE_pg>m7UTT_Fl=%F;Z2^geatX>=PrjlT3lp@{#2V+PNA ztiU3e=2@Z-u`JPQt&zJzH@d@==8O90*nZu?s326z?ulW@NL+FP1wgd%7Y!0Gc2+jqBxbBG*2Aet=~*&xJc-t#x-_4guO#J zcnRe|NU50faw5%>MQ>JL63}-o-;>1rSz4$WNP~H~x2AbE=(FlR6Vu1xevidpJ`;@3 zfqAdZ)y}m2vd`0M??@^0*eR@IN78k;RNwWaYLiWha3FR<#;?*M&8E4OuEpK{4)rAy z+dz2K+l#e6krr)?m8EnImW<)zRhI`#I1gvhmPbX)ej;5h%7%PwYGpIGM>gHZ7JSYf zqwSHj?3~NjQo2gWT-g`YSPB>ed&R9!6w1DouEespsSicmnViIkIQF6~52Pi-frW+8 z!F^$ckh${aj4iQ)ECdb&iE(VtY>%X+v&cD6^keCA99CP@hZP2r$)A6?;uS-7$b85~ zAyf^NxsWd7L-}dd9%f8Db|D+TO6!=LJ!0unl<;P~lv<`^nl}m+5p1^RJ22)-)hp5^ zSS)6{Q5#IQN!3xd{h74dIM)mqCiNh2eM{baR^y8*4v&j1_0)N9N8lK_N`I}an;!TH}?ri*F<8zH~YYde>Q~l=ZITq=^wx#YK zo;{%S6IESRHI?74{BZ4m)PAitTlF_pAFFy@)gyJMnxBU_{>Lk}^IQPUm&;e0k5}K@ zyuJE{>hD)R$m07~JYVrFkMLi!P%~1qslKf|UVa!d1^kfZ2&n!{eMQ~3>ONTaawAKC zs@j1NH_=PLK1{$qM8KXUU>_x5;{@z!0(QM(SW;sBt`PXXn}B^60sE^2>^lkAcM!0z zAz)ucz`l}zy+Xh)6R=4F_Lm6QUnF4PM8G~nz`l`yeSm;nBw#NQuonr~1OfXr0s9mI z`y>H-nSgyg0s9LCY>0rpK)|L5*f$Wcze2#ijevbC0s9sL_Lm9RHxsZC0ya#*&J(at z5U`IEuuBB&0s;H-darV<>Z^qBW(n8~0h=aZ-wu1!4=ct3e;?ty&l0fjC1Bq}!1@T- zM+n$y0`_GD>^TB9M!-f1*vAOiAOSl^z@8^yX9-x1fDI6^egbxefPIjFJww30j(~kF z0sCqK_7wyyGny~Cwd5@&&5t$(8z&lmwf?8|x7W?pK3987%_G$xt1hd0sPY??M=IV? z{txAc%idE~QTm3`I{?1UfArFH8!Ad#)$cG1U#2>rO4TD~kY&)}?L!W?sVmfuMOZm@ z?F|1-S{{TXZy$jFK~-fe?LoES4rNuPsMk@*3>&hSYkeXuy^HC9z^I}XYf3PxI0~1j zF?MC@pA+8Ukofl)WJZldwT|gFJC!0}DZ35`i^QXG-JRaMmJHjc+tnEYSjw;+;wp27 zo6~y)LuLJAA+bQ@8VW-ZVctbm3sJj0To11AP47mEXZ3z%6)8_P>uBe}*n((k2xHaZ zl%?rDX6qZyccdci0Fm;bUVGEK)|_uBMCXg|DDW*$--CR+bqEZurh=Xp5#_;}3{oCL ze&?We$=>d62q_mF%@ygLNMoORY{MK2*O*j!kEH}y<8`%lB9HCqmmm*<#kS20nxq_-g3 z3H7_L99xKO7!H5|y&6$>bODYK*bpV^Nw*-!bLxvvK1V_?0HGRO-QOz285y5TZ>}#X zEj_K*>Os{`0EYNE)@&~X3#47JgGSB?v4UEcR(p58wr@$RXBvONw(o9i62i8xNagGm zC<2x;WQz!&JocvVLWU2ob{K;A-CMs1Q}>q&F=kyRxhZ`o@*Q7Rj^>+NTZOp9R1CX; zJX5g3SSh3v|N#bGA#j!JM7c^pnprtd)6j3y(hqlpE=3_}qNJ{<3@bzTKV#IP3Ah z?PlYE|1}m0^S@k-#bSOxwn9^S94mN0-D^V3h9KPu-y+K>=DLZMp`=xX)dv~Xrw=0| zLI7|_k8tJVj*+stXmry}=|f28AWPY#cDQsDl?!5MA3#!=l$0^ygXmFIb?Gr7DrIBi z>8Uvgb!J-EyNb#kBV}bs>elqAkd(5`x}zkSq@*w@r?8nl4Fy%39zkmR)ID*|T20wQL&Xc-9V4Y>ok()hg0}Q}Mc*1imRr=%HZob|ewVVb3dx1d z<@6wu*`+I64l{@IT*3B{XMa|h6cff$`aUdvhk6@6&Q zR4VXZVu6DRa8Zal7IpEXLV@$?0bbw}s_TjCBrSfF76>DmZ?qmy?-%WM&V6_1SBQI`YXQ` zYfg6~BZ9HESdGPw$`=aFfO^#~7FURr%|IZ$$kMNN<5?w^?m|Ws6MwGX9d|?&6D-C9 z(vou%v0jz##A5fTH;rRYX%~Uxp_GDc0mjXMC*6Te&Zx(C;DyCt{GOVfpIXrT5XRdN z7XBz>iIiiyHq5QVpVjy0U1nErcA>@Gyc zTtkCrXHI-sT7$I=qhnkj82?3ob9-%AhfLO_d2+2INo5~OS#_r(iKySXToeJnkYsTw zEz*0byJ^G5TxdSq9VaL26KN%ll~I2zeHQmG-O2N+`L8 zEU`F(A^4vQ=ujSuY4ad&=R{EeSe)5H`V?weHY=;m_~`?J$=c;({wyui!!m-g-O-Np z6bge7l3HXAXJQarir9FV=Zx3Fehiair=#$Kl&Cqm)Td7(QNk6Axu4b86`VUacT90Q zH>XdCPNaN$59+qa>2Pp%spuX;4lGWrGJPD05%Nr00wftF+Z)gYP@G6(dJ>5YsNd4% zmYc~atVo7Uj-8AIRGiR`^f4qv=<577HZQSPvFqD{FBB(wb9#c>w`>|kLtD?M0f+Rg zib^}MD6zV_Qza9n&y*Ox_lAFceH-(*Z{E(L0XTjC>+a$H{mf6l`uo+NVUYl;@2$SU z@b@>O090Pd`Sx@F|MDM~f4O|c>e+9^9Vq=o=`%c<0FNb*i#))*{#gWp=4YEPHy<}5 z6R4^m&=(@u*XQfe`n&zDeOh;4Ygb!aUu*v?{4LPc-rm{m^LO^l`fubu+-g|v!>xwp zKHO^9w-fksA8xhpavyFrEcYK#!*YLbH7xh{R>N|CZ#Aq=klD)#SniLk#)11It6{l6 zvKp5ABdcM#@247;`+llnx$mbMmiwHmVY$z_8kYNR>N|CWHl`JWmm&;Uv@PtkA0$s<-U|^Snf-yhULDLYFO?| zsfOjglxkS+OR0wCzLaWM?n|kL<-WjbSndm~h8-u&)rSe#Lj>#?0n7b4)#~;d!gsmv zr`mV9|FjyG`%kN3x&O2p*4uo%@fm%f`C0r zz#buB?!OC`{@!X>9s@=V`!Jy`cziLn z@ACL!YFO?guZHD5@@iNf!$=K#nji-ri%jjiQ-trHBw$a#x%9(|b03eJqsEuV%~8Yh zxH)Rrx3K&FTS`u{`2Wu}ezW154R_Z2>)ufN@tSv4U#a@rs!NqWuAHp+WW|>9*Oz^} z>_qANOE&_z;2-@!nkQB3)|D@An5Psol>_x7S31Tf9bWWq2&r;ontdw~*N#QPql>{9 zGxcDaO}IH*(4z4rh#LvXG+92+fHnyCfJ?C;SayZ9DGfuFg8HAQKO0nc)BsHt|e^~Xt z0xsEoiBMczva(RGhY~@D@svA8O6rNR!O^y^(c!k%&bIck*7o+1&eox^uA$bpw&Av} zvEKgCv7uoeNB)L1PZD-O-9DUK1whA}kA#PP3%;3P2(GuCcNj91lyvTDWmB3b1RK?N z5QK;pOpKFxsXpbO)8>5+n;k1JCsKi1Q<^6QBNz=@OJuGuMQK?;3XFE7c|I_TLOOKG zw-ke!;TV`VMT2l7HI}dpLCVyaO)jT-POzQo)}~zbEcD=ZMz%-N zvSA+bo!0_vXok`YcrA98^21+9NvaA!R=|Do@<=ciP=nGl)!BW z%p8w)8qlcQv}6#VggFeiZNi{OYE4yi&RB za*phV#hOOx#p1+!(?KMz>BF?v$dzA6a&8Tv_GWSFm(z1dec!Tjz5$+bo-buCDP;2= zOG&Khl*!W<4+X>41azE>XE+g!!r4YxY*;5wJ(xa^_1}{O7i~3nQDdbO60o<9@y7HQz);w1IzUr-2PgMR}<#ZrAw_3(`2+B=I(m(~}HN<{C?@bpq^IO|yn*vFNVxpTg>zFD05F}fnRLoT{~GJq*N-HX$+4b zO&OjBi+)zc)!uRpwYQKs&^kd-CGCY@7w|YWrFzRQ`dP)PY85U17 zpQsz6C|Og{B$sGuhNs^m#8)*~8an}dFLXYYlH^+#91+_xJP+4C9n|KuJ<608y$Fe1 zoogexFE0LRZsxmwi*e;5Wb0%^AJSc}lzKaoufjwq|GM`DyH|KZ$B~&g{WXf?`Ih0g( zffp*Q2YvG)Lz^CxWMwJ{mGWHERn&~o<@G{~CqS_nPXvMyI7x6#oCvXTSEdZ*a6~=H z=Tu^0Aqq}v;0ZrDJHqZ5;2)r!b4^`b1T2+>xoy5V!&94e>-$tE3RWg)IuIgxmT<{?)to7Q1h`Z9{?jNYv(Caza!Ni-*X5LOMskV3NO zF}Su&L^X4W+6AWcid1yQm`IkTpFpy`%gO;sch#~qLYzWXvtM& z1l+An#{K_eCCz)99&8+F*i!dTb?0ioSi7_4O*NI(m#e;0HB$MJ%GQeaR@`2mEc-#( zTfZKZ_0DsO%Ka{tFx;^$7!eq&GCVRiA&`YAfo+cR zcX5t~QVu+phJ{HY!$V_lQFrL%9WI|k?)M_avjyu?hKIT)HJJb`xSZU@WZFqXwdC5>xrnwFAO&K0* zdQd$n=yaa8Qk3toRFLBoc-3ZjROw#z6ynp?9MCdK8f?Ku0%-#xWn)a%(0zFL=zZ!5 zLEx}68$6$YK&;^HpWlD;9!p7JrLg;yXEx)Ku}{BIb$y$jj0VpK!OF;R%(C~JyvI@& zxln9+Lxu-#?pHUlG0U-4Tf)VLkrK*@WmATSX(q>}G-Lv)bwLBNl;22vc5{JAS-~zn z5V;g<=@sE!H)VK8=3c#1waM&-PDH}N3z}mZa)lJ*v{ziz95A?5W_U>CUUkiay&fF>lr)(>6HmHRHBZ+7*e4a(D z;-TDNwzLaQhLX}WXYHoUEl8Aj16J$n~>FsNJ7 zlew7-X&J7u)O3y~HKs`b5ecngj5n-I>vfeY<`C+3ZB-My%3$87EoU*ti_!d9+Say{x`%z?DEJQy z&VauF_!D^Ii`+wCTZRW>KB2CVHiD9XB~Jj>l9O5>7=kziv}MGflC2!UiBu(_(obEq6CdPr+hW26nSO)8z~g;Jk|B^N#&S@$f*k_@^=l zu=YFD&uT^~`Fm>X6IB9wRpwq~(5ik+Gs`-v~GCYa&q^=x$+fp8HYq%{&-$|}6iaXLf6opF(is=L@5Al*wLyeT%Gd$O=!@O4)vmM7OMy>gr0dZ zI8fx}8J+;UUH!Bntk#*EwAhu{`Q|^DvNFy*`pyhba(!A|-)|9Ueu-db!d(08#8loW zPPH_{^IPwtYTeyimp7^LOj^8sBlGk4e`fr@e;~wp_}>KV-xILkBVhjr0sA}w`zHkK zHwf6T6R=++VE>qa{VDWe?-83fq?x(0`~I+?B@vB=Lp!(60m#x3D^%1u1d8OQI#sk2U>s(^TU- z8ygzp^{=nLsqR&^e_GpF^Xls7svD}_Q2Ec54^})|(NwOLy{GiO0KbMm$@UD-t~0f) ztd=!wu0^sdZlB6D9aEYw>YvNMs8e`Bsvvp7@$y(SGS5rgzos@d7IzIti5@?iF7IWg zeNPUccI}A_PyTZ-`Izc`ljEZ~q1km=QkYag*H;Qy{ecY6JT$0BRIAU`VTKjqN$ors zazvL{%58i7|M1v#b`iTmq(mL)(M4poH^Y+}omIC2I-|{)UK`UqztmCf zywAThdJ%5$;L>RV0)U3>RMp;*a?g2n+??ULjfT~4#$3vtI&sv+b+rIc%FI-d-&o!-MpNo> zCXD$-+^57ukdQ%Gm4b1wA<4TPS9n2AmB)LsejItf6#9<;Kg-3{Q}BL|68(6&D^+Fhsf(iC!2qgkK;;r8#9f!BU1I#+LXdihFbBC{B_` z)U(e*SA+zVu}IX~c7riPjt=P-21}`0JcL>^N08#f>a!*64`RW97Bx5lJ2xJ7s){d3 zDVwuWZRUQl@Z7ArLMqU6g-FTF$ATf&z!x*)XbrPV*&4=jA9yqT!cuh*8d-Lzz5m&JbE z(_%Gm${fOK5g$?&x|1LL+ZgMrbS40vyFLpa>(zPx5Fq1m69_X`N_;MlG~%#s!lW*!)rWz z+!uwM%gzm>dj!?UfrU-c)gC`8&$KTGn3r=8}I0pza`=ou4)OWqc)-|Ik?WRAu9H2ZkYo6K zay%&PYRGjJkQ_cEkVCwa+<1nEeLawDRvq2PquK(Tp`?Ui9yWU{ z(@(_);1_f78fRSo1pXB~A3hokUzpJ1KCmhEu|E1#Muc!xH=4&9z`<6`753HM@leX# zoGPQ4S=S z?l^)k!`6c(Fp-k5Jy+myQ^t=x2)iWYVQdI_n4FlDk1MV?uVhJP26?qE!{VXpLOTQY z(g9iDfQS&*r&12ys5jh#f2P6no%_9=v!1fc8uM?ah4VL{I%m6gI{;9fr- z25-Eep#d{Hq%7r~(klw0x1R6B@(d$@&EX>SPs}QK$dAB7iW2f8K&0kGC@|rRUKobE zH(xLeH_f@~4MGw_n49J?th4?9>1DIr5$ zuiud2fjkL8{VZj{oSh33CuL+qNh#$*q8-feB$$VEWqS>=$F;SoWN%&&DrIMMzm^v0 zs^j4pZ1+OgCPyRO1<~F?wG2;#c`!Mux&~Oeo2nxg+tn^tDNIV8Z39@=DzK{<3j3CP zUN2l}K-_8g3nL$LnqLek>>Gducd+$jcw)^1x^he?YYhwojl%V`qNLSSFf3uK(v|HQ zo@4XGtCYRZMVB!amfW;axQi9QOKXwqXKsHJMDoKp-#}RAFQZMltIFq}6L1;i7axny#|D98qURs<?Y-1ngY|?41Pc9R%#{1ng}D>?Q*CRs!}G0`_JC_9g;$BLTaC zfW47`y@7yjCSaQg*hT`jfq<|O$P4*|QIfZavF-b29dRL9= z5wJfZVE>hX{eKDAe<5K1nSlKv0sBt`><E_3W!5z3oVtx55VMwaOsB6}YjJ;iLn;2P4FiN}-A6ykU@ zP2;jJ%ahZ$zEb%TK^Q4YlzPsm(n=Y6+m;rg_I1_yif3-dl3>FLc9ESOhA|@C2MF(9 ziz=9@xXlj>F@W78++Uf$=B}q&T1@9NQH}91DZ)^I z+a$!y5{G^MIqT&HYr;Y$pdLIQ;QBMFlN+-QsKY&|o-|K<{%Fv@h*pq=TRR^nZFVG7 zm90lYo$5hGp(B6*c`_(4Fk_ja>?6$uASGd%x-DhvkjPH;w4ZR}&n+VJ2fOW&v~bgA zWksYo1iS9}6Q6*ZCq~oEKAmG>?m@#`T&S^GkQdGans(`B0jKLi9!Sd@Q>nmmy2-?{QVd0?FZ>%c1$i_>1$uIAk|u%Xxe2n^oHz3Noj; z0*jp#CT(wX$xGgnEkjn?a;Yk-TxNCASzv5|qkCw{QCB@_2QW{SeQLEWx0JNB(mu1*0Y4G;BJwIz8|V45OR8JIiyj z?^>Qvrdx=r?U@2iapGpLS*ACM1(pS2%EbB``-<8B4R;Nz1^`7NQgZN#%&)`(@n@Hnjj3Rvl}B)qP*i(IO4X2NOAD+a z_A`w|`qS6Vj8q@X@@)4pU3n|d&k9pZ^D_~!ie}#bObx{(IT#28S&#r<2-oZJS(r6q zK}bMj-%G9H15$yS+d=)M*}HJExu7c_;y97RzGz_8wNQRpp$5a*JFy1+$!gX4N9_NZ z8c-S?!W|>!lk1|aNwFdGVjLNm0Vs7C;yeyQlP|@B+~ebh>>XGQg2xajoZut?4y-(3 ztGP+D_Zt~XT9sVqsL$TcMXR1gYwAJ}4rmKYr^Eg^Ul@GTQ51GY?ieW_Lt~b#%HD=_ z2A3;UTN=)B=;~mc+4&{S4+takxdO%x*$S z^y;u#Qj2#n3X#bI0WDxtn%mpO6(X%a5}D23ibO7``=YYLG~AY0W5KzE9gr*}#FwSy z4QaNt@Y&3eGTWOnr6Q^X3=poAf$S|<(-T*e{hP#$ogY&{R=KDK*h0cksEQy^~|8GJeYrvXxc(P5%EA;Zf+hf&2Ge!_o)weQ8FkQ7MEPY_2xa6 zvM_3|cVssp37>j2)M-|XvrSMPD0BhPUAR+_T{`OTNoh~c&a&?GRQ5(BO^Bv|g^z?n zeDnrfnB^Wyi_f)PL-qz_utPmEtHFRxLhi-0C(^P-HoXVuLsRB3h>?_Y%}ti z(3Nj`J-nb_Lzm`Dtl&B3{J@Uc?eU zp5;l8wdI7Wgjr`WyeMhCm-6O|Sf)2-d9LQ+W#xcs*5eq?1+w!-0U%9c*KtVW@^K)` zvq2xyVg6M+d7z><0I4qWdRbmXtb$OfVB8eS11?Hxtia7#o*DX(ewT6uU`fMctU?6} zL8TQyV)tixe&~nwm?|;YJHeG{9J$HXp*$HYz9c1^Q;cBW8^~K8ur`OYJc;yK^&uak1mkN{Jn7s#g*o63LpaM4I;h&1|IXw|)#)tO3 zwHzmYhvt6Z7&| zb_a^N`;|AUb_yXwCXK>UwjmUR3~E%Peug^EDi&+onUyf&Wr&BC-wS<8uA;YmVA_Hb zpU=DSvn0|m${T{vQjpclw*c12mai3PRLe)E;BpI+|M)LVLL5bquFwHnzJphcf{xKY zaf&>Y-Ht8Us;-F@pDEmm=F@9$K^#Svx`^^wKe1MYo&PtK{6R_6I~$MH|3}?l)_$Yr zxth`H2dh3+b$8|KE52WGr2N^kAC&c#J`SK4k~n^G7g^~2Lmvc9lXc~i$&?$(Nd1)rsuBg zeMs?$zDsp|%cp2e?E&_vK*zwAuz^(w9=sNUMrl(CKTGCSc=Wk|ixX_jz7z=(LTg$j z2zTs$jh~z4lCyw{6S^~d011t+u1Uvy!O&z_jF*!z%@*i$`B*8v+^D!EdoS`ER=>cq z3XI(kFNt~b!I;C#r2tTYSui_*%vzHK!?N7`nD6morNf>|IVgm_d>|N0_(CmH@kAgP z@p?Pj+Izj;QP6KhAy#q>@|vE~eDf{L@dpBKf~!?L=x;F$D2$)S7GclE!)Ra5?#H_B zQqQTxtTGlBjBna|tNod@o@Osd)@A#7FIBfyuu7A4OxO<_CLM53X6I8FE9IvWgLEw# z!s}%fV1^NB+>)%x_MtSUlFFvF)*ABWHd@9IN`W<6@`6+@*QtN9^*(ufwijj5xvU(6 z-ztlu3#9<8Yh6W3QA>zhub1~5WBgv^sidvUEoj>o&J*`V&l^4EShfeH<6lMq>2xMnsl0F-ibS+J1j!R&)Lu^muX{p1zzx;K%bC=83be_|CL%AUb0 z>`NY8)o98;;Mm5*x}R{&T@~LuLH1;?*Eb*N>B8ETW*^|SQ#S$}pJ(aASS4IrChxJd zNlbmp?(AtK(W{?P6|uwEo!g$;$CN8XN=8XZh$7pVJtg|Ia-3%e6;u0Nkg$o8a)xLG z=(LQqTC!6}t5ZFKv2`CU&W3hIE&wT+iC{Q5p8!u|KX?ylVK53uJ%}gDv>{p?IaXy) z3XU698`??%X2_XHtbnpi0HhpqYvj)C31o6w{i@o^1gvbC{VQ7`$HNw#w_JR(H>6z6 z(Xk1TY=Fw2-Y7{e4} z1+)>aa0QkX*<+%^HLr>#1mKAz97$cQ!et980HjRXJK99YpAbA&)$yki^YgxFA=Ly2 zNO|Pi?P&HW?@h^7G69va27|k>QW!PI229FIY0mY8e6hG6bmTta*c4-0Y4&ZD?5^w) ztj`%;d9!P6K<-G-@2-q}FUC%ij}+-E(t4Uhc}wd;^8p^by8b%9HO6_{77lodeYZ=Lp#I1nevUs}ZmP0@hE!&JeIZ0`?ICcA9{F83B8afb|lv z4->Et5wK?o*ar#NGX(4d1ng-7_7nj-MZlgUU{4UR#|hX;0`?dIJ3+u6C18&bu=f+N zq&UWe@2*$O`8a_?jDU?2u;T>mVFLCL0Xs&B|Nk`MyH63YPZF^E3D_4~j;QsDF@BjK zvnL4H#|hXa0(Oyry+puXBw!N+>?i>{Lck6autNmwAOU+H0eg^ueJKHZfPlT1fCVcf z<@o>0gzqK^Se<}{L(N zdn|#mO|8uADo+=Hl*n3Gy1Cs`dOQ%PQ~V!yZU*zs@sUxlm;Wml5Yu7?=Jg_V@gJKV z*zH-KoU(hlU-dd*A_lgziz1M*>xHKq;`&HxBIu7sVv*Un#7@q_+#(+j{QRJ(kVn)A z6~8xRL#WMbUsg72pNO%9xM)8sk&W~D3qvx@?3XdKipBWN+GF&k>;;s`gt~R}hz99_ zqguccraBspMA3{s-=wA(S}L!|%%ff}x|VvqVGV9b;6`m>0Yc(>;m_c3$8h`L&|vHE z@K{f4SJy~aYhQauZ)kI^Z?ZUAMf|LePJ_+@x*G6H*<&*0^s})f03u`K&w$7g6 zwxRB!*7mNx_SUY>j?UJ;k&d?3zOnAXk>R0^&XN8OLqeOfb10!mQrXE}T|%QQ!e#jU zYQ-a7UsKtP_73*8kM(x8wvF|Tv~~^k548?;_l&mojrO(;wYLoocaL-$ZgH2h=TSB% zl0MbZ#oX0qLy=2ps%I{K#=T|!|M4XR7%up4tReyfcz$ss|deujhV==0P{`O za1*>|hQP!Y`7)plX-HpFU}8y`68#(XCG2r}x-0m>1 z3>>~2voFI69Mrd{R)DoZ-pBHnGbv0;ln-Y{i=F>(D(NU`ep%DknvOMopy8(tzWQ&} z{Y&j1)$Xi$b@idj?^XP$qM__ZWlN>+FZmPzOZ1wnJk?6KdWy3#-vtal3Hy?SHW@~< zHoM^65K{U%8<4rHJi$tDa!OUGSdw+R&Y#v@AyPK1?|ZH-Yes?P0J&fXI&zh#Oxcs% zL8_~4@xm|X9tMiXXz?W076Iy$D0MstesjS+aqaBOvTW~EYH}nL)|S9 zOK?5RTc1daUegKE+=NOL9LUIehCcz`zQH*7j(|h2haK?YeBeQp?NqO2pTa3>hx(}= zKLW<{l0hV%ynw`lLn)GdQdBgiI+Rd(=Gy+&C)d5ALZ`=_7|ed*!Jn;dn|wHX8LNEm zin4*L`8mjSYCl@Vn8yy-Cv%4=`%JF-)^!(^NsJ{+;%7FGd02!^w$~fy4)35g>gur$ zA2&Rx2tfo!q~GL$>=P*76U%D{;5vMh{J4V{~_(F`|^?Db0 zj5C}u?#?bDy-`9?Jp7Dxr;%H1?Jdhmx+7JnGKR?=*+pb{Ks~z*FV{Q>NCvbFC1tjz zy$$jr!Pv}oB+kYIKYP71EK(f53K2s$50|T)F;sPL_7VzeKB*jp+RRlf?yL?$$gw%$ zI|5-dqCChy{NU<2NPSx>*wICQC;@iC{Nha9RdC0$*a2g6qt|CIijj1y>Qp4Yh{6K> zgAZIzLz*KTiaSQi)ueMvHX-P=66vtusnP?3pyR+u=`f#~!7v0B;-ADZy*C?2W@mNf zYcHWY2GeZ#4mddlAR=sVHmE^vq4@J}t^XuggA$6nfRu z=o|)Hd(-DC9B^~Ga)n6A;keG(3Rtlh$^$~g|We6+9msnApuDl@%*nClTv^K0%=6TDY*Bgk$VRPyA#@OoB;c54DwRJ*(CC3uSwwt)V z#d)k2+X{!9(|sm=%f`#LA=MLCd1{v<$+N0M(fp`QCWbGPV^%8y{+UPxXY~zNdFB{` zU#NRsPK{022b~lqtt>VcvbuDYXO)>so?fHoI0>;&Rrs0h$6k;!U7ya1Ro`)y=du}B zp92k*Jxp_$Axap*h*j5K>%v%hg%erfBANeRm?+OPnz2J;puC5R%H)977z1mz`Qd)X? zi?V6N>G*6PKN#7|&;4GsQ2o}cO}NYwl73E`<3bz}@B}^Ni=iQgol0S>lpZ$DORhE| zwLu;1=hW^k+>6WK1junxN@k^n{zI%V$n@r`4ajs@{eps@JD zg<#VQEnKZd`A#O4bEcwB+L&m0#$xQ5X5Yg(40>mc zt&UvqaqdRM4Ajj=V)DkTHCX2@HUC=k zg_?KPEYyFe{v-9TuJ_ir)mPMgt9g6VkDI>Sw9*uBI^1+;;}093YkXT{sP3NH|ET?1 zZMJ5lW>fX|t3Oly=IXiXd#i7#`kShcRlTn2k*cn$n#yliez@{V<%5-bD@!V#uXwiN za>enA?d3l%|8n_CdA$5^`JH7yEPJl(ZDpad`^s)A{a)!ON}s7+tUX%W(s*CvO%2~` z_(a1q4S|NfhK9Ni*1f#$RP*!A&o*CfK3*Cq?JI2n!is+gz7YR|fPJ2T{SyNA8wBj9 z3D{2&u%9GgKS98LoPhm30`_+a*pCsgzeB+OHUaxl0`?;W>~9gUze&LU1_AqF0`}Jl z*k2=HKSaQOkbwOF0sDRe_I(8GvjpsW3E1}#uvZD#ECHJ#VABL_ihx}qVBbx^zKekU zRRZ>%1nfHq*tZj~ze2#ijesTjF%rJ}GyzNTIsXH~cYmLN{R{#7Rs!}d1ne&pux}<{ zze2!%nSlKg0sCqK_Qe(>YQ21nzeteT9}%!$AYlKHfc-oH`#A#kIRf^x1ne&nu)j#a zzKMW+hJbw|0s965_Vonp>j>CiAYflhz`lln{W<~rH3IgJ3D~c)`~O=?5+%*|H@&Cv ziw$3GsI3pzeYdW!cDbg!`f}CZRoz$l8Qkaw# z_~3imJ8*>Dbd@I@9#p3VUirR6C|;D899NJS&!EwAm1pQ3Cs_G%UcxjphTfZx!p%QV zUu$nj!A*jd@*CK_d!J|bzTLY~cJ)`cW0Ur)8@P>z*|;?%14e-3Fljla6nD)3$KIR3 z$8}ZrUo4CxOR}xl@+Lb@$OL6H^CS-*%_y_TQsNNaC{6jb z^w-eR75W3(&X%%tp)GCMT4?D4bW14|3bfD`T1qKh>H0tS-22|V?arJl%ZBie`H(pC zzVF@dJ$FC%EK*LEd1N=zQJ6<;MNKZwX<-%>UzmDSqUMROOmkCqmlz0lQ?KD|G=;fD zC3aR=Wl}ZSok*&Oey3$4Rf!EguSg?vE!&ASLeG%xUc@D*m{j@2D$l9}K9=P!TNPfE z5-(l5im!nO>lL<2dS16WFqqix3COo&Ub&iAw#H{lsm;LI8HO@c&xTGj5AAR|q%mt^ zupwgCxG5`QDu#C27ZSlzP8s&05fj~GyNyOz^wNIl0_v*~y&0?r#?l6`(^!ahsR%3xAb%m|XL zRuIAGfLN>!FT-+!(rwD#jYJi!qb3(4qER6?s1aG-PSO)1C1^_R_Uv6qribq3VsS4M zLbEe*KbO)dE2pvSok;DReudf#MgKpW(3W_}f_Q>ka+wxEcB+-}QtD+qWKjSjM#4(= z4y?pT=5cBzgyjt%#F*p2ZE59=k&)z@{z2n5R1SHxln;;hpZ3WhFYf&%@a>~^gC z!3^2f+*Yp&)n<=xc#WYSv5B%vRL(q7b!N9=-6rV~^(WBQdOR9oSMPk%F;6V^Zdnc~ ztudJPir7+M$Bh$BZ}xWNII5G)2E>-kaYk|M%p@QwGxP4>815{x*(gkr#=))YRAi1t zcw(&i`Ty;{j$r%8+CB~W|L$z5X};X_xu(;NzufT6hDYk(Q-53Cx!SkX-d^+8>U`A) ztM2o?{d$l8O7H7+S)Q_eh@OheY-eVSVdO@zx49=oDpG9UOOwgQM%5<4AdKgw;_h%Tu=xWERQ7 z7iUFlt?Zp()&ueFRqu3`CxqXr*HEhs)fJXx_R5ximsXLxr(kEV${xmk)u)uwn=MVC zb1}NP!{!bcH~~^BNTMfeWOpa~urNI!tZMV@G{Dt#Gc3rc+bXLJP)dre>+C&nNIe=0 zt_ES1H$8e-DM)%O%M-uP=n-m@&59|$3@3YA5?;8zO5Bm<8QqW2wS%*;jKX+25l^O$ ztt7+};|^9Mg-HoVBXgJGqw_0?u4EiVygSSDy-(6TN-V{mje|mPl|s;kti*8%KW)&w zBg+%9PwM2rp@JqX*i4R-Fx940Om`!dqbE{IGq|+GM2SK?l;x?>HJxn7S&rSMNa}Jt z4V2+T%yQW}J1lk%PqxlCN$fXgdFpb7XiAnYKoG23{!(6+X|pxU^M8-hm2@UhS)M_AKqq@f+WElQZa%W&XiOU!j*v2e(Tm;f_H3Wn!SAL{i$aYu z9fa^Q{9G^xtE#>U@5^3 zI7U|9VkK;sSz&G2yvNEkXM1>)tu;}b%&V$&p%}<-CyAIx&;!|S(SfJ0R~qiwTqZY$ zluAP=0_-hl@{MN?BHzA@rpVVAW73{%1xVT5l-?VL>A>u;`lf6buQGkX6@oWvByAZh zKw4$dAa+uBX8lNNO5aOu2X>19u_=XC6V>Tluf_(5Lpx9&E2U~oe(e0e)%P)9$KxHo z_E)z3Lfb76|L<2@I-0{x`KH=Nt>HHs+UhUV4cC5e%^%e~SoOaE{kHv+Ihf@+$@|vG zU49mCIeDNTepq+N*8?CGs-e~I>|`p@V1fml6yb?1w+*7jFdE6yDmLkbxHF281#evT z8xU=YrIC(>@Krg^wl-Nz3CuUxvYeU8@vU&I&T1+%K=6;J81#PUou7P~S@Cqg_1 zt>v+3FKc+F8Mv{JLPR}{X^j`>qM*+)UtnTg&GO9c3c(Ghl0u+tyKmob*&a#dW{hZk zAj=c6hx9RWlS0yq@yp;%CdA2Zz}$V(q`~8af971~>O~=AfEi9DNNs#)IW7;W?mC|F2E_`hPOmjMM zX1TtYBSw-Dmr5Dx03PJFN^~u;THs!PAj`AJEA&9IgP*|>cwSqEw72ot6#Q>Ko>)XP zs9@C74n^TbsnpD&)05>n{aKzY{$aYw zgPSJPuZTS?QKnoc<9w$w-5pt;RsK5W0=8ic##YHh?dZxB8?rpT{D4jlq%~r9oK6zl#~+NtFiO{?Y-oB&l$J?4( z<1J^K-`eyyO_v-0yy0&fF4TX%{-L_xuJhM^e{F5eT=f%G%K-nj{-fWM<$3>3((}^H zq?eWwkaPv~Jp6PGN4iUwHHd{8VmF%hzF7e*6}V}ao$+OP#=WO9WRt(KC}cR&!dww# zUK4=9@yzPt9K>}O=73ghQ9K%U<`G-(SEP07S_;pNc6Ke|Kf}=|{2eR=;Gb6`vBfa_ zn<*sWUrUJy{Bvay0Hd9FN(g6pUcGpRJdH`&UuWfIughyqt0~s=o-EImr_dW&G}1Fh z--D>F$Pe@auy17MQTEfzqIO=;Lq+CPXcdUo*0EUGwfRBcGcCgpo{ai{z zKsznp!X6UO^88_=bW<_=Adn0)2}sHh+jn%9CHrMmr($r|fvQCqhoDY$Y-5sqj)7;F zg3&9JVC~8QXSIZB!^d9~^~NC~#%n{CrzBI@DT_`f1|k)d4b{^0XY2jxvj2y2A#`t761faikG%BVQs`!$$PDVRt z?#%KuUt?2Z7 z`g=ojeZk>SZ*OQ1kH8==Ve)~_jG|6T$6RR!$dDPaFr0s9pN?3Wd= zf1`l?Ys7*Yd$@l-JP`EvYg&)LzkhhdKN1dy{XOAu|KR-m$k2SxNIQ?~O2hKFu2)C2 z{=vSX@QA;AFbwPb++f&0Jls9v?;jl2=ED7bb3G$N?K}?c)sg;ipVl`#=kJ>z==b;c z_V)YdM&JdluO}4h3HAm12720g9NMb`19L+|q5dBK$j|`r?duBx-+_7mfHvGSFyAxK zJ22SWF5<;f>UN9hlO!x37qtHSR|;*x=N;O2zo_tCm3i`W_+8pu{pSkU&nRI3jAJSD z!@YMaVDD1k@Og#r-mZY%p@6+dfiLe5tCVqZZ@t2IRr)VqV`=^O3&??nPs;rxQA4U7FSm#OmNgfZ9Hb3xqkgJ3Jq3*%H5Uc@OFU-}0 zp<#cpcVG@y8EtO3Z?1n}J`}vSS@cN?wvl5=^TRgrUCMcruZ6VpP^ZFodEcSQ>p0y0$@XWP_cZ-+-F)qz*EZG+RWCqP{u91mfrsutPiJ{HY0SnEtf$CEWO(pY zXWO4il@^e*VYsVja0E3jEm@v%8RK9nQ80Ab<)}C?EK zi}x0Ny>?ZP5R4rnCF9ce@@zj$T-UNZf3aV$Q>1q~9)>_i;3ekC%zP>(#e-v<%JS^Q zqZ#nAQxXqEtw^NOOA?=QAs{D6%0?ohK;U>hz7W*{f$__rhl78Et17q&qvdfRFgOAi zDSiDTLtQ=Hyt${dJc;nW%znlC90hMi2utB9P4P^fy=kDWkj}}>fP%y6T$X1I_GjSU zLaBjJ*($A)`Se>+sk$uBJ>19KU)3vBZi2vi34pX}OvFsOua9JTs^LA)o%HPs)>GCf zW|9CtCP{Fo7WW)Nt1j{gB_XlUT2?3Z*b8JySrr5_+n5Tr{F zTYibfuY#S)p`M}co&)fY-V!zjPU2y>$=_f4NlPT+kTG#7o=6>9f+4aba!InX@H71- zY#1+R4qZ4uHak{N&i#vzEX1%ywH}n@cZP_=Pq2??bFab{${B z&4WTe7>z8%4h=v&Nz8fASj55Pb}{mVW+5FDoM{Jn^4kxhfSmQNEk3*PJpjXAOKPHg3&E1)ka> zvvnEkt7#;gWCoc=h1A;2_!cu+wSEQrr4YgXL#HqH40f|HpPikLVmZ5nHC5@Fg^eij z%yx$ezwZ(~h*R7pY!F}`XU}*50C#VKi_u7o{jA#gcHzY}Peg4Y#eZE1X=q#y4`S(P z6s8wZz_qd1>iF4Z2#ixAIlodRT?}8*ExAvhN?MvO|W_JrK#&hG<6YM?50dy$Ynj#7O@iMim5nh;pfGaHJyFj zn6hAcS>Kdp{a!e`gx?#5&^Ez(ik4~$EWa_pv^YtKwSn)_!)yRvSY6WCWDkZ7a5o>u zP4kg#9B=*onHFa3Ls4ls@Ai2K%>KUz^}vR$k?dDI|Gn*o<)-G?0gEA4(|W|gs)?@{qyao+TPpxJ1zg%vZ?t^ zjXwps{et!HsQXM^YwgvVKdyO2^-ov*SJh_U6K-X|`hL;3=6Jeo%r{KioO9DI(Kep1H11z7VezZ0$?c(8Bv2#mMGh5G|jCv-PNs(msT1#fyi@9j;Hs=aPc&rRDNyna=+mKRjD6Y;NPvm`=#gkq?Ew`zs7kP$~(lM1b!e(&E zbP?Z_<2k*Luw)4|j(kj;pTtcoN`+6M%-D?0iBg!9r8)3V=6EjeRsE70DRvZM=N{(s znLN6B2_h+kf{F0hJRGb{)eJkngDZz@vQqs<m&b2 zT4mCGIi9#WsFPO{-i1r0%Vp-(^(pUFrrnU^$*$3Ko+j&y zN$`|2y9b>7T~^j!h>BExa#N0HobLIss;(9M#bCTKmnnzOjZhm~o=a(rx>Ux>F*VSJ z8vemUWNg3(xxNQ=M4?1H8J|xvMN8LBDnjg((Pv|$tK{=lz2%7<&%eD_Z=lXwHsytV zP}m+xTNzIexOxV1HMl7{uB_P?UCmsfPRGy3nKyRvMSQ1Jbv~!d01>CdC#`gu(TXfxwzF?Z9SR4JJ;9_(`o0-qgLxI55 z#3UH}VD-$6j`dI_yps(lW$D~{{USF9L6?2;0FLOGjG82?P}p$~HDFyO<{K&`vCFZP zY56N|6P(3YdM>A@e4rLB;VhAzf2EDIk%ibB$vp-)qAYO@WCkSSDg7|b?#-#B?U;YV z#acO8@Qtsv5y|4_?x>(MEya_NRv9wL-1s_Uo(6oK^Lp!f$xQ%YM&-T1PZMhk3HA)P1)_$EyVVlohulEJ{pt#%X6 z0Bmj-Tdj4@Mc&aV6oOZ*@1FbH`>p1d_xPr(p7T{b*Z#KllrsuI%j;VL%;%o@>@$yj zBOZX=`yVU?zS{7ihBq}_Zg@q*E%jfje=m6QKUUvg-^jf7YfjWXQ}+<_^RIn@#{y`a z=y;*}M{DmjeEmBL9oMS2)ZA75_3Dpwob9-`>V4JG>ibzlfvPXJe!2C1tez`j8N`@IU-?@_@19|i2|6|mo}fPGd0 z`&|myH3e)&0jn!uU#Eb5S^@i71?*D_*lP;dCl#`yCTe@X!xRKPx_fSpyqzFGnMr~)>ifPF*( z`zi(O!wT4k6tHhsz`jiZ`xXW4n-#D>tbqL?1?>N2_W#>`zwhg4XuqSarsW@6jx~R@ zxxeZAn;IJ5*mzIF^9={;-yrU>VTf-|XAXDSL0fYh$S<-7ql7U1cy4@oI_I?P;&Eb*%!R9oR)%LVlE zbXYQ$0ZK`l2G0$-mm@I+BTq+pV94h5z3@U*rqY<(E2wN$Xt;QESwjH{xjTe|8d3*B zO2v$apU%AusqCP~NKYB8#@o+R-#t zu$u|d-jPz~UZ%`=D4x3)-K_2gGa}kpJ0pCw?Szb9rA3-eb2YacCA3Gcp%#g4AaZ2b zi?u$H7Hy1`)!Z&D8B;paDm!8It9BM`ak;KowqBRpDGDchOEA+@W-gap3WgkJVzx)p z!kxBjXiis?>lE@Qd%PHzX>Qv->k}m!S93d%#cuilMPKUk7{0*X5|#&24q$Z2;vGPb zU&-Ag8iL&an1SFJi&g+W{0?Ja+aqb|EXV;A{dn$f9Be!3gAM)s-Ln$6-9mRmnJwic zL=u29mvVRU0sb^~v>DTpUC73-(mIyrlw|Hsl<*F{O0`VKRmnUsfgbw?ZnMdl|9lk=$k!%g)Rds#y3|+*Z})|K9edjk zwY{h9Wv%aQ?QQvROJDOFoBp%$KN>#Q&{hA2x}T~2X6?nAeDyz8PgVV(@9zMv@(0$| zF_i5=mdJuOzC_p{F#7O}!R2}^m0B-EJLvE3!#2J*cR%t_aCa9uuE&x~ry%0}D4WM7BWwbL5dt})M7wf_kmI8)vy`etjZzhQ0SLAHTje+- z<41ENExxL%i+YnDp;87{{*q)pC$KRi@{O3`VA%>?_8flK_bqAlOy!P#Pi`2S1T$r- zHi>8DJjbKx-ma-!%8)H0eDXMu8$yPUtalhfp=y0bRLlFNa*SD*$!yCFBHyVs@<~ld z2bNyZaYSE8;t9nr(DGO*JJ)7^{r2)kW-|6~%kBI(@im}0q^At*|6EXjj;+H3C#A+V{=`H{^*ovg&c%-I()Ch*Z{ zJaomO6m&f%u!!UiAdBOfNqWaK{5Fm5Frx(%q08*3>|j*#r}ThI**!T9d&fu^raI#- zrU^|xHTvWUNQlUaVQKbQRRedwboz zweP7Nu6bWgU-d6nk5;{}staD+pg;Pq98V02X&z~NKT7;LZ;VvTs24%4yer-+c7x^| zPZGM5ey}Nd%G(Ej>31m`j2mo{~mXXJcZk-=*2oM<6(c9YquBwTWb(wJMoArR}M zie>BVxwBaKC_M_OXpQo^SqVr=i1pWgT%|g4XONM?{j4~ch%Het8l3|@tX(Xg5Gk9{ zaBL+6XYc_`fbmrBG&0(uldZc%aZ`?4Q1fSL$)0m|eQp{F?58)9V|!>9hU1}>j4j^; zHcnUW6f(I)j|a&MgAC(|3-gOJOIip*(S+c7KLr*gQ;W>fh@_6U#4am`m)eB_s(|PsZ;<<+4aKw$5VsdlRLJN40~pK=nMfY zW!M9HWX^C$Zc;ELoB5Oz3uK~DVJLF$cvwWSHH4d+=?8KXNbzC%{fHSPz}C*T%hO(` zENSmZMaoq3{Lbk>ZhXV}Mx*L{@f`x+n%q(3J3!wx&6f1-Q=pF5mLu9#d%Jrfq+HnK z{*wQ{k#m0Ye<}D){HFr;KNPUvRKTkEKk=N>G@r4rD{%NL1uV~(P2<4xWz(=cuPP1u zWd*)}qk!ePJZT(wetH^~=TfF&|3ZQ97Zk9cSHSXoxHP_hrtsZQD_}pRfaSSpX?%I! zdm8pn6ga$~fc;|y>>ny%|3Crz`wG}kC}2OXfc=;P_V*O9zpH@#9R=)fD_}pWfc-56 z>~AVyKcayBumbio3fSLJ!2Y@d_CpHT4=P|kpn!e90``3h*k4n?{;C4@R}`@CRlxqT z0``{_u)nB)eUAe67Zk8RuYmnI1?4%3j+Tbzg{Dt5?P+{dV@pG#{)_d8>ONZMul>Q=TWg-Iezv+5Uic3AlWENH6yYZ` zWFJQn4`3`DhE#a*SkTBZG!suJLYm`(vjSMEoY}~r!d4?m_IGrCIVLW7j>V&3!^d<% zS92msIo-SpZqbBJs>gB7X?-HCq;Z3&Kb}i+Wmsl`dWAT9It@9m?X_?!!`uidl^bM} zT1MRZ<{Zzeypw(tB;wnGsgk{_rQf9$EMrWvl%9h`^Opkw)(c*ndmNi$AKjI*RJw;@ z2mdxOX3wPT1O>crx-GYa494}{)Xp#&V=3az`&4G=WyGen3#trI%FVPt)Njl2e6I@3 z#^Xz?m=YcSaRnW|lSyq6jM5FP zOUuof1guDgr;VMA1XP*Op4??5q|nvD(L;-cUHM}!#AW7pgcm9k-I`la?OQhUAHxif zPXi9=S*?ofz{N)a|)hAt`boI7dk`Nl9T+P9-BS z6jW30)ky6i-F{fuc*)id*JCLa>j-9K*!h2}@3gP|h4x)-@z&pHy{jeD{MF`Y)1Nj? zG`_jvUG?v(`=`1?wOY*&RHv&R@x33QW&T9-&A1J{`zm#QIu(p9q=O5NZJ+V0v>M~P zQIdD$d4}sLeGj!jG2a;_@H4v^w87r>%44PEAj>0Tm$@y^(^a2YBRdUwhEKtah5ou5H4hjhN!#v-++!7iy}PgXD^fw48<%r=p27QR{m~7nQn_YTs8hMmRIb!O zo~Nk}>EzuQmvAXTyJFLjUaU-fD9w*7>%(;C0z+l$q-XD(GE`+s zn{qtw^$~?VrqI+nDS1oGE!c{rp33oz*9YmIX zRP02gFexFcQu#?_HA+9z!8!s7;3B1y6YNyM-@?vG0+KRf$GJ1-C&$j71#@zg*RI?X z$m|^5+jZ7?m;*z9gNPT&%6KVXgXO;5s$e-vofE~G9A<;0LC)mu#j-M9%CaO?6zRd- z3X;7<-!zm&R63E8rCR0{D&?-+Riyj~Jt{R^jh1dlCs%l9t*E=Ey(Fb=j;PGbbIZv1 z${Kl`%dTnd_lw{%=%qtbd|6t9Z^4}}JOAJAd(hXR!~OrUw&&Y!Yt>r*4C4R2rRg(` zf71B!hN}9<>VCa$TkX>|pR4|4^{J|7eE$vb3V-z7c^) zKi6Za6rUU%>7SSwIXdV+Iy^Yw?;jsH>K~gJ9`Fwj_6-b9j*JfvPmJ@Z4mEim&bp6& z*XiKlzVP$_NT~`n#zdaSvwoZ|Ezo!Js}(K5FYtvsU=nhuN8l>-Of0%O6$AC!RS50j zvF}lTUs?%s-0Ags9vyoheba%_4Hlph(cp62aj9*8CM{pYUoy~an$6Va@5UM6c!umF zE^^DWY~wJVxhaPk62!i;mW4`rZs_^JjCBesuiu@& z3*~T&_13u{)v#0`CDhqS#yfx3meGljdsS^b&6ST%! zm}^5>9CODO)e9k|0$$*wmm)FtuTzn^L@=?63-z8n4+ySs_~1JS9?n@bgLx2{30>9} zgASgA7o@aJ3Er9K5yPkGH)|f{vI`$xy}R=~R=7eB^q@B$Tnf%bqF`_3Z0ic( ziUc#e^E`C;_}XD=59H_c($#ha<$@WLGY+H8NS_c-WWc5za5^15`0_ z-8#!QF&%{4a0uuLQJ#)LRID_F<}(JdeP$)SA{Cu6CNkA|9_4&!t$|9Gw<){Ns?eGa zh?LBRwxdN|bUvPpuEwm<4h^*taJMzt;XIFPKA@9L8(HO8I2cfraMPFM8Ha*Zza_%XHVS&@MFBV<`dA!Z2GS6@UH~q%uOk z(tvqAn2x5z=8i4$$I}rM^2MUmz@}fgK?s7MVv?i zxAuG+a#M(bV_mo{I|_S`lYj_}_T*cUk;49MEP6G#nuM9*G^mUdkq~UE)AJC&X)4C} z;b671BfKDGYRo3r@-4`7FFgzZU!a6(nVpgCk+f{FIb}nW-~WHW*YRZgC))S5y{`3Z zt>;_LH~&b}=bD-t2OGB6{cr8ZYe#DeHFeeTsxMZ(%J+c^NB^7pSl^cC@r{S{KI%fx zMP%5oO~+%AE1Kir=?Rfa6AlmI_|@bAp(H#!BuvWc@;tuq5M8-oFBrlXyYH(!AyRHQ z`!?ozoZlgO{sns}WlWe1ISPoBh#{0)^E|rmVS4HyJC~9|)2rtjbV?{GBhhRqp&fZ6 zqVEy4Ze(hW%k(2BM#{)yP-S)|)AFk$--Gjn!X4AY5iJ^?NGBiwEsN#E!<~V{id}Fr zl$541bLs7Q9tpUIz95;qF{7azCt~+=DGdk)**Sjp;(?Xn!2>IU7@8>4mFEG153fB; zZAYFH4n!pMj!E9#9K2*GDZ35b{hMbrr?N*RI&!hIo(^0Ot!D(VQR0D(uh&K?&bAny zqVu#-vchkU3`semQZ^eU9%T8tZIrBawGTaSnVuW zOCN`Ell8^Q#E0@cW%35vC|L=VXMTM$zn14ol~rt%tlZptKCV(0vnzWnmEVRgI~Jvr zxdIv4^UByLZOija&I;#LdkQsitoK|^$|0pv!DI`#(QD81)XwVXR5Y8cbWU}Gq>M_Z z`aOA`^SMW#p>A1(u?fUd_Ew9ypG$cdDv=&TB@&jZM0V!y#SN%mCuhhTUkqQI!i&k3 zlv{h_e7X@N_vLwh=mGr_RhnR^z?$`f1~xS;Or@Ks7os9rQ^_QkXjPu4lvW5^YOpje zneFqK^Qn|1*BG-A@lyOhBmUo(2k3DVwoEBtPbgrI)3KWs;-738p?`PFD;2PP3fNHv z>>&m0eg*8H0(L+F+pmD_RKRvCU=J!_yA-f~1?&L@?8_Cfdlj%RQ^4*~z}~BX-K~J# zrGVY3fZd^hy+;9iw*vMq1?-&)*gF)k+ZC|e6tK4|U~f~vZdJf;QNV6iz}~8W-K2os zr+~dh0o$Q~ZCAjyDPUU_uq_JMW(91M0=7{B+n|80SHRXOU~3hyH44~j1#Fc9)PdYkSM%`XBvbo+nG%K~EaV^?{VLD8+MtXcOGhI-Ng*kq`EgP3<`Uaj$@$_Q!Y)>jSk9}Yj3XdSSdX&#O-;WTn!~)WdYHMmLTXF z_MBVtV>qYmr+Zt861)ZBcqrxIl0=Eq)A{?6(oXs`$Hgz3LD=tPA}E!r{1K$En{FsC zD(>cBd7wt3I{!)}v7K&A2mWuaT`~VnT6Be7tbR-WFtSjvdxsiBUS-WR8aLd$?c-R6 zk}@sbkZ;Mq0y&MT?2w${8btXH2ZC8w00{#};MJ5LMP5VnoTf0F&7~J+Ru|{uQAps1 zf^$*wfJoVxlW}$a5Ry4aUlZVBem=60PT-Eo-IHC9r6jOYVr3c;EH+WE-)GMxA`1}~ zL>+G5=i`Y*d%tl#ma-@%2iIHk!$@Ok5b$Y$sNZN9JgIySYRYg=jk@78NA-)MQf`5Vp2rjIopY`GVUX$!MYPH zWhkt{#5Zv&*pW8^{`$${PQ)R7LNcDP3V1AO$k8F)@?a@d%QWH7^O(Pn&@-IE$WKNf zU4p?0*m?1=QzgD6rEE^}O?e*wS7F5=(DQ^y$t)%#QP#lA`4B3+_K_7{maY87gd_d1 z{h73I>{*L>9+Eeb*-!0Rv&M<{DER7tuH?KHjwE0JL-hHSmRN-U0xc9A^Z3MWZ#}hl zrPQsVk{$X(*Y22|_(HfkV}-ZmdC*^l4G>t2nj5my@$qOdnVg2K16snN36SHY6)DX| zt$8Eh?{;cKu%rxE6EJz6*MeadqlBF+9Gtu{1U`Lv9`ZLx&!+*6n;O3yiH2biyaqZ1 zOTu7;@HT^gF!MkMNBVnG-sY&jBhSMDAEzHqXNBXm*~Z+7Sc`>R@e#^GrR2;;ek%Vc zZe8~4P1H6kKoO#9_52XZ5>9phnVlPJyqKjpS1~nz*Xh3gFWjfpQk06~L z^j*YwR13yfKex{-=FieXUGoAzHFvRZodR$Au{rRb2k-i>)C%{P-<^LIk~>E~-peM& zQfw7F>&kd(b&MvxmVX#o?xr7AW>`JJbIqmyuso2Kd*8)a7{lX*@y6s@{-O02?>cQ8 z#lr(?@vqHa!s7SPlWZ8JxbJJMPpAYSO4EbLz)wFN8Rd9uft*jNOkSJ6xL#4XPeKL> z_Jm4cC4T`4?4bKzPiV`Nv1M0BFn^{N4Huy^SoZD=IeM^|(%jv^@<3WX^9gf5T6+{V1H`Q*b~?j+UOCO=wHOga#ou5oLdZKTR&feYWLy=kCnoYeond>m%{n zNo|#fL9%>N#Iv#d0*VK4gcRDG=?OM7Tb^Ew!Hp4%19vf&&=z2?z_ol9gt3r=+cTIx zM4mt`pwQjICeniBv1?}FgcOAUT$(4w_?mIWXMG>G*rkDB`EE(Bpf|AmZgM~G%^Y%q zB{Yob9K}79<<+wg`lr+)MiW{922TW;n`S(P$WTJ5!HIy<|T!gH4K*tN14wf^T) zB4Yi|k}k;lD;S9g4UzF(oP{3E^E9dtXUKU~oV7Bp?^Gn={SHMGS0k~-u(e`PUF&~B zJ*^eY^yGQU)S0y@a!d1ko2xubZW1~@+Dcj`b}3r%P2`7Fv@jmFUYB;6R-tKSwGHrzvTaKC~>y@sDj_bk0@Y&SONP( z3Ro5Yr|(wy?i&=ax&rq9C}3Z&fL&FQURM#z&@^kT~fft6|jp6*r)>biURgE3fPDO_Ob$YK><6jfYlVRVFheR z0XwIF4Ju$CQ^3wDV6Q4*U#)X=?yA-gmQ@}p0fL&qt|F`)b_jN3_N84U#JJtGotq->R zNlRn%m8MTL^)$Yz;XfPB*Z+L|j=DG1{!8^gRQ*a-7l5zlk3Lf1xj?SaGho_okS|42 zm+g925qn)?8KC&GRDpt8o`wR?3o=5tU9*)>;b>yYQpxldcsh_XYvkKcapNv@Tc&<_*mJ)>#YQ zCrrIIJQhkugA8lHXQ~T4QOVe|Pf_neT-F?B1KG86avVWU2FcD&ev|L|m_=M9nTiiM zrDQeCI0nY>Q!$9U5HZZ3OR~2VC%$wV?)H~UZhqDe35211_xy@!dEv0YcNb)}Nw=1Q zh6^sa7=m+u=K^M05;xCwYmGY#JUPs?zMI+$Osf>TMUA8{R6ou2^ zq2r;n@cUmr>zHHs*T8Kco>*m00{gJ__7obC-vIq4fPWXv4-7Xg7fCNfWv2EoI*D#A zG$7GEbbkpsLF<#s#7uO5H&oS0Y$nvK5C+*gkAIEDEwlssm3CUGwUed3Y?0>u1ssGAjDD%vMK1bg(|Fzf}t2L9&oKK z_6v4NJ041zn>W~rf)AYo_mHzMgO#Nz8GGT@C(@F!*7>K`Rcj`_u@G}Fu@{WBEZ{WCJ=+NTwaV>PmEL^$eZzD=l>30z}NPvwwJXYZh4~lubVG6y`}Mkjnxf< zbq8v1t+`h926()#KbZpsp4a~P+DU4Ai#e5T^V5kChKZ8xAIn0eH8&c=IGXZ}6`xH@ z&+tHMkVqa~6|wj%EnOy~s|&^RJQ=p}#%GzQlI>Ws7A@R^edEZpnN}po3+S9?rl{C0@-R>G_SJAag6g6Z(NsHOua2U%R9*X?vS%cjmUj zUC2sXtD=tDQqFMES&UtZ$+gtu>_k=GlyWzO+u7;fJK3I@bPRsZaWCkbII|&Hdp%QM zxDzE4dG=ANWXx%qslhHp7EKd)ED4=jOLoW(gLAca3DS9T90n&FZYB%ttWQ}wvgNN& zo`}R!OhC+tnH_JfxF;P)VRO500~z+GhdixbEe51$u6)2~6=AA9xnloV@G7Ir#-jE2 z4RvfR<3VS1BpkUX3U^>nn9;9Ndjia5Abn67I4$nYSgck^H-sNRtZ>!5lVLR4k zQeRN6OKG4;c4%fLJdgzTVmyM>O7GjqKU~;`p@OzJcRAI zxWll`H~K)~cC4I2_P&|R@pLrImcel_u?b+k{!3NK14YT6066>dY~ zqjVQ@L&3!ch$X&~oumXLC1eDv(QheiMM4U3?JQ;4?k%K@Y$z$EQdF=bg)PYGxK4J< z@EQ)1E?X8VWoL{nTuG;5$y5+Rc(6(9RGdfFwRcdhuouE(vtLeFtn&}zQe+2g`_ZBuG<8$BLL!B5!moZl1(u`Zai`-+-@UvHe%uzT9@C^~0?rErq5JH~v!N=7!b!f3H7U_x`$x+G5RE^`)v$_&x$q zpHFWo@Qm^!^q{RXS0ZpOTUxys3tbMzz%w1Up7zPq8zb#R#&VOXFYu)DV{3KPzHX?n zj6=EXd?Lq5X_b031QP&HuD)KQ5a`h2PTJC}MhPBKrae$F6h-`e}Q zI$6Uu31Pv)VJ&Q9YHt@$h_wDlWWK=D)nB1|qOvnIL^HC6Wb+6*AeoC4UzU1ROMpkcRt`_7k3kw#phlN-esOgw1}$J!)X>E0(NCS9 z24^pWfCbIs6UfL|-oPGpd*L9;d6Ir-KLg+9`&zRQ5$!^AToIN-N@Z)zKg)$KWVV~0 zgM*a^o0XHAwqze_mIu;uO;wFvRp2@557LLbC;+CSl~oV-K-Xg_3#0aWZ-M8657L8@ z&az^hZQ_VP!nf0Q>CoSk(mpdk&$`oV3q0Gq!W9`7J`s)b(d!J`%xYA6C@sF!cDEIH zYW6*JJ2-;@Q-OF028w4-q-DEe06nxAHNwBZzPSs0?{TEgi8rqP!C&}3e? zkEK$H$Q(@ScD9w!(i#|jF4I)tIo7odS!dy(CJx-j=GA1HWEw9!U6nVb)GHrPSoUU! z(RF(A0-F|LJ8Q(E^nfeu0@USv&B=(YBbCAvoopS z;*u0$^jw?#;4)-&JQ%ucwNPYDSgr)TD0Blnf5t)CR^XZIkIv66IUl4U;xI z5~?ro#PxmpX6mLJIsyo=%(aCFKuW@#NmmOzG5ub8It^HQ`5m`=u-hI<3pXYreNTZW zobS`mQKi7T2Ct~JL0kYS5z5%W<~m*A$>#Udqb8Rn>3Aq52)KB3*}QPDj9A$nt8w?v z`pRfYSfhshC;W^xI#}3=+peHKL>4`6q|02#%36f{o>UGuB}<+!qx*!llf-#dLB(e`ZH7u&YC{AJ7W<~>czjbCZJr~X3i-`5_gDL~BsQ&p<~ z`d0tZPZW4Ir-$h(Q$Eg7*&y^uJhbicL_EDDktOXNsa%~(BUjU4UpQ0XS)3l#$wpG< zp$c|-Ebu&wSWT!6oELEAWg`)AUme zBVu@ORPMc%&{B$yQOH_66DsgzQ$x>?!-t7HWhgz#bm0k+@+$3_d5fq99Tf|zWg#tn z(J?ZuyJGR0*CyQ9)EZ|&$3fh(LzXJ8ObiqA+OYyps5S8HChE#8WXSF%%S+jYAP5;w z7)JdJjj2^E*0wV%VL0K4hnC;VeTr$fah-7`5U_k;)`AkB=hhBZ3`jsId5!Xp!UY)% z;<^O-V+*oOqgpa*%)kc1O!Zj$w&gpxwGwoU-h@-+@dD3E=BKN1#b?U5qWSdtTM$Q) zr7og;)=z9zX)5s4W}|fDTzfcKle1krAOT4$hH~9s;5p5D^jYc%!4oA*B_QG9elDe8 z$i-?6>$Ge&FgS1CQ{bu2_N`5m>6W8vdq$us&g1MgOG`_ftSksqCf48BSIpVd@O-n* z2`CEL;N&NC_6@6q^xF$O|JoGYl+UCu?tO9El{9X7tW<*7czp$)l%+A5i|Lwl7`8s;rf2{3OtsicQH@7tw8z$@itu|Zp-PKQ4EyBa^ zm_OGFJmJSadW=Zcj!R2MGup*&e^y!8ndSmd`Y}Z}RIqlU^Jx~fm?eEh*E&}K&GJ|& zKZ+&PgOOx9810-%rNfbUAkf?0GZY9+vg~OPuR00QY%gfR#ZG334)#}|Lr+CQorchi zp929_fljCa4u?!*foBSt$&ig`tu^GO7=;)@ahNp{UXaR#U?8>;V!=iFjsnj*(ziBB zo#Cui~c~3cAIExc! zXe~*Vj=95Qb2Sp^THy)KKSHigLTGh}ZFf7qNuT7EYpswY4-=!fc6<>dVWDR^`nX zu}n7=9zdCnuaWc6TF+E?6DYI)Edx}O*iBsM*#fU0E=-|Nj_Zrmj)oo!VMrF{THsyz zsmem7f)QI2t7k-V)WcF9E3mb2LR8>xas{M26n6#6L8TQyVhz=tNxOl4Ps9qbSQ4<>G*^Auce3g^U)6K%Z);DrpJ>0U?dxqHY5UQ(Xxsg5 zTUuV<5@_jescrsL^E;Yf*L@hy!@joTW&+VG)< zH#J;tctyi4^;-l-OtvXsC%aFp}GTgzSqX=KC214!^H}{Zj?( zCl#cQ^5YN0`_+lu)nQ<{fGkg!wT5nP{97W0`@}+ z*bgdTKcIkpzXJBx6tKUlfc+H(?0XfkzpQ}$B?as+Dq!EEfc*sp?9VG;e@+4WvkKUE zD`4NHfPJR|_BR!QK9e+t;2P{6)L0sCeJ?2kkI|Hp`X&%c0uGIdY;dB9Tlw4YVr`$fctDEsPmzJH)$ z`M!^a{VfF!Ds$A2Dahf)mS5~UId{aT7254n3fLDEuz#$8{e%Mc;|kc{V)y^I`xbp2 zo7-30KHYYrHQ!p_5^63seWht z!1G65q#KA^?*zfjfw`@DdBN zB@Eij@Uz0Cq)clKeOG~JnLI?1~c-j#V#seT_($m|Gn!5VJg5W`RQL`2^lU`g5CdwHUaDbFYsofqd%p;Q{ znY~nHrkzPBq-hYOfoTxsy=f+Gfk|1FiE-xg5C)gvu4pis3V|t8P?$0$jZ#p?`wAM? z?2-#q8_ZP~=1>#|*Ef-zOGmUa4TO)S)h-R*+X_M6AoR!+)-KL(Q!d0opAW8(WrnW< zNMQEz!ehwn;`#>PnPn}Jh=esJa4^(~%tas#OW8gndxOBWzc7njFImJBE%-!`*; zD=qrT@^hg#UdoftK-SL-?|OZr@M`4UM-L2dZT(a6h4MrNK*~&Yx^@)awX(>gI=rIr zDAwbM%C%KV{^&(-%+T`5*#_IFI^jYySO_5h5Ire`RTNVTG4Q*dj)2*9Y+(w*pfVdu z)7GoZCaA)T(mIyrj~#_akhwxU4L5Ul9w!%Y5P$A@{wUNP3Af)jHKrT58s4}6u z3YU=3)cTtASTGVj6BFYFSL8ChTv#c+(x|wt@F4OVU*D?A!li*-Cr+*pC0*gKOB0s^ zNMIHzTtsI6jDmAksX%v332Q^Mr&10#$>Lb-wAi%D&i}Xh-sVdrC9dfXerD1 z+-m{>w1W%;Vj3K_LGQA(1VNtyfhm?dF$8B$799%hhXMht&C3cr$IC(e618Kn{0A&2 zLhrF?&|_2TdMxGZQWJ!dOAw8s%l3t?)Jh7OP84|7myt}93R75xc{T@DYc^^fdo)&< z8?!FX#)2Pa-(VQ+)g<$fE5eC{mHa#KIT5QB3XS$kjhmxa_SRfEw3=j5Wk2_pg#adp{ z$$1(?tSr90X1xveT5QP06QBV!)((5ENw3JIz$37^%D@WTU0A^i9HF1zU`K-63RjWfq`pUGOrO^tPs710$wh|_&p0931lAKP{GoecCd+n-Rg7?E)zSlyWm%t1SLrI82Td z63Fu~J;sx(c+V5R45h-bvy=7CG8vPw3a=_Wj#W6AA#Xr!o!-4oay^!kzVRzXRbh$O zjvhdFiY*E$Rte9RaXpsS&Q!ki7ve}_NWVfI&kpZ$9^%s8k3At$GKyM8>>8U3G10rp zS(F{5Brbz8l$1S$3B-7&NUO83h_w3X`GKtmbf)V77iGIJJpfWN(~($YF%4@Dmbp|W)ddRxp>lXj~lhz-)i?JBvJn$p}3HBRDNy(Go_C zAR|YtUD)0jXq9U2=^3uc9Kbj_-^nNpB>DDr1=0Qxs`M z=%HD-aLio@+~V^~Q!jRIl$6T80WMsL zwi%K-P~_Q67U^d%GYl|z9YKO_?Kniwx-1MbAaDU>>}J94WxD{?x21xeTnR5I^ zATZD35}ZNs*3)6-L3>Ba+?-zZ9mO`}t8n)tq{IRdL(Y`b@tC#(>Ifk1x!$REdf*VTDUWfbwO>I^=v>k%8V^Y(WY`^mH;O;M&?WWQv8oESWqZQZl6` zyQkQUY({l*C=O9&c8oFRW2W!%?EOxVl+o!lgw*2N~ zAOH($x!_2oIr13DaZ;W}N6Oq=Y(!dpYvefeSVucEyU;uUQX(6=hFKI#Y^^f>4|4_t zV}jT>QxlUckO})Q^Nzu~=mi2uUHr=y&E$?^1IlS&jXZ}_Y`YTK52TsW}~pm@+ozn^$Mu;g$Wd~9HBV*F@t-^56-A)#%>YLrksLk_i0m(V1O>=;{EuXx1k z8!DU0p|PQ!V?%xZ?qkCf{{EvQNBu_!1}FW)lSAD{d%BN~4@~q4*|78fCf|s!{ex|f zwJx?i)4bU9k4@VecQyQQeX;JNwZ9JW|L?0F^nDT__CNaeBG3PEoPGtsk3Gg2Yz6kT zEWM5AlwB4o6_&Xb2^4uwkaN%Mq|O--{dzeP(vAh^5|NPj4?)$FVP(9O=7w%mDlNZ) zC#0HW6*FS-nQwJjBeZpmJ&{gmT^!nF7lLg;S}O9iCucI`kfO3wml7RdMYvSD9?Ez# zKM{VlWc6nWn}+9Td@OeGUO7M`2`AjaG1WdV*(ifYh zy2x{?9HDOykOJGgLqc|lZ>xB?O{n)-MB>l zPKcBZ>ttQb;RcS_UB@G-6X`kd6A8}EMN-q}0)YhnZSiq`Dh;aMNRS1g4aZYpO9dz` zq=AkKOhv(GXDJd21j?LQN-c1)cqi6+e};TW$CqWsVUCA4r>0nFX+2|IYqfX>)=ME< z8h(Xu$eijT+aqb6%x&4`;&v>2kMa_V`T>u{!q6NXXlw55+%>rzjHbcwlAU_f+O9*L z8#@D&#xHRhO_fw0x>nrA#X>*cqu{~pNiwj+6KRWV=%h^&3r=hC;_afMkE*kp+!7eyzj4FI2Tw z4OczKV*T;Re?}}oYm7jMB4~*r2&9RBFctzWMhK6IM#J)0Ycwp6;YP#qI1e-|kMlso z^7wQ#ERX3&!}1swG%Sz3N5k^ido(PMD@eogxPmn7pD6Sl9`}RxT^k&)pA^3P4F&8!Dqz2^fc*yr?AH{qf3JZ3ssi@!6tI7* zfc=UB_R9*`zfr*cwF3695KCK!c>G`*_S+}^AB``MVNAn*SV3kyhB58CJce;-aISm4 zd$4ENKiA(s@9z%=`}`xlBSF8`-y53i3l4{RdqcN~J?&tBsC%$4Gy>)Yy>NLx7#j8m zdk5ygL_?b!?wji$m=6WpdA#Eg3Cm*`hXw}bhK54@J^qoQ0d^_h7xIsU2j=|)+HlXn ze9u7dz+i9t`*=Uo!o&UZ;envPU(*2FKRg21aM<4y4)+hv&yNhv_l(>s<}(sjWsdri zLSN^5Pul*B?>%W)zW1bI`QDR;<$F&W_H*q1e@oS~zK(_V_qXqAduLl`>*baYHh-kK zt7)KdXTz2HkJkM~?H|^*);wPQrRq@tzVzn?NI>r?@*J(R`eEwj7IWMZ_H(5RZHVay zW)%sD)D~R@v&wjM*{QK7za~{`8QOe(PmyOxJ)%!iNza~6gY_v_=T66C5%2{83-9w& z6Lwvu6ecCb6kROaFIW{GfD2@1S8{k6Jm^vF+*ITVP>1NZX_JeQ6w|Y&l5lZk#C)@p z^n^$Wno_&H$a9(Y(4A&1nrAc)1O)Cfs`;8^JchOGEcRk8C+QyZ z6L>*99*r<706rxhOMvJ9Rfr#BZ~JmcY28bKJbJr&kYjJL2RV-F;nVaWO1bt*E);vV35x~15Stf$sCQD=Fx z0ON*5<=V=ImDa&^fmyonPck<%ka<^scOT@Ub@-wICGLnOE?{l0Xm|s4(4=pQ^YHb_L^4a73~T~4!QT?8U>Cl%*o75Wh>Gl8mkY8x1wJ;eijbkd!b4AW+|KTJc^Ibi}O+~e%6 zQXVU>a2i|>Vkz-SB-&rx&)Y~RFGG^T#}c8-krXTfV5&-DYki>-Wg8Z@6M9qeKIE;i zcRUTDUeWI$VN9qnpW2yvLZsY`yL98&y zbZhZt$aGvM8>DlKEAyjPN!mM88K9J_(WTh=f2(iV*Z#V;Z?=V7-{0ER@;%MpXnv&W zqfK`;rW^jC{>$}Kb2%NUO5yxM>zQ_|M59s7g#q4SD)df2~zBPdZ z$9!bPE(b4!Q~=S)95&4DMV?l8k{*U~DuyoI(?Kx5;@i=w7+A4;L=`QElrl4#CiC(l z&&GRljU0MK@DUR)9Jb~o3lrKh>$dKZR{<;~xS?komB1qj?!g_xYITLRvSf?KiY;ZXaxok@%$4cAIm`wF>@fa?^2QxF&P6QDc61JJtzTCJT zOG#{C2RdjUBPj?`7zKmpQZLzAoWy#b(f!nVn)_@%z4BEfoxt#X9xYK3E|r7X7`uxT zNb(##5646#8JvU2OhQFrYHCo+olb$i*WNmn@s(-rEsi5ig>*%rdydSnP6tzPMu9l< zcD;>IOxuZ4-l$CVmf}&QdRQlC%jUcCQ_y>o#z_t4$d|BIXxQn}F1SgsQhuZN-FL9-zJvGOhq7xaz7jbq#3`DLv2kli2BO(a z!KCGw+`TbUPL_G(Fw#+&M{Gq+F3xFT7NAY2LMl=7#8;-dsrU+{d4xVVZ8U{Cp%ObQ ztTL&Z;wX~pp}TI{NL6Bk&nwc%Tq_H!C{L z&Yayuoz0LP8zF~c&$TONP&{Z$S#(`00 zdA=a-Mm({I+l*jT%=2TZR3b758$J6fr1Yw^?aX;&Z;>Z0Q&`xY3|Nz^arSzHLY1d1 zyAG-lmp+t;EU`TjQM_JnRHnMS$P%7DUt2ZAPOiHSZ!GcTmVJ%yPW{DMFjoSXZ$w6yQ$7fOy(7<)q zz<-tUG^fRuB2N)^nBI>3cwnB!Ol`GYb~2Qd5^gr@iag`j5Is1vNrY*9jAV6oE}oF` zL^c(90JM~OGE2*+8yIvV!c~UDyp0aBXJxwGiGbEudtWTuHLbQocCl6}TwNbwK zD(YWIM#`gIWEzV+8`!|wR&s-g!<)6H_Kq>@f%x{9MY_oIj_uTIsG%N%RzrBw}Pk45qe&E%ZFwvU7#k z3=0qJRuPv0N=Y$IAA1ktPaKT}SA$?(!bKJcU=U&?JyzuT#b)#fwaI41`MC@yds`A- zxV}o$5s;JBG0Xpo&|F&PneW2+~r+{kIt_ox{`4e@$TXb zvYVuvMOcbG8wYEvRSH2DvJ%H7{Io&yj^cSilN{?(&;*MuCdWyblG7=sV3Eqv6Dg$` zTv}qHL?Iq3oT)~{lttV(XNSdB_hjpQlf-^=@vP{e9LOO_u4Y~*{;V;kd%_>g3WOLKV0{WuW_PrTf3Dusam6_b6cRR>0n+fW1=zdxrvcy8?Eb z0`_(V>}?9ztqRyJ3fRpG*jp8_n-s9OC}2Ajua~;$G4$jd3+lZww=efp<#J^8yc3!x1nKq zd>a~;$G4$jdCVFbmdC82VR_6N8kWbbp<(}(+yAflIv#ER0Nnr2x4yIGjm=+b-rw}@ z#)lgA)JN-nt8S$B`P%I@Pgg%y^={w4`BpY&kA1DklWFgxYmbG!ho?c9{h3th!K}cz zOL%{gC&E5L_r*jfV^$FJ1vKvK-1mf1n3NUEEd)32S5omMBV7<$v4~KYtVq-I&|l=K ztskN1KjZEpNK5#TKrSg>51tAt5nlu^NxM3Z_>#0v#+_p3&LU4`J+?;H6U(XEIm&TT zT1-C=%KruM^X+6!XNeO{bQ=XpahFlnYRJHrqKnDZOmgV`*cyIQzpcmjBMp52oy*W=lEB<67Fv_F#;@4BgnTS%nSROI=u_tVWtS&`!A%`F$l zLoy*Gv#ZDxVvo?Rv1VC;Nyv1|ayy{!lKTqG8zZI04Ia>~o_*Z-wvow6A1Ly4*dcw4 zd}qXr8o?Y)n5`azxk@CDWg{)PU@^P1cm7%Wi_-d-li0x`PlDaIrYR7IOGTcImfHe2 zY+iw&6CfpGSnPFnvOpWbga(F=;@cL>KT%@{sKU&maC*BC7cld})q*z+Ukr$0NQtk? zapKn0Hmk70%r{t%%*+&dX6?ym$VuvFk7{5LXbA0eT&z|eA(_h|2|~mVpNU0RjUH-J z@9dlf2`^(r6AUy_vYKRF4_}1gV!;b5&=St_Of(jQFh^@P=B<{WqP?t15N5y{KMI*w zw9-6kevgTDwa8P2D@5;~N{aSnw}kdFVtXW&n=uMt`0{+;D#I62SdL$YjK9K~m32&a zpY$*#hWxwK7b_FrSL7MNFDV2E;gPwDkr#x0l@A@}RDW344w0UA1C^M>p5tj(+0Q)IhCAyYa zEpV9|C|<$KQ-vNV%%Nv+1fJKHBP=x36#UO^du(q`g%_n#Glx!3@ijI=2+KH}A@y_C9q^RI@Xvoz#!Ci=? zqLqZ{jjc>?M{(hLB?v&`xwkitPM}`Ha z(|@LR{kZ!?y1_uSGS8s&Q>B zwmN?H;_G)l&vSY2`TirmJqz`e(4B1e0XvQ)~r{5UcSs=O@R`p0)h7XSUn= z(p-AMQeaqv|31XZWBa2LZXR~DkOOZac4z?n1~I)5;}8coip9ti)*6FN)1fk^-ZS8x zgz6jf8;LY19<|?;2jHz@jB7XC>co_KSL5MD6$iFyP)rwj>IC1=|wo# zLOV0hsW5w(>=LZN!qz0pm+V7e_gngnH3IZF)=ZW*PD7j-kOQ35O31JVkti3TG{_zp zDoGsW5lWgkx5*^ffK9;eDiA>2E4ZknB)kK&hi!AxuSs$%0rJhKf^mW679buvzA7e5TLvo?ET zScfvHfZiw)W2!&^2LdrI6@t?c803N065^QIy3sD23V7CgOTqltm5_$cKJXxxjz;0w zfS(kT#Pstm#-WOXH{1-g<6>l+>w?WSoDT)k zI0^s)zYcSR*u}7S1|SL@bDZt$dZjmEEPVIH`_v^xY}>>&+-PUlBK{L}cJOzY$Kan=BeBIW{F{XrfqyL}BJj_ZMF5O; zVn+)<&lAwcGh}ZjDf{cJyzF&(t!XvIdfxLqPb#m_8!y4+f5zy0r{nlHwrtu)u+bYU zfTeXXd!yd)JkR{@*U37h)9K`r7UKQPt(aFT1gh(Gi(cTnZ2x(=Fj>yjco2st)T7JLf zSo7meZ)^O6#&Zon*RZSpZS~vhzPGNncB$sasy|-!O@O@gXM-j1#Pd9(^KEyO911#sEPSwiMe*XPi=6y1-xBQp(># zOKF%bw1pN*N@)ocTA)BvO3Ri4g|wwCg#si} zY=m_>n3k!khf;0Jtdm`~nu=@dAjOiPV>f~9aOw&vT#j9X%< zH!zQu=IP7qy^U#^2D)2>30evbvBZ>;ig>OS2r3wCLXo+e`9e_!VsXZHWn+1+Wg|MK z=r50@W%}f8B1#cUCa!*Bs#%O9x~@qet@B`K_paU8W1G@4#W2RaVo@-3OQondFj|3# zOw&l`*7S|IcNh>?TUm5qG8T?cxDn~?acvqqL`$Z~8rXic@~rm-_(*npHlu8jI#Sdw0_0$I&1*TV`_vTclY_?p^*6azIw zDTRUF5>%3~@I#gR7d&Z^Z9(dz${Hk&v<^3%PGLp>duYJ#RC!2GoS~wnZRxpp%;f}A z?Fi?ek;!x3==_S6gznnnyK(7$bZyB?2S#B)kA$y%iOPy*>$%swnyS!(hCO!eE9&Tn zFhm28Ud9)=_9d&M$~eRqjR$9gf#`KC8*dLBot+JVV?QRP(^pq+zb)f&7S? zk$HU7?&I2&Z%zSIQ*ujb>?kLs@z+XA{nQC6Wbn*58JsK81(qWd4ktBXX(%m23uM!s z6wh1Bsh_zcw+dHHTi2t_UCV#KI~Q8fE+#7kr;_o}F*tAGtZXWV&=bZNjl?3eadnZ$ zxX+`VLzgddvtxDI7YX1vC)V8ISvWsg8wH$R)cv9Y^A#16c}g>>l`Fp7b3MJ4+$U%o zX(bD>H&XE!T#2%jdB}9|ka>GCqrvr&q*~F@)OGDkET5O*+H){0gV%TG1f6L<5`zpD z;MH~Q>o@{aTMR0C?Mpg319_&w*ROB|=GvF3uC!c-g24GI5WN73Ns-YHwRC8LU5H=% zvV}ztRD%$?9Rz%xCImGZs7c9SU_{cr4tsse8E}bHy!)+N#--d9HuFBOKPT+}H+p(J zt!*ujH-EHwL(_rAg@!LR?5%&IepTJM+E>^7TTM;%hN_B+f2|nxd;ox+WLsLMS{@J= zUun9|(-V{TO@eJfc+6__>#h*3D)&C`1@9yVwU;&rnOJ#?2o%j{WY>^eiD=6|eV?ig zsOU>BPqqu7@cZ?ts@WvwxlZ;7^Y>1< zM3{X5Dl4-npGpl-D+{if!FbRcQs*bAwwT-shqPil73GbR0$P?X0XUm7~g41|8QaEFGCFP*D zA+_9aFtw*&gw47~B;{N>tzyp|H}WO@cg%g2(ihDeD_nAQdJA&I^kX!RavYnVG<^A- zm&vs-tl3GljrV37$CPLtgi(w+2QEcDhX$UUh^G5x|9m>+aQNB78>CIT3 zOG!vXz>%@0I{NK`eax4vkNzX&E7YC711p3#);SegVv`VFD^I#Ny$MNslaMicX{7Zs za}#`lwf?>GwCmFCNE_Y3X|zwp;P#ifp#d#1oSW?g-4JD|ym>Lb5vg?l8C>_KQBf-^ z+<}65Q*449_ehGLYiX>2hSfCq;{3M)A5>Zhr`B8ODXv2iHs$OJm*??R{BdKm-*e3K ztf%dXw##kD+U{)qe(Og>Z2!ieXgt|?SHlk*KHl(_hJ}X14ej;cssB*@8|&vwJYja9c+ezWrFrgt>Gs^Y22 zQ02W%Qx*P-=bEZ31}k3E`00w~#;oVr=E2s3t+%#(v*v-Ou9l};Uf&XGxwqxU=I5H9 zYJN?#zwH^SQUzm#o~5|ful)-K_CpNp2N>8tV_-kXz`mD(eLn;HE(Z2}4D6pUuy1Ez z-^0NE5d-^f2KKEC>^m6P-)CTdkAeMN1~$jQW*OKF1Dj@G-^Rc`!NC3w1N&DD>~Ax$ zZ((46i-G-32KLPi?3)7}(b`u&-fYe}RGhc?S097}%d>U|-F^ewcy%a|ZTl2KM6& z?4L5Qf6Tx>#lZd{1N#RI>|eG$Q_)vR+k^idkZ{S*WHHw^4E4D4Ssu%BdL zKf%C$jDh_q1N#vM_GcK_pJrfR#lZd)1N%w__9q$G#~IkGa5mmS9B+Rw?EklV-tK98 zsP(T~&$Rq=%Z272G$)(unqJ-1*7!?}n;W9_|5+cd`%>L~wePI?Z1p#)gH@lYnyLJ1 z-;BqL;46RsP@wD508kDbPzFFc(Kevu%c5C^bG%ESD0yGT6I++QqAq@ z31o$_bZBZboLbf%w=!S?!{+p1WVl;|bEh#h+~ic@ zN5g0auoH8~l;;ylAHo1A8xvGEqk)ijaT46V?F7u9wPgxB%|iMy1SC;cWjhSfTS5hnMABEItu#d6VO0*hdJKe9NG8l%dj z;Ms3N_Va{0>GXp;~sAMj#b;5CTdYQNLyE_A5h|4hF+?lUd~jY`@X#X#=U3Ulj*e9Vs3mEdTIc} zEIM{1{SsWNZ@WTmvZE?UuAPwatF}n9X)dPspoF&2mrQH}6>-vDto4buXk)A_reBOD zV}1qN#4>6PbL%YH5&@S`_7Jyh5qC*U_py1ebH`|Vq%GTsJ##UA4_D&GLLkbwSKIo8 zQ1Wgpc{6<&;;uwQii$e6N0tZLa>0fwf=c6_a8SvcyfG8Y>#zt44S|y#W!oNUOBb=E zq3DOx12X&{eMn(&<>I+V`hsCNTU{_4NM$d|oKNqP!}u}kFg7L~d+Qp%YU@~-Ib!L4 zl<>x61-DGc6mJx&;yT|^97U;6YO*@rhsAEAA9ZXKs-tZCGi|kTo*6Q3_=CWco6^0= z<7l#jT77jp>L6?gA*!le?L^NqE@C*Sm4$2B8WWy4|F8GF+SB@@mM^vRHovy%?T!E4 z_|k@K{den+)V;p;o3-a^{-LJ3I$8Dksux$jq4Lg(->ujI@N4lWd0RSw^4gxnP|_5m zJ-A1R+tJ_&28U*+?R3pJSS9Eu)m35dq)>*_@wccx#8JQ#lXDj$`t zuc)=zl~{RvNv0yr#Fb=E`a$IBr8}0pmFrL!k@>p6SBkfi?gPu0t_WL-=X@etC%zQR zPD8q@a z+X?#ix4;(SEQbBy)=wkqjxNCwf-Is$JJTnT;~DzmQ_PXk3qYs_SNFF{aYn{x(vwY| zii%UohGdXBpTix40&B4sf(6np*kL0ji&{agTPS;XUf#E~)iZTJua6l2k4QXA68kS}JGr0uW@YpW8MnuK%(mL1J+ zZ|(%^e{18fH|}hBU&Cnq-_$=?_xE*&Yu^eP0UoXXX7$Oc4^;J5o~X!Gw0Po6Q3NE{ zW@JtfhNWa0ud^7Nc%==O!$Q$*jpJIC75dN!nB;iX2L-fR6}|JsqLg^BT#!v-P}_2SWCq^f|1M}>5Hn> z$Zi{y8}sfMEiLOrQjiw3<~qEjyHcm|0a3$;=yGv=^#=BosH#EN(avhuPDyoU0$p z7B`oU$l}PCkzFTe^`o{p7{PLb^+-CbT9TZRNqt**<^>n*LbW|AUwCq3dJap+eCxDj z)3)0MTL*-YQXz}wIJOfiht_g5_I8h@L&&g$u1hY>$oaG^gT?fD?pT{1kAVr?m%s$i z4uM!7l`T8jntlZqK17c}qFST$=0O9}5)%DY+Q{0{L1e^;#imwawUhFOLNi5~fLqf7bH6a+k zaR1*(t+(zL`W=gPH!-m57}zxo?0N>aje)(9fo))5S2M7y7}yF1wwZx#VqhET*tOrI zW7pL%u+mKVV@0lY#vY2KM`O?7DV3cI|f=*nekWzr(^B+MZ!oZ5XJG%8f&Cf-`!5XaKQplZM8~eHWnevY?AjkOu+K5DUu9sw z!odC`1N&tL_Dc-x7a7=pU|^qRV86h?ex8B-90U7VI(FU74D1F5b}a+DiGjU=fo)}A zTNv1S2DXlYy_J6df8E`T?`~sY?_yxLGO#aVV7D-^cQUY>8Q41**o_SA?F{T~bnM#C zFtC5m!2Yj}GXXYv;{E@1+lBpqgXe;$?R4u0TlciQrDbh%sOdkNrW-%dINFe_e^>oW z>UwHxYfe_bx#~MrM=IY@d3(jLS2Vy2%leaS%gBt|d*~V)mGWaW;!B9zHyHm_T#c}+ zMsz5xHpEbECRb-<_H9O#TwP%fZMPOymeiGu%)z~remSa)e2N}xIiNo4hKx+V&4{*O zx|x)2C@oA&sNf>DE+aE?57F(*aLX1_sRRpFTzNUf-gz`2EhAyCKYC(p_}DR#URHSR z-jR{XxsTH=fYVOhFlYh|B5owhgPh6Rjb(YfmSsVz zDAJu7nb7-mlI%`W5K+N8PL^tkSE!UbGcsrQLv;BL`~C3$A)`Pf>jsy-ugeIH7ZZ&K=HH5o}neN@>f@bgI)7c(l`IQ^nF zSmTtNQ@6uhYJH-uq`6!_oM}NzOMmJtwZ~2$Nt_Kh`lo$BxgoSvu8{+)=zf~6mt2!+ z#!7FZo0p8uM=)xyYTu@TWBQvjO363)!hLh>u-V?wIm))@Eu{Cn9HD z0}q?Xsc>+1vFsi~4=hitCR2^XdXuZEJJRV31Bf61V^q= zU^0NAN?_ra+1Q5ZQ4isw*1<>&uD)X(qT{o}7rcZETt|`s3Vwx(UQ8fe|W5`Z)~Ki zqqnPje@A!sXm7{9{eAm7y1GWX`t}d(9^1cfM8=R?m63VN_R!tHr9J>U-drR+;+^-- z1VeDJb?#ntC@ty2rfNe*<|rFWZea)!1BD1q=5cz`cP=pJb!h9Xyqrh^x7LizQ^xQS zw3aAtxRj-30TCE&$;cFCoTVsq(YqLfnc)cNTBAYOi%uqH!M}ApEQ-d#>KG5@U(hl& zW|PYqnWk(j-MLimJ=F?mXJmV%EgR+`@UHWVp&82Di5ueEE>io{VQ=_sqR2VV_*Glx z$Yz`gZqCSzVdJb$EaF}mB}j#Une@oPL^*U_uw*rBe;UnkFb zqw2D&W1N+RYdIDjysu%lSmbY{`WEe$x+x=bj2*v9PDJRQFSeX$oEgQe_#cOCBp++e z*dpO1k7i^hvn%xF4b;hSy9(wSLRLSk2<+W`sbA3w(wLQ!$1^e`+GEKx)QO=anNrQl zs8gxWl&@5O=5{=u_~=S?S*b$8J4eFBa!o^eu{`mC%xy?KkR0K)Mxp#tl5=YS+MDI6 zU(Vc$)OTJb#~U26N>!++?EH!zYe}r=lqs_*?+b>lIq@Wy&XGhk3TGRotFca;$zbLd ztpE0um)dm3N+%a{#{%Mb_~Wm8978k9eg2lr%~)B+rc3EW%{^zV$X4qR0O19#P>ktK zod4H(9`v;SXX`}Ei<*D3=_^fp8sE}bRsVzfhwI)}cSr4|n(x+(SHGp|2UWq!k5+uN z;syXy{v`V|GDh>tO)+?&aP10Z<|gZlWhIgv$jCU(D>%hi3D}3Qleu$pvc6fK`sIv_ z^vs!JtR=WiG0w+Y64zmhK`y1Hm<<^jUYc<*RM|<@$yx21T{~GRq*f{z(i`{ttr;0_ zntw3FMZj|Av-co%dUS%cj0(r-Eg2bzx;r^Zosg9V8!mJjItDwL;^$f(h7O|J&_VdM zI*3h~m*8aDkvvKzIx^=!HIBEa7UIR~66e#EAh|6ggI4#`6Iz4$TQuv*063?J$d$!J z-4JETnpz#bL@P2f&NU;Fsln1%cI^%Ce5xfW_X#*6HfLnO>z&Et)MhmbpA1AVK*kj3 zox!5VS{j#j?d}^L-Mw#D$G*W`{T+QH{rftGM+f^m26y%L?;6`ZGB`M@G+;xZ6yk`PHjep-QLDgD9$9#o&`;8$a^8;uw!G`W%HS~d~<%6U&51ob!Gskl>;gA z^>U>zdcZpuGE~3e*z2&eMcBk#wqKeu1s+h`%k}y~k*dt>M6v@{$-zEk?Suc&R*FIZ2TJw&Yj_Tj3zPTz@ z`Sr?k72mA5sJo549Xbyb24CXy&D8aN0!nNsyhcm_Xt8l4Xk}E0K|5r8m>l2dL^57i)P? zw%lZ8Mn;CdiEi$Kr5pBE_OUO2(-v34Wf2$bRT&xgnPJU_T0&^3fVoH;4pnwuI+T`a zVMBalMn-iWPLjR5ri)aAs(goAfF4KS)sT_#n+F(?@~p|0bd&sdV?yr$c)|g$q2T=oC;| zMye~Jgf?c3^tpR^-N^JXFVT;j7%d}9FjKQLnNe5UGKX+-V%({GFc=8=M-x%V_9_BG z$uMa!TiOMuLuqN6vvzCdKBUx5U-V5cMPtxAj_t+IwKQPHY#%vxYRAIht{n@zFko7$ zGb6L{?zswPELw~`nQ0D0q?C>^+1(txbSN#m72W!q2Q;Uq=Yl*G6tT0KZi^mT4+!81 zB(n%F*AvKUNV4}YS5F`-{QAgHiAu8RME3@(vx_u7#S1oG@C1?>jhF2SWUZ^4XqIFY zT+#kzmyP68QaIoVBoi%PBTpc`$VxijIGk3jU(t3lb2dAkk?EALl_!vujlCO`tkaTu zhf%2);{TcP|3dWm5$j&Tz@BAb{S53m2KMC)Y=D7%DFZvhzpeTacQ z$iUvuz@B1YPcpER4D3+`_6P$z!N4A7U=J~{_c5^J4D7=U>;VRLKLb0)z>YGoBMj_5 z26mW%y_bRA%fP;bf!)KvzLVqouKU{5o!#~IjT4D4A~d9|POV z!1ge(-3)9O1G|%f?POp(7})a+Y>^uV-VPL}y><$KYI|KW_I?g26-Kp{aE(`nrO`i97 z+8%BF>(;|9k2im=`M#!KY5Yp#ctftCy8fr@SJ#c!&egoT`uo*as(x4%t^8JHwBp+p zhvAhU_n%}-MrJtLNcT1w2?f02;-Des&srsr#dhB*-aia?_=jiU&OY4f?~E_VTl$+b zGUw58x}Ta65(IA3_(8>dBH#~3A&8c6tb=d?!fnm22`Z1*R>4sDT+YN$DZe?{Mpc1N zih6=wpvd#W@<3be-KQWP$}HTz_TMc`DVH-cThbDWFY*R3iiZc(;vdaCjJ4lFH{lwk z6r0+tPpAZvwV8Qj&_RzzV3gzTf8u;fW%6hyvQ$wNTWSpw;t7?&LPn-r+DO0gJsP+$ z7QRr_5zL>dMMFpsnQUouiX6HIycI-%yW(zOd7v#{sN*|@r3Esvb{+`E4<=@&rcQWg zW`gmF<5N>n{M+2a9dU??6AgMp0P{!UkYQ$OO3Xd-e=Xia$*zpd#k48O$#NztP$WIY zztkvNHhr|BPG)5GrcEiP6}4FA%H|8+g4a&uCA^7nJuu>0jb~ng18HNbgF2&1`b8~a z{`_O9lxU+wCWu~XTbW*IBM_JXTsG~im8_0>q^%Mz3k#WZD8sGvP=b(3wa^Rf1=}8J z3-0ccQCqiUWd10I8}~E>s|iIGMI>Tz#VdYl-Va{zm{0P8Hw2Nl;tu;T;RP+vQ3%F? z<7Y!grk5J0`$m*5*DkfvSS>v%#G5h!Y`{ZH;wDx$;Q$PKAWc9E3pqEimK_SNBjZPM zN0a3Ip_cMwTZ7{`#w?PaBXLIt#jJXn8UDc5A&WsNUKS+=CXkh>scZ{!* zS(kXHH1)tj04cX+W{~nQ-L2Nx&5i)u^GCxzGcJ^4@aS<`YDj5w#*383=z)0E42+}O zke&Oss}xd8%eApbGcQM)0eXlDOJhqOF3smooAYMrYQXZ>Ij05%in}T^jrHiJpDffJ zb`h3L?LzERQt@*wC*ypR+?shA(l|wT`LhV6xJ0;WB0}ldiBaAtOZBnL8DzSRE-=~J z?oDfdrY+sNcM<3R^`5w=?cvsMwNAFYv8A~=-t-Gi>l%N$;nNNM^*>Yh!MfJk*VKHw z=B3r?>Qz-|E1#%%8^D+KC)J&mVQeR_j#KwbhS#-uD6 z953&WM&@LR_pGQ_jpf3Iqr^@hIxp`K&V5&gaByA9$|$>gQx7j&X!fq`D7zqAt$?nt z6tMb3*+v{H!^sG>`f@lJeuO6iXF+EZT@;C|?e*8=v;vrn%*HQzqXCN>o#n6XlcR^= z{ATqZ-IA4YfCrKjRQje@sGhkigh$%qQi^h3m#s%R572d3j{YM<#o0yd3eggEpvM-F z*^aD?9{gZ(H&ukE12g8mjcFOk`EcN@*S9!!0XFWi*PMWOn;|<@+B;hAg?k-qvoeVA z2z^8BQugHW!!DOsO8~XZ%=Pi6tPCf7fbNy+QXVYVB6Mj{T*s2ovg9shWklhv^sM!2 z-{5vR-1bOYHtas3H((#@%gQ*ylk`Xv#{42@k>QvM6EX~|QZNqMmZC#3;RQWa8D7cy zapZk(R)!m%qfajc8b%(9&?3a4wT}|++u9lx#>>`h1tj z5)mQIDboqoGE^b0)HhMw8?zoom8|fAt_YbPVv(q|?S^B9939dv4c1b%+!5-?Jcbk> zqR*DF@W+CXv%}y7?A&I`#Aa}CgpNRbPs`gJ$v0;fkoEz3u!(6E|J-b284DcJC=~54 zNE9x!)rWz%o~N&M$YY` zDN9G3|8MlX)YG=HbzRG2&Hvrp()7~CUxicuuG*fOH`Lrv{o3kVtA4HWW0l<%uk(Bl zfaE{Po3b(%>^6F+PIGbY=_)df*q>=DcJE!&j$HwMtI+Yc;S_XJRz`JQ3c21A^+0BG<2%T(5Y>At&&~b*I_Ga7#Z6Sxpf<3ZEe%2@2l4Y%BX3*`-S_|n7`-GE< zORWnJwPmApaB8T|%0!^ubPo}HS!LSLlCV7|@VGH6lYcUHNyx+44$3e&F)bfgTzOt8 zPgdpx?YIhy2lWc=3>ZoMy1oGsA*@fe9HydE;dcBp4L9HAy|)wc<)Ol}!rycVboa8n zfnu}#8*d3ZKWuy!`$%(EW*}wk6sOgoRMrH!NI4d9cZ^mZ$XoFF$)j1BceMLwwo=-|*97Lky||p=pa*tLn%#)JddjQEO=}(K956ePgW+W-Ii*ic4-TT zqAWu8XN0aSCl7qhQW0}hSboFl0)e&)?99rh(c@r9dPPgt7;NqBo%8+~%XsWum~v z^Zx%IGwzSPhk<<;1N%+}_T3EZ?=rA|z`$l0*xzShe~*FvEe1Bvz~&g(ECc(i4D9bP zuy18xf181Q3j_Nm2KF}?*k5O0|1SgkMh5oR7}z&3uz$wDzMg^o6$bW~8Q5Q9U|+|; z{vreWe;C-;GO({;z&^pi{w4$aW(M|W7}%d?U|+?+{uBfI zN(S~P8Q8}e*sBa|ih)fsus^}TKE}X4%D_Iw!2S^f`-cqd`x)4GFtBfDV4q}Q(+up} z7})nR?*D&;@!h{=g#~G6Va+ zI?e=`=&ASrKPv41H+bIYX*=8c-qzb&Uftqp_BKA$u%-SDb)TzwXH6Bv{Xbp#{>q+; zMF3srKgkEPGA+pI6xk(gKis1q55pC_py2^yDx`Gzs)R4-Qhu2Ro~22AL1Rp{TC zRq>MS&&re{jQog@sVNciPk5u}N5J#e8w`V=d7*m4F{M}+Ru{Vwl<}grqNb9#B`cGB z4AJkeOK}AJz}M>jXeX%wX$cw5ddXE;naG0?)ZbDT=xhsN;XqUb_Z5;Pm&xH z+FAqSdPeDbT2b0+60Vg9t@Pt}X162b<3H6+RnMy~VF_m^tS-f=XHVsLy~+-t`O0 z1Ii&6LvY34IT?r*oEz=ih+DER!d@_u+)V8SroW2a*GAJ9%AvJALd`N;xU&q5Ra`L8 zNl8P>9aEZ0TlP*lUN`|197~{v4vgW#XcgY5CayH4TeF*y()Q#5YU7#Z!1}0nMV1e> zg%^8q%NLyfzFV?)AisY4eLZ9AZ}Kc6>4qrJ6kHvQduZm?S6sA^{^o15n~>-h`c)3= z=j@Ax^+|bRCfdzoTAcq^d8R#WBdr&k7n`OVKV1KJb#JR%SL>^JZS`~2p{g%d9j^!h zU}=9+4Oy9yK9D*~?LdyjMID}v32!(aj|OKT>RwE2=j?Lfys4F2`J;x&bqzthj*OiY z-e7PLvE}0FEM^K}yTn{`)ti;+={sIY-bN@lMRT~?E9`u#t&}lyx3{Z_-*whk&)nQ4 z!HW|-BYS%ccSP6`sN27m#Xu}_=7*IS!1EDyu;#DUwbi_Qrm8U>hLDF=fLxx{Q%gD1 zCxdf=$+&lJUW+i6K%0bwW8#R{ch0)K5lvXC1Y8M=0j@veg3^+`7f1SDdfGho`NKiq z0{TIgZtY^2w%L(TZFVmb>ZK?5f{p+Jlm?6#PF2@=^#&-e*v ze(4igJlJiIw1t~mt1a0*N(#rR6Orf|vZC4sDFSGTP{sx}*OBatk?8i+b}G@5Bpna6 z1OX>@!N%-m8L@a`5RVg4xWc?|QN?o`GI!6=SB4708ZtJI@H5tEXLbl{cC+a>xtEuLTGq5fexO?_3VeC&pi#|HUDD zLv}#6cXA`Oy`dm;nk%u`X<^#-HkZ8Ay6i4w6}VbKWmU+nt~v{hEx76)S~R&9dYpas z%7@@il z4$R?e&U=?2ol7I2gcZZhTrzR*cE!?>Eq}dqFc`+j!6KHJI2KxQmmCKd^ZaN785V?l zT&)Dwr+qM$3rqV;!i_~~3ul;RR0bB&ILqxE364_kjSd67CU zOs%`q!QPzg98FGmfzZyKZXWfvy6n#OVqM0P6jy`o~dvHye` zA=!|XS=fi@H*D?q&@{5rfV5)5p13_L)30|YLCHb8&WdM7kx4+qqxiX&g3%W3?S(6? z&O3MpM$k>&o|ReIw_Tke(=A2S_KZMNow&tomg!BSgS8+`nOJ`lUol63;jm%V0H7#T zL{2%8SzecCaPbYRgp%vCGFALIeIsDfw_cFcG;V3ER)W}gy;+$*{=utcbt){h`WP-6 zinMpMR1Ikw)(^{>#v=Xc>t;ww?$646_pu~-D=*IqlZ$gR5wMGj`~N}>B_uiQ_XkCo z0B;D_>+xBbHDW=CKWpDhE#U)NftuUF1=k%Qi-f628Vzf7pXNcI@k zV0WsHI{&Eszfc2e<3qS(w0sI(R5U3zWKonO12Y7rjzFBpVQBKjSWxJcAbKWrAPDfGL8M$M$ zd<>0Qsx~`;bcV0iP+J<#ap>$|oaA)}6+KQ%%V^E^c9JUED8VHxwq*`8P%w|GVEzVk zqd43m)MO8%BnFbOU7~Ff#vnGC-yiVXl;-w!afN8>k3?p(hmgp5`fXHkmCfJWH9h_~*~3ZA*u_y5bd`$+09#5J zg!&kyVgF`yCg&Fyi|iUSvAXnA=cmEAVi2&P#a2s4#_|UCsP)-#l=B$fIzI{DmJX$6 zAu8fUAZqX7rI1?L8uQPE>_KF%Dht{$-`kA!<&w1MVTh2FEH{IX(Cyh5W`08I% z_jK)dYtPiYvHGW~dMiHRnOmCq-|<%Ja0xAG;;MOs!XkiF`Nr@ zr;QRop2V)>kjCX>PgW*@I*^3jQADhgP_1Cx6v{&`N@}dY+N?|o zbs%{gxdO1H;USh#fl^Ry1(4W%S(zB>p=69o40cXnFpVQO-8xhxW8zC%vIVsW_PwE^ z*i|R*&OW3z{=?MyrQ||iB)oEHEk(zSB3eA<%f1xZ4m?iI z$E9pCC_T--+ZCeaW$a<$Qiccy%icH_ZH_G)XUE928kp2;ZZ5CJ*~&QBIZo1+?`t(r zCPs+)>i+D5DCYiGuBLVhB|{;N(o(h|2to!Ws!=~f8D|xXwe8GG824q=L(A`_KBZUC zTRt#tL8;FdnfokhG>r20!PQd8>E)dVUu4VIN;InFBa?8@G80dNbd?6!@*OlVDmq60 z#3}MX_5p0k4!RyzeWr9PnopPCf;fsSby4MueqybPIRD?^`JkuujV(u-e%Sc=hELW% zT|ZX$K<#^LZ?E~e>aSHFs(PaG>y`IZJPM%a?Vn^{R%XgLo;*$+T2_+~qybAnD#673 zd{lbK#l+6Yu4*Zd*EZULP-Mm%vVLCO2uKcQWvYx`x*Lp@$KlA?(nJ+N%dCXEj*%s@ z(@~&^u8D)7D=RZ;>`gwj6q%z|+;CFTi`oWTPCbzGuB=SH;iKoIuvUNkY#4Ow6G2eY zgwKwH`0}HaBJyYDYmBgI2> z-D@#LV`}${MT6_~INFRD56 zftcftO9>!>Suh(xW*sSpTUo(Lq4>Uwm5z9-Ui< zU0YK1*$_%&GDUW+wboEJx6v|&P#gh;2rp>ma-I68SnpFeXV0T7dan*GWsg#Jp;Ult zT33}&)Dq%mYD)GSWBgu_iKMNKVnN$BaGh~)^sLcSj$~hf((zp-YeCJ;jySMk=pFR> zFR!d+yr`9?ad3J58sF~A22rBZS0mK^CXDu|hb@v}X{#pnwg17=e0la9N|RwOCaFM6 z3U(=9_@67|#+nB_$2`w^+MZ~;+;*((&erd@ex&tHt?|a6Xgt|?SHlk*KHl(_hJ}X1 z4ej;cssB*@8|&xm-dFd!x^s0eu3J_6<=S`E{%q~bYx`>JYd%}^_L|454%Y0b@l-!k z{Y3TU>SNV+){oY2sC<3Z_p3fq^`@$L-Pf9%o1U$_vFg^!Z&p6t^p2)iRXkN0s=T*p zs={CKTvK($V8v@1KV8w>nDso{JlJ}$_12bewmc1Y5<)Haw%pkKT=P@SuW9!4lo0fo zkn39+*k%T{fq|`MU>h0ON(Q!$j$QXdI(B_E16xJMuKNxH`y&SSzZuy7VqpK7f&D%M z`#lEsyA15VGqB%cV86-0euIJiIs^N!4D8n!*nes2BFA9m#N_=a28ZVu*sn6MUtwVX zk%9d(1N$Wg_KOVcKQOS*GO%A@U_Z~mevX0tECc%=4D7cV*neYSKf}QOJp=o94D6>F z*uQ09KgGcQ4FmfO1N+wu>?ax6PcX0_XJG$|j$Plvz&0_k^|1e>#@1%UWnW*z;84N9 zdg$17KVV@0la5{A*7l6&vz2ED2fe!jyZe0|gMt3Rj=rw0!H(Ut@Hc;7cejy)YyB;Z z@7~P7-o(IeU|`oXuP_67!aH3Pefj$QXL2KJ*2?EmUK6L3PN&QTu} z_Wuo@6P~t{t$)3o>)%tqs_vDwU#vY;^BXlcSHHMwvGNm@ z_gDOt=j-r-_D^y{P9+gdZlUVHWctvD6JSq;8!95+3_9D0m@_?gU3@8|RtsZV3X*4X zGU4amR6mCsI#ZnV#?Bk|>f*a1f|x5z%gXk~j`sT@x;Z%e?dj|668~>Uy9%?lCmcwC zi%V!nJGyZAz*XsFB}vX#De7f>)Glo6 z6KyrzXe{Jp`q0fu@+DzWmJ&fR3H3nBLCFjyaA!_t>>Qy-+B_Wb`Z1)S2#6#i?}Epr zif(AK=^Y7}z+EwHlW$ozK0LSM<3UN^h*On=ItZfq0r{b<$1Ckh^ zhdyvzcbB(M?fuvlq9sFc5<-Ek$JAY%Hzm85H;w2UDdAqFi&TJ54Rs`0DZuU!nP&}5@@h1~=bKYnv=L8AR@+h?1eL0Wp zO{pbG1f9YHFt|&*h1pK)G(qK8Ce9og{B`t<5LH z=t;j-W6z6`ll9|7`---f=0M(*eH6(~EN#e4dM^Yfz#$J3r$DG;5xp*2qG!6HwG@Ya zVml}#nySlQL6Rd&cQP`ZY07#SS%6w<*UP;~`FTk%BN;rWGJ6?Cv6G&e#oD=!CxU?z z4TO)i)h-O!b=ga@L6+wGC*3VhM&ODb1U@dYb~=CrW_M*DL1w3xHu#QS2t=bne?V*# zz|ki-6NHQ{CHsu-jq+Tj|Nn%i?R;w*Z0*g>$C`ex@ym^)4Zm9dt94guAF3Iueo58c zmCc?ndnU9;e&a!MO-`nZVBE$UkHKw?ICxd79kZA|#R(?h2nC_XX)9^WFR43oGD}1+ zJ$=uS1V%WuGP6&8E&wf&mGF3TJF9edLbOixfAW$uxN(k;j!jL;e-#2_THL{=rjWY& zkIf(K=A2AY(SLO}byF}A10UK270%f8(Bp=7v}<^9S67FwXyXD*>ek%tSov7$G3szJZUw0G zsUI%R8#j(bRuM7z39SeC=!;X-co;-wpLUk;fu)H^(1}E0Z*7!_8{6sr-Ms_eT?1Vm zT>%hLU)R7u$Kb%gOvmg%Pfxes+w1pxyVd2U)a|+3P(BHI>}#X2^71KkpQQ?@@P!qX zP*?A+k*}@dV6|121k3kItKUm508%Q>**cc-D5~-L+)0TP$WgZ>`s@^ zn22*3KD$)$sMl9iHe&+J-oU28RwVc$)!AATYGbD>BJ)f?$0{0+?CSgZ_V9| z^&h9}vEA$AuG=q-)z;fh+n>BOcN0=QKo4`}UcA!t+q-N@sFtYJByeAD1M-_lEg=ZM zHFBan3KXlY3lZtv(OQ-zR;h6j_d(n^{d>d<+)W5_&>S<^4R zgGUSqkuy942S137X>#w&twrwr^msdpmpI;*W^P09c^j`EcH=#hyAgR0q{v~V1#i<_ zY2<&lk2_b0mie_h;}q;Mdva^AmZy_vs0)JHM##Ol=v884Wo&GWb-`Y1(kpr?NV`K( z88~oP=Wf6X?4?IT5^YfQvEqeH3)2!616hy~=l>f$yF6_#YyCLH|Ial4pxN8>$;N+c z_;AD4`d8H*sClmX->aJ||GjdtBJ24x0OFryeNHA@>8B?-!)(YR9#Sxz2pkQgV%siy zH-xqV1wGJgPNrBHNFAm23oOYxRTod`t`IF7(fd1>lQ*NpLV!%L1C8fo%9QP?O{|*g zmM#2p;o-Hb9Tud<8z{0wWfpTX0SF@*oNN*_u{yOwwny4}m`v&9SHv$)WJH^2s&IO%_vYqAwxgMOLw$M-W_z^Ii zYX*>d@;nj?4x~t~TUC^N@e!3~uI+Dqa@{Mcba~Q&!R!~E__MWbQxE03u*zp1CmY(# z&q1bB`;jUpymi1jDf3d5fa!aJyo`gU1|j~gCT zgCGJU(r;={ZYPTO_*EZuYBu?}i5D;FG6X9x_3mhCY;V6~?1DFx0MoWmu_Xd`+|z!? zwVHj*DriJn`nk1#CU41gq5yZ(lSINz&GUh%5m*Uhu|%A5imO6%12bayyXW9(ryWS+02u&KX6R%$lZm^9!!$W zT}o#Rrdjw7xH$PCB5ZIr7=X+|bMxS{jHX(LI|}U`E%U-bXJc+F@?}JmS5g8WE0G1} zNF*Fs00jb&cHPO8Lu)x2jr~~eMaZxt*~DyX@QzD>|MLZh9bPdqpO$5iY|L#z3Ip^c zItRhlZhBmW{cbK-t`IGmLX+K|yA#l)wGaBux@)i>6?y!HdN$7 zRZb?08NW&ntZ6P3#^#H&qqSkRGA~*Nr>6XoIBYJbreb3C>gnw6?Ca`<085S~PHZ=E zeT&OjEw&X7H>W#I`j(BCZ9|$&Rv_IZitUM1{7}mIMXkE_T9?M^E1Uo)gm7Ga5{dTZWcHfLBw3NDDSSBUI~R;YY{*2^ zF>w=KC`Z})apc{QlR0k&=*rk5;P!?d@=*x)74~Ct!5O<;T_IX-#ttBw8)@)VRGivG zc8NF@pBtI?&BH|6#s zu>3EHwxyej(@!?Dx(@gFf{SMb(vIdAycp z(X`%v*TUegZI%Odd)W|#rstu#{%O?Cif6m5m=Pz^e5=zMw61gb5tti62Q6gKX%~V` zFEpRqgYrF^B42(1i-;MhTa3ii>fDR5&YRfg2~bJ8R1SBB+FD%KK7#eObid9LrU~1I_OaX$ z%48ee=N!wDH=n@x;UX9FnO-(g@a*w@Qh=p)4i;HR-y0Z?p2fT# zZmr}7(-LdnITxD|>MzhboV#agWi`B(>yWCH&cH%o>JD5cUY6U9Qs_vLlSQBu)HI?o z6j`2X>%5{J)xC~b!(eVucC{2)myb0>^O~l9=CkWlJ9E<2Ox4I&RJO5x-g5-v|B1+a zA|hYYR8w{1ryH{}{$Ep9%>!-EIAa6qBJ(v5dY-Ll7E$~}JU@jm5c>O!^#+AG^~tWM#IYZX*8^ipGL#V7)>;+jL}5H$~bZ~ ztc)W^!^)U`G^~t8L&M6rRy3@Py+^~!*n2drj6q1l${2(+tc*cO!^*ggG^~sZM8d9? z@hfRq8S{vSm9ZmfSQ$H#hLv$KX;>L|iH22imjeF5zFB|2x1%o*0AKLF!QCCZ{eFK( zx8L8lYj$?`z-;&KwK7%}?YlDG5DhEi4biYN-VhBd;|@pfw#*3w4Wz1R{ww@s~2nSQ~u1eZ>M;YH8VPN+$ zu)_@Oy$tML2KFTk>>dX8#SH8aVrenl?qFayF|h3n>_!Imb_Vt~i6zbJoVbFwGB`Yc zV&sv=@hTZNmxlcplmiVb<0#XxGHxynE92(Uurh8g4J+g3(y%gaE)6T==F+e-ZY~Wg zG9p5&V{@Bd|kVGeY@dCWe@BTclic8ygmIhuv-kw4EE0S_0Rge zt7LrJAPFmD)&~3gX9fm*ecc_q2l~Z5#9kllJ^N=n`U8XA{j=TuJ^j0SR((p?|JQl0 zc-ro3eQV1{nxAQIYl=61wecklKV9EYm#Y2O+Wj?uShJ@3Qq`BMj#d74#eY{k2;i0a zlYAg26BqAHk=-M}l_jc-cHqo28+6=nEP7m0-?9vs{hd+i0^~yyopHET0znG{ov(;R z!l*^sl#_{!k0!}}PlnFgR=-3PV<8Ijk3(x%7Ot(kXz+JyhOcsLgXv9Yg)_W%hTMNlPQTAL8(Bu8=PI7@W#Os3%UBBb%MTNT=~qo z-ZP}UQJ(6moJ>f(hknUN8hs8!?}-`qXwV}1&e`RtLun}$ypY!9WH#cxbjzM(b0iQS zfs6CV##Lron3fgX!0+tt!4Yy}PNp3mrqhBu`QAh*UY3_0SCW{Fq1m33d3whgzP^%| za?p(7-OX2k{a+@rwKt^Vron3Y4c&eB&d$4c-hDU9t|=!o(C((Yxs8RzxHTjLu7Kk( zX*s48cZ`;kWga<=Ds#p>Vk>HFZYJOtk@1wnM>%S)`0_MY=kAvl9Qxq2(Ns}QHK|JTs?4nf_bf}9Tp2HFi5HBo z>T7U|^}JXmU5%~|45qhx1S0O5hF8;YYka1V;0!K1!%&9m+0Y4bKii-11%yvAcoGR? zZrq9(52LsC$*8vwRaShcz|W`xj_B^(B+7p}xrgc~B5q78;TJv%F$2NhAqr99LW`=_ zj!;VE*R--X$NiSv2{oYT-YrKGkbq9EW)qQc5Uy~5WA=&hQTr@8t%GSv30Fw5T0#7t z9cr=Ka{-nclx{=rI1**}NR7<}Rii?NP$Ryaoun&7OVE_s`rI)j(@nqYV!33dgl1<_ z{9H?;q@0FxN0Hj`;0G%zm%7DS@bpUddz!#2D$Y*x$+>qa`cM)yp_wOih)jEyiK+;*8Vj^ZL$Vh{ELkxe2WI&eXt? z>RqPF;_)@EE%YEUMRuyHnTM(N++nQQ7(JriDEeBDgo48KE~gvwtYYtwrI6bCf@`me zDFuGqIK}kj4k5>(B-w31ZN?m@6UUxR1JW`xZU4qV7ZJ^dU~)8$Y@LULGa|B+U@g!8 z@AkBLTR+zFg_iE-txanh7aG3a@Ur?p2Mxga+NWz@RO7AAR&T9(vhqC@e_OH7^X`>8 z{x9o0$(o!@eUnVEegc@uTiO*{IdF;f-=c`N}e zP3q-2nTvf3-QOIv4jT6)>l1CU;34E|mySrwn)L{=Z$R;YmMw3 zVA=)o{Hb#yClkbPN>)*;3{_R0W%h~|e%Dq{URS|RUXhcD;CopqzD4LJ(7qVm+u?%; z44eQh6(rG}GqSyt@3aVgAgtT7;#?pVc9SC5Xt9@8380pgSmDKca6xrn*t_V3^_W6N7C{kj&dL1mWAqy)mST@ZKsC5XAy|Yg$8jD%ZP2_qClj-e zCCLFq6-`*cg&fCVicQ3Y7Dp>bSEQDvcYa=o5`}nAPNqr^B*}iArP!Sg#?M6(KpD=) zBCn0J!(!)fW$S#C#C}aqrZQ)!I4xa(AlPF0Yk66w&E}lU2R=ks(@h@%egB1k>W@14 zxr4Nnj4oK4lNq)9ljNI{c0O>*n++~F8q-EbBD73k^kR2gpF68|^qZ+GnNp}scp==3 zJSU8Yg;u8c*is6qWo8`D;X3IoQaf~&oC!ejQA-S*aKSJ&8n_^s6)!bqz*>UKK2Vn1 zT19OpEq~yGY0XO2<^r<0=&@Ygs!11!fqcG5!#s-Ko%5@XOP(ink|>_VOChzAKxKfv z?M$}kb3SC-n<59zQyh$urR~2~fR@`e@3VfG0L*ThY|G8a>e8=@IjXB|6QjBUpsg-8 zg`LtZIWJNgPj017bi#fBaVeEP6BX%Fqb3H0Lpx9!t0ihocH;cM*7Gq>+rw?1)_Yst z*>Xd(uj#3#)s3?aZ)>QnKU?>7U0dz_HTP8iT-7sG4^&nF^m+UzwKFd>lJ#Dt9|_UI zDMS6pW4S}Z)5QR-SPhMSd%IAFdZQxXqzX`Eu{5YQ!+0d~i`b|qBhENR7QA8THz0v| zkwz-)!&mh<+iGNSBQW0(3vp^PFVmcjJx-@e1LJ<`g}7}LrAyiCOAOAb?~ z9EedAA2|p2$&@&S^{co~x|kXnFP101EiY5GF|rn^qp~~Si9p;7Nxr;xX_8(kOE$G3 zFLSnyUnSrCRWmvS_t=*R`$GZ0QcuS~>hq3ir!-bePb|3bwX@)s(~dLC@}iCy=|zf^ z%1{TmLvE`?=e(!|?(X~ZGK(Ce2dX{$B#yunfeVoMCK4Wp|2G?n&Y=sGH{|Mr!gx_D zHFM~6=VeYgh85PBosY;ot;Qr0JM0agO+Zen;dne6oPqV+-V4dEl_$M1FH_Dj0z(<4 ztLbY|Nwy4E9lAWlTkyK_|LA z#oc+CpYAL@kc3l$Zexkax8$qk$#2ccbaV^{J|}rGnelq5+Zzc)y+AXl8)hZ<&>&eH>1I`=cxU*7+;>|_MA)?_aNQfp_r!7sHi|x0WOZt2>_}n3hyIhY4$WD$Ptdw}A1AZX+k)ITD$SLoA1)Xi4%{EjM$A z(UiN00^37xJB_v2VNTPbw3Nh7O`QMNd;ZSTcA)jmt(#hYqouVu-gK(*Ee&65n5+L{ z-8bqUto?HBnVOH*^i;pDx&h(E9uGQW_&)F{pav0UJ(rr_Ti- zAgWK8G40*63|K35(=9vY$;)(mS5jn;zu^$1HwyTrHpsLMfWPtN;@k`bcURtkR+UjC z+>>cTR$g5I=Tp}85&2VRqMb_db1e&F$&Kc3V#Xu{ zeH*mDs~%4MUbfKW4SAV#tebxS3ky99S2WDygT3y>&$ToZwB7P8>>-i7Odd8ww+Gn= zfo70tKw5s-zC+U@)32a99tML4Y8PP~f-2Inmx;+a2A-YvhR%a@w3q(zaJ^7-l zHx3CkUhDEQBN=0}tU8$*lp-R!@4US!+z{Hz8XfU+Ugj6uMt7o8^>I~v*`H}k7dNh? z6MSD@<_X(N_fSQ*YEh5~#%AoFi}&hUn3k1LEJEizACJr%sfe*psPNRHNHb!8M_y+B zdWasVT}E|8TKHLvB`52Ffj)(i092TcM#bDhWna?P$!O=)EqR&gYxwF;ssdhLs-2@A zr=_)gl`ux5HdMjLK*bN0A^L<|&1?+rk8Lp>*X38^5om;-x!rJ)h9Ox{1b`wRV(QuD zQv#?J(CFB{QwMN*Y{{=eW-!)I;I! zJ|=Qf9E$|Qj$NYtnYMIk#SVppNUr2tk->KQoFz&D4Ty+&SS$(0!;&1ZN$$wEAc5U< zz2~$jBxcwQ#cWl)J9Wos>Bv1QUMUbCH@+>-GRU$&-;6971`n_+qnTe_1Qj!qG60J4 z1crlxsnXuX882$U-9b{k!7}#A5Y(E3r$H4Y7 zussZHHv`+n!0u#VI~mvx26hJnyPbi(n}OZNz~05cZe?I!#K3N0VDDsLH#4v@J}7N2 zk?}!kSQ#IbhL!O_X;>K_l!le@L1|bS^OJ^^F+XY8n;C6!ld%7{iuiwfT0hnL%Ep5Y z->u2kY_2|1b)_;_*;(=Po*%7Xyg%or;jz5TNsZdAKrJOozseKgst>n6)2coo^TS|g z_paTjw`t1Dyv-O#i$%duhL@t^z?7mSHT1XUWftTCag&ur2du)v=NAnhy*+k?krIp@ zq9s$LE|xiigt#u}WftU)WDS$vk%%7xCBgkNS7zo@Eh!md<8WT)I37wtYFn0gAofKx zo|xC%L{|cGg0yTjBAS{y5Q&@(1*WD(&Ve=${tFje;c_v0FHcSF+6|VN-oD)fo!wos zxhL{674f#zc4mF{!5v5lV&N)H^^DKnbn<2-g);M~;BY#gm$`>KQegOCH4v(7wN)~o z{x~XClb0Ecd&Q+$ex*uH5Lhn-&{j=|SV;F(`|~nk@s`)rc(w&qt z(>>7Dy#xNIr+^K^)p9?$0&Fk*6o^J6kauxD5{=(84?|>LWuz2k;b-~^SU*~K?m2m4 zcw}to#Mt4n;mI)(#%AQ`iLv2h$1H#Cp6;@~Hj_AO;pY#)zwZ$x3VVJ5Hw$I~Zzy;+ zd`~~bqugQ0AOdc?bHPUf7SfSK{2tW*p9sJ!F&Nf`;6GqootipvY(!)*3q;XkX?`l2 zfZKY3_zGobIvIc)9oSzWV{9Cz6kj_=v5N&`#?Qb6ifjkt1g1<62j>!VkUAMmF~XhA zFCNA^6)T9LViJY95kj)v11?*I-$ZLbT}69YgqeV3jUWy%))$ce0EC;H3x*-FbkJ82 zTR|wkmW^I|P+CoGAy5I|-_c=TWCqf~ZJJgpi4~G{=j-5K1 z--;eF-5xQIP@>u6cWrgFfALlK=_j zj^@lXDkixX=B4NLyi~4@uFI^1Bv^A&IojX^tG>sZk?^}}KAOmHG3FzfJC-&dS-usV3p) zLkauuwC&3hgzKA8fD@slJ9fbvO2DmSzj8ejTuyjrW`gmF`%|JZzE(@^7k>pxn*ukO{gpQ^2? z*;W1Ks{g8*t^8Q!iz-Gv8RsGXy8S!3HZSvYV}fGZK3uwism3(@<>BAX+qNZuPWj&t z?SMVO@S#Y)EH4vqkELKir4cI}$%QYs$qf8XHHSK99T2IdCiYoNjKXKxli+p=JNljZ z5$x#4MM!j74Z)ona;JJjBBi#~vs$`x7T2>pUR&D&&l~eH5jcjFr}3on)8h!d*5qXt z@G;?BPvhmt?u~txl%Cv%)N;dSZO_Y;-+M&N>7~;u_6Kz%FHl-Krea1p7S5Yj$yeuP z_V2wSW;>0e9L(k?aa}^G$jMeXrHR>73)8YRNBp6@%=*2UJk28|4nN|gBkqRA_AQ=< zhzmY%)IU56XDCzsB97>A-$OS`alcW%Ium)BWcyMQ0xNQ4tf3;Kek`*-`j3>aP0oC+v2IsvT4Z`J$0nWHv5TE1lP=2(_oiiybRnCCDWCg-7x-Q}@;+B$lMLw@rs(9~8Dn z+E&JM2Ckl`@&mXjI*=l-O!jS`xk4R@oQOo+O(UvTI-pv1%iZ*0#U}E*uwp|gh-gg{ ztEOUh0c$|o%B;jL7Atfn-;WjAomzrfO-u^=L5o(rWwqDGz+BVnSe4Db*gQ;GSix2K zKG|Z)jZ14W^8`|=#Y~X4il9w3Io0QTkyE$0ORtwTBYK;34MWUYgwLa8%lImAsKOcpPDk4 zV!1dZ=7qT=;Fn5k^M+k)rKj+sf??qsnLOu>&aYTW=7Opg!fU&v%I%ljz8g25u3d?0 zb+zdYuX#09p@ma??Alk<(GS6F6Np0i!@#vKSq-Ieh_)CH&ISX~>sU5kq&qr08-hD- zn2|TjJ4so(jH!$^3AztYU=)AEa44J#uNTv1lUMLtCg1e zsS_@ag5maLaIQobSdL6MoYaJ+p|srnSn+yaJfAG5rl$LbRm^GvyB@9YTK)sxxzLJs zHdsj2bNF>ua7^@_Qfu^x`pRb=BvvUWCIzR1lk)@ffZfFs^QMvaiQQN*zgHCden z<|`^BwV|<;Y56N|44lQ6d#rhY>oVmcsOEg{(QhkF09~4IMz(V}mmn}3?;71CnLqWjTX+ltwftr*I z21eGj>#*w=bGzDHEpaY#4@JR3`7uRB-w;<{B30q|Y5KU@3q+P>QQn$Om}z2@SNV+ zR(-#Iw0=WnsOlqCZ>ow{9jyCW-TUfZSMglsH!Gj6e0}4|#=9zBQ+aRYjSWAn@K-$5 z@bQYlhPPBSH!OIbZ60hr*m`TrH(Q==d3{T$<=&PXo1bfbs`)j|{+b<)KT#ZMz=%^o z6&T)y2vBYotp5iF_6rQ`=NQ<(XJ9|Yz|Zjlf5E_hn1THO1N$@s`+f%Y&luQ0WnkaO!2SsX`wa&6j~Upf7})nPuz$qB zzMFx47X$l;4D25;u7RT?Y2w z8QAYIu-|52|BZqD76bc52KMU=?7uRwUt?hZg@OHN2KJvA*ykA7uQIS-VPOA}f&DTA z`y~c8&A`5mfqjC3{T&AOt#B@VJ8_QsFUEI&$iV)9f&EY6|9_L`E1tGii2mQ$^xdY3 z#*Z})HT-fzYyIo%x77V^-LBfFYWLJURda9k2dht3{Z`fX%HOEG5pn>0g?a*iKH!q8 z^DjeZi(Zj>ndbiix;D%dF1-RL#>*7`(Sv@uo|^Y>%PnCFpJ*-`6#X=l-vtJG!7el&kdl}+{_6K%{Mo33o4p)co8DzU>dLaV%CXe;*Zvp%5}e=$Fa#c!q$NW3q70^<+ZC2x74 zEgU=>MZf~6_(J}Kl03P;2?xPp5pDqP;yXNjZI862izo$9^uzh%IJh>^2N&MgFP?>@ z3m4ux)HzX(K|}y3b3T7e4(P|I&1_6Rb|D+TYU@~-Lt^=(DB+FC3T~N>$=)bbMG3g0 z*j2PpYO*?i1dH89_gS?~t&Xzo&$QLX8E41{7ytrKZpu#}kE0@a1Z`v~bNWGux-H^e zV+3i@vkc3fgIZa*maQ@MCEN0ck>o%U5}?vZo}QSzZxS{K!l&AFX}5P0SBRF(eclV+ zNldmUC!|BjXiJhjAz6#l6VaA``aV?~QG9Ys{yr>!l73Cn^aGL}Cb)4r=#A|Q1j2Ho z7x3F@5nj-;HJUE9DnE`y4_zfM9U}?Y56=-Vs+9q22^QU;S&pOC1?gNSxpX4)PE&e@ z+Z9aeGG}dSP5vOtWa28MqM~(Y`DyBkq6@v zyUK7q9GgD^`O(2$3jz|Uwbhkad3;HxBHGZEWKTYZJiYW=*>2@Zy?}XpgUr|cy;8iD zbfe3cuDE4|I~O8bC%zQRPD8p6FJHQ$kh_%Z-L$w>bnlhojnch4KaZ?WiyXSNF{DaY zW5wJC69ioPl~PD^LrWcoP$;j@sA{>tREn|a zGN}#uS0LZ5W}O1U7)40T6RUd{H1%(8%fE;e=XZOh!P2lweTQy zRKl{?yOIy0Y{pU%>Sz+-7r{M0b|0j(Rj%Was5$`JB~uD{J>+6IwhOipmNpO$L?L#R z_?M7?yfl16{u~NmFa6T+hzS3=KN1ygz_XBw_!PvI#J|{UuZ3x=Zk+_qA}huupjL_# zfrk^pXy9&>wA|QE!FHB7xF$VdNW{A%ccV8&tJMYj27Ck1g2OnriAJ;n4~2Me(ArQe45k z*Qxw8R<@TO;>}>7t)dIyx>rn`|8MnVMf|@Hx8Brpq4^m&|3B3<-uQIm=7xvszgi!z z`%K+Q@tb*%C;mD3f^R-Awruj8NO9Z$-oX+1eq%oY$s%Y zR+^L$#^RGQd*~K=fF9$ZT5KV-KG7CkFy=&`l!-%c;j9)Bf5KO^Qs9r;5^W~YN1v2= zK({ic=2$E+HxpVs8H_t!OpF-aYx6t84{9GjJ znDo_;v_j{eY`}fbEtjZ0+x1kde$fL*ko4g@KH3%Ri=MhvBp-mnmV=5m9R(#wnb@ogoz+549|0 z=8rPb^@YKtBL657?4U2Yr4MG#r&@|;jtKCPxq=*SqC2b{iHLIS?IwTImM5~T3}KcP zsCO)X85h7UWLF?nufu^0fsnmi>l1D1a$31Pe+g^KP|zHP16fQQzf8?C^kt=Q?wRhg zQz--1vg?6~PbT%cJ^#o`GVGr2rZWVvmSH#OktM^8`9;N$?B7#LERbe`!%$_*adCwb zi-+_xOYX=oAjJpi_7O8=fUTWv#?v0BENSm(MJiPD(&n@ye{se6hC+P4_zr<@RsI6< z?Wb>-rVIM^aZtwxE(8M??d|S{&~g!z`wRE~d;7hZXLp0l?Mk{|wn64=rD412_c1oe zT&cA0$~>hstjyO+!^*s$G_1_QO2f(=tTe35jY-4GT&Xmy%#}*R%3P^5>`e7c*fk972m`yCfnCMGwlT1+3~UPn z+swc=F|dscYy$&Z&%o9(u(b>LR_1%BwM7TxyW1GpyBOF}`u+b66O8X3W?&C7 zu=g>r;|%OU2KE30yPts_V_1ZWdtU+{*Hzs;`=-&z@$T4(Wjn(0GP3r?!r0nu zE4D1#vSTNiL>bLI*@H(j$}F-JJIfn|u(x3;O-pD4g%(<17STfaSVJh30!=Avp)`dQ z(yx>PrEQ=TzH^uN=Dj!X&fF_2PUvUxBbMI%-*^A_-23iw?z!g(VEYBI2L!PD1+Xs@ z!0r>kzEl9)CxG26fbA8)_6T6R`LXMMDS&-Z+^2`*aL)Vx>re34ZT)cp?3e)d7&`x7 z4_E9O(t)oBZmEBN{bv8`>)u=E_MP*7(c9#Cv!~9Ta(&me*ZCP|(D5e6O8X_-!!|!; z_+Rpq^W;fz?;|Ene}6Oz0q&BCuo5|FJef^JB*T$r4KPzVvz#u5wMLTYcYN#R zAU)kVn2duBAJPR~%+v7V{0HW6d`5Lrt%mbWZ3?rJ%F&^GPkuX5hUL!jo*hmc%R%g>n=tYRoKlbwVR@#jM!)C=y< zH{qt(!GDLcT)K(T26;CyMrllTlmb3)TARNKGZ>V&@pgvc1Pbo19;6~eFU3=>UQktl zOm3?Ep}aOv;=Kwm8%)m3_`wDECniIa7pdYI^yo zkC|oS828XmqK~UMlwq9OUfVGJ^^EYB*?ecZJ-<`%vQ=zCQ zWCEy7q&|NGCep`mU|pVW#!@gNDK~BOWEh~@gqrf3Fd>1i4i`P7M6@D)%&8>Hw2mV~ zZK7-P8%6t;&hAGsu_MEPL3&zqB0aD+u}%5wF|i{ucL1&lLP8zX>4-r++T3a&R~^hG z2nU{c&e@XRfcXhHTp$f*D7RMoR)I4)ssq`b`SqA&JOAxudc2A(o`>fm@odyM?U(?V zMEbOAh&?-Z_GwLF(cd^-O+dfw+_`6Ga~2%ulizlt%O~X5bUZs3g^n0QC)s5W+X6o7@F9Wk2!|PW>)E@>+@?c zo&Ee)fQF*Vp{(>0V#1iDP)HbhI}MAwC~tlxrnZMaqBXVgV$B^D$xJHRFBp+Q`~NkTW0t^|16%8p z{wMsK>Tm zaV{G^XIS2U?M@S1$Nz36IoV|3?(C3q7b^!wkxifhiPqcx%X$NZ0%L zFBd2(QzJcn=VYO3Q@Sos0$%SISYuL6t&x(s#3}__lhl2A67hNu|IP7=QuOkvNM>@t zU(d>X3*8fNM@d(ed`7A0i7;VILRzKr9?Ytbe@_Q9HH3qUm3L0CQib~#dQJ=wlM&j^ zjh!6sKYkp{$+5h)=9@9I6Z|(>CybjpF!Wc5n31fFXYy58?#Krz%Rb&Qk?zT1G)ODt zRNiJRYvY+L%TmQ6-IL#q$)4d~G?YbD-jQ-kwMrIV%FX#*nDQO`?x*2sw0t@`JV!cf zP2DwLCMIq5i^|=c--#JtSm6H7S;w^c^F_ETXr@CG%*?F83vlL(_W$cFw^|xxIR8Ib z|Ht)f{ZifEf&ah9yx;VE#dEXU>bl$cN#}aU1NLv*zG^#aeaP}Z0I%^QZ_5+c)O+L; zyx*j<6d8vgo8ZC4c;T-inJL9fUA-McL%joC!GWHx&S1x2=RmN3sHZd7)79SDHQYPc z(=#+kygJzP#DR4?|5>MjN9BR134lqJsxgN0#F6zq{L%t_CplV?Qse-iUI$D=4D}cs zg^nfS^CJmRuU!P!9wzG^@%+q6sNWr2vLtS?cknMdu;+qvP>FbWHfcE2)~7Mcr~a1| zG#X}ej{FHc0vyV5Uk<0S!xGgD!K4D$zx&R_66l|!vB^|8HIFCirabWkF0lC^ zD+l7onKpyE5gCu1m!`u8o*WsNv{eai%oA7PBm5_8Cgq|7B3_OfY;AfsMW=idIa{8% zH}76>^O7ZPiq5lYw59>VB(tpTs8JW4Os3=W39Yw7MQsG!bxpP}PaK+e%G{=nsB*~j z3n)s6=}UUda6#P+!IZ%SdRI0h9ZSOa8cQR81!ye-Gxm&>%FIK^1BhpiLaIllez2pQ zPshMRNn9G2aFh)&kRz_g`}rLdf)4y}G7YYpaUD`4Q~k4Hh}I4(B7H|=9Ww52=V0Z8E!2!B4SdkyZg!hT8WQog*>FH#GZ@SW=n54_A>-G5o z%xPHYuoJuCK%DrOB1R+!w?Muha}#iWqn)@lD++y&V}LjqHRTUrMgr@%{`kf4d>TfE zW1uol#Uik%&Q5{jrjZ2Vhd)+5JB|!Yrpjn?IlmwC+|KU?fJ{)-v`o)Pm&7caE>6*> zNzVU2W@)$-_+ns3{e%7=`cKxK^!>K?+g`7y%e}$*E5{ccefD?TowlU)yVlz+AFHwT zzpBad`aJP(+%32BPV_`Xiv8MXG7-BV88)7#5T-O?^AJs5Oz);j!hPM;q|BKo{)M~w zl?(cU!F_S%d6g-I$qkRbo;>mM+sz+;L0?K06DCED6v8B;2xVoSc=z4MA2UeLrL532 z>-h?uGK$HFHXD}E=Dgz3cfVLSQnkia`jHXCWTY{uQah7s`PGn@@HioG#&lauibsdC zDR4lGd^r(6XK-OfFE|#8NmCiQz~dS51l-C$A*rh|rJ)Qv;>vU;4RG|>IC%W@?zx_> z-E&>oHBqiPPaFjATeyw49Z4`a5E0corb%}*@M58u?3Q))ukO)|${rfwsDhn#cTkb2 z-6MdF5^-#Nr8Y`Qw8StKovDqI7JhYP$Q2AKqq9*WPL{9OMoC*&{ikPc)1<|}5V9c_ z8kHfTG{ONJCF1+}d9qQ`ia;+iIIaWTAD^X@_AN|7s-xM7Jn``SeAy^z*$C9hXfLCE zP3=l`=1JV+<+D-JmTy*#vZar~xJjF_Hu3H}iH*FBHcDCo)tO(J%rECj^kfkmB`vqg zH6Kwa)6o?rGv&9e(~d^zq|QJ}*t{w>O6&6^WV66NRUbQzZtG2FlWIt&RB*5bywD5e zNepN4eJVDathG-yf|!iTyZWX)3GUn~kMk~BsIdunPc~PJRHid|C@PUwMI{ntszkQr z&*BAWP#)tYIyfCYJ%SG==Q5Sr8)NEnklc|cfuK9(GrT0hPysdTDG6+9kekX%qGpJi zWK|^-TcXxHi5)HAwp3xM95U<2F=Hx|B+(e7FXEd2Kh^)=s|EZfyix%B3IS|R0DHdx zc0m9;CxCrW0Q-Odc18euNdSAV0CrvgJ0*b42w>9!*pvYF9s%sM05&dwy&!;nxd1jM zfITmOJtu(uZ2_z#fQ<@ZBLdh-0c=$8Tmbv~0@&XZz`jiY`XPi$u{f=Ahe{R3Qma+cKDnq8L z|05qOkSI%=bKSfO9->FAaG9n)W@}0IhC3Q#V8<>KwsYI)5#obj z90hii1_cm4zoJRZdhJAtpSc1F#k8H@*&jGqA!S!;sC7xqf?He2y|ShP3C1K~n==7s za`EImy2^>PxtY^5D99&{+&CMKgKsQjkRgr?OrAqv287kc>kA}S(+Iz{LiKX>%~c)C zq(_9fAy1+*9a$1LWQK{Xa^c{c;rv2F&J4_ChXvP`ClQ&(_?5+)@<>}N){?}QBV&k9 zSQE}9sD7KxP=B~aiLVA@)*X2g!|67eJJ6Me23SWbZ{wz3B@YLGX->kt8}gU2YQA6G z!QCKGzAy$svK7h(!w2PJYbB1!4^z51Pl7}Z%iO_%>41#CbA=7+d6ieJsv()Q*v&qY zC*h(bncw+nc{n0uOd8UhyQag`%*j!gXguCLP0fn2;O%)5S*n#k78<=}j*O(KxvhSf zs!V4RQ%}>k=SlRa)BJ{c8p%|aNY4cI#CUSlrs~L(z)?H+?W9S|nK!ULjahuTJ3mF^y!k91K6dfXB(wx`2^bQY9LgdnlbOqB zFqbVdcf4XEaMmb+p4Vo8vKZ;4B5T3NOxfv<4cmQUf*H}D(N!Tq<2RV{hO zEVIU9R9=z42eS~cdxxq*%w$P58dt7)>pxW%ipjKmLcTgbgE{r{ch89m#}Kr9!vz91 zj)RvspTxYnWqyBm_>$`Q{Pbip4guV-;3_Cdli70y2$PLE-rDjBOlA-Nun!0GQ?YZ| z6kh*ScHxR-CJ9_AI{8df7Tg|WC&p5-b1~#Z9Zuh;lBsEZzo|%OvM2}smi_rSrqRnk zqO0ZTs?Fe{!!QYz#j-ws0rL^|+Nj86D3%7}g!#%wB4eKkjLC|cJvUN=Y_$L1V41Wu zYz|D-zqP*6|NH(mb#Ja)<9mzu-@LbZKIgf`{a)99xFqKn9N%@k-2V6W-L_X-ziqu9 zvT**$9R=decbtDOpj3!duRl$#e)?09^RbK+soeN-WME2!nlfo$jyv;#0&)5~Esyf5 z8aQYu-Z0|xaLY~KzeIC0Yg8UPw-<;%;3G2kxn zSvc-lQw8F~HCot1?KOlLEH z9~+EI;RNdE`T<3K%q+A#AdsDOGkVEUxNzS;2^Z|)0)BI5j$EnVRtR8LC;0uXu!h32 z`xQOi+IVI?l(xKFsK+d~@$Y8FQ9a>uTZJ-2lfW!@=jlWgd(eyGvysaM|5A&u*pMs5 zLjrH{_ZRAL@lE`3IFwQw-< zyaeV79!y{}zfx#OnjKEeR&)gQF>lfGp@JKiy)DP>-JFhPmEAy-z$_nK9=Y=KPUBdF z7bcwr7p}^d9Jk+I%D6&~<>$|HMKJL@3rz=B$iO}&-B(UKo|0z5DG6MKVw64wKN_Be<8;k)<66<=ZHns}Z4%9PM4Bh= zn>25vet0xbK>q<3IH?wDbO=osn$*(?ILt!+>rN+9(m7bb5bdM}p{y>zyaG%vV)tV0 zCDl2@l2(HxK6l1pqZS9pVUj6Ed7E z9mgv=P1fV!vZ&l5N)u`T3Qr7Dm+*K`#6nTs3fZAjEiaOGT6sMl-}V)V^V}V|I^La` zhC@Yn)~9iFWpdRLXVX+f{c1GN@O4rQ)Ky?lfjHE?lixcn>7^i;Oez^4Ng$;&aSzVn znyhv%W~G(Itvp>I4t0lf{5R?F1yLT~l;p0cIg&~3`MNerBT5#CJKkOVYbYeK|qAVFRQ9Elyw#=#Hhl$3(4vNCpH1-xN0VdI#*P!{y@<(vf) zaP>@Xn)l-aZ?4IUQdDJjQbLy&qv*p{?RX3fxw0_HDj!>8WAjXOQu94F&rQd*f6k<0 z+CR&hDeY6RSfTnV<-K&3MZ&+{mg9~GW2}{O>?k4$^E^DFxEM=JN3|7$>T3UldTJ|} zYb}sauj32cmPIN#9G^E0ogPl>Q0>O0Fr0%_F7Y`sFspXSkojOLIZaC3`+SWJh7xJF z*o_?C+}DSD#ias?M7uwC5BKLmf~(FGpU4`a=~Wblvdgk%3h3%e0aw4TK*Hem%Sqnq z)Ab5HNu}$M`GIiSpiyGum;xA2PGv5_a#G`3M)Paq_|OqBf7SX_YATRex!wH7XX-f; zo4F}OjI_qh5|;DY!dAS+>*iO98Tt=#6IZp15eSp0;f2FWFD{eVTUjZzBUbKDSUaD+{@GKngR*5JIHUTVN&+^iK8YyovQ$u%+wXv zh5`w>dx+n-#-u#hHX^sB6^iq!(3<2f6-dqEnXXG>mJQaNu=7KG4DJ8d zSgn@8F9Ol}Z`I%7{~q}Nf7JKizPr4i^xouot@}If0axC2lk*k!2W%tOj{)?5*N@y= zAiha2@JHm(?F>;oTK#xReZety{DPU8ZHPw*cY*jR?d4aL>&oZhsA8&8$+Z=Td(yE5 z?p+PtNz*>7j$163xHaKSg34N~u@MH^*trBPk<9yaZ>(9qO^kyjx8i!XOltt|x2YrJ zh*oWZ4*86=AbmoeuOOKY9ts)MfDhRU#Bpl>!}sw{@)cSdwSn|A5F5uKCxv8VBiW%> zyi6l5E}7C77^S3DxEzGD_K^f!=ZGnXtYz72ilc8j27C6|ve}{bMHHb-s-|yIH7bS! z{>p;1C*RsqutK6jE{fnP-*XCkex^H0y%uI;fjFxjmACQs0#)0j*OW2(LM=42N6=A* z_^1^aW#C)Ix*ELfV30D$RHxEVco|--30-w4$H_vwCf4u*-*EYB)#0jB+EgGxXm`nn zcpFbG2bRqh2ONe(X5j~JHbzJ%Zv*3mWNIFnBJ9Ae*Hj>3Xgm4s@5tB%Y6Zm#tb(K& zqBc|g8;wNQ6i8IqCjJw1HbHGlZDK0AqXnvJB(|YIBC_t_516UGunoOXKQQal1jylc zRgxpIRhL4py$U&;CO{73E6I@c%sg!$|Q?N);_WnI2ub_7?m<%xS|wL?&}}XPPQ>VB5nc?r2bOdZJ23U${1fSu&|Li3%#9 z_Qn-M((8{PTNZu6hD2uB7>7rGM}Y(ZZRIy4!I|l)9g~DEorA~f0tx&nV3vq^C~Guw zV3TI@F~!y9m9rE`Jka0*Y=b3NPfxf@>g|jKd!){uU`I_9NSqwnu%Zd^cMku^q6j z_Wr^ewSL6=l(onEPOINLXL;J+6F3~$RR5#;C+i=rkJlflU+sU^{}KNq{-|@e??J!6 z?&-P@fH#6rT}z$A_jTWU8@}A|?uN_Y35N4Wz!$>b3t+z~fc=I5_NxNeF9~43CV>6C z0QSoQ*uNFPJ}H3xYXR&R1+ZTbzN*_Fn|Be=dOikO20B0@yzj!2YQK_5%XgMFDI{09zEm76h<)0qpw)ukfx0@!y8VE;$}`z-@r_WufC z|5*V0tN`}=0@&{fVE;(~`-}kgy8_tn2w?wF0Q(?5dYIwY1rr|)tionx>Lg2x`@jxT&%s)~8Nd4XQE%g@v zQ~t;OGyVhq6|gHW)IC^tyspvrBi|>$Q{de`(4=^u@;>gJ@%DRHdcNZ+d2*hUo~`bm zxSw#p(LL#IbK6{Ba=pWqat*jvI=|yAIdjgF&aIB0IG%94(J|?0bJ*-(vcJQgvJco- z+P-5e*>bj%wyoBmSf8-I(K-qLYqKJ<96wg_^_=6GDb}onniKD!F&_NNPXL~H=j6k~ zv96Wu)VcVqgS(4XvIFPBul)>pM3*h~LkMiRiARei8LI6Jlc(UW>s&B(qz>^&>7e4R|;K?pB%p=d$ ze+PK7BjLmU2H?r8$cH}wc;XG43%}|ofG6Il`S9-q{2f^SeE3@de_R0X0sK*npWu;a z;6cD262P|szMmgokJ@*i0RAn2?-9Ts27CuU-v4u$5aR;)_X3`Lk9YFO(+d6562b51 z!@m~rcM9OaFO4P3kGH`1Y?%|lKLPkl0{Gto{I_;Gtf#G9^*s;pukpio0GzA_?%z7yj*zKF9H7s{`b4`fPb9;{%*j(660^< zk*EDX0Z(Eq@!|gn@b?S6|199&Du4$khZYhifQygqTYx8{IUgR$^H=Z*K&qO{=OrCC;AI6ycbqK7NSe%!~Y53$^M-We<$F{o|q5c0HgC3EFUhs=aYcn zB!FK4{5p(3%_C3$1mIT+;8y`Yz>lx{G~m4g_=|vd3gFRrNX{v^>g)R^;7k1P_q`tQ zM4vv+BTsNrV6nU#zn=^5{0QLRDS%G^{;UAL5%8z@@s2M6ep~?mkS*}E<%k7+X7&qQ zd;YPy8-4%k`-tzgzT15}yw7<*<9&-)@^*Obo-cXc?wRrI_XOO3?|!fQlKU3-2G_H$ z54s+9ore1Z|L%Ok`3C3R&OMG_I= zw0_k3I_n+QotB?9{B^_c0X424dw93QcG_n72v0*dzXU3Lr$B}vtb^=lMKVCwv!4*j z&;!Q-|G8Lxw{l8D0Y!21GKz;>`XsfegET1Q~inGW|dJ zlN}vX!H#gaJ=ojU8xBexZIQ|La8IPIEfQP}8FrHlc^)b4d=4^f7s>Dr$go8u1E?hI zH;80_J&k?6K!zP3fD9{0hWGGPdI!vFcE3mlH)L=LWVrdmpy&CONQP<1@N0S`GB^A z!pinulHqMUQrh+hkl~L+GQbw!_70H@unM;Qo3nCe|K!*DTGBkb}GW3aLcn~slkqmF(kmfr*Aj2lusoJJVhF9=NsqqHLa84k@W^~dJ5y|i{WVlNt1FXnw+XOP) z2+Bd*Mw)?VFm8mUgKaHduRp*er0d@X_!R>9V}SSb<2U>Y@MJ&6#b-ki@I;@*hkpq0 zUlibT2JnB0@$)?LX+nI+=@uV80(f$|#fM)5cw+0xg}>=DfOqrrziA%!&%YyphdDv$ z^zy5Ke+0ju|Mc=T0{A`f{)hST*Zm{lWdZz~08i|pxcFZ;Y_V8~?I<4}hPfBhX)P?u z>5#~`tDS=kLfhaS^&p@IOT<$D_4=3i_to9&`=0N#_c71MJvMijv)!@5zF>V5Bwxu- zZg*iE-`PC00O~)!YZmk>6S`fSO+|1BDAu*js!)y#805+ly}^&JeQK^x;CtW-iS)oc zjjX3Z5GQkr`#1%PJdA4JLr{a+bS61%iq&4pScn%+VtMU+!M+C!|dj8-g4ts5I}MVG#@6E@Y0mF8{W zGcW~y{^3RxzTaX7DZdK2J{t|EE@Z(u`}7Qyd_0^^w`$&I3TV>+%I`AkTN)sU1g;)w z9?%kx#v*g5&gv!aM&*^pfAKY~m4y?ey=B;6@_iprka`1ecutCdi|79IsbtdN*@X#X zwzqm^F1NOD9J7)Zth}s-B;;J-RBRfq<)@SJS=Dcv%C+3%^mp4tax%Fq!fkAGh zPV~8{?Snh(eVUG}`SsG_SR#XNcOsu)=vKKFcgf)8LcL|H11avD_L@48()eS--oJJ$ zvY}4AhUfGz3tvQZ(GaVBzC6y0tGLcpdI$bw4;PN%E-)^`i3i^&3xgPl9j@pbJ=dwj znW5b|GH^6@vze9`4!Ig!hI@*iVbj3k^wNalzx`9USEF8g=i}1T98b6=R#-nKd8w6KX;aEZ^ zy8blv3X5C@>qlULjLeFv{u06JYgvYEjH;nogmku}CVJ1`mzc4;uj?_yQ(%vzNDnb~iY$TIkfy3&Op-2j;EaLm3h&8o>{-cwW6 zUm6<^hA-efgam%hB{N^x8muCfW!r$EeuDP@Yb-CdG)xCRT>otSe*dTZy>;*Qe#-M_ zo>lG#UB7aTIG=PLaTM%_ZFgC}V)-k8sy}jF;XLkRz5H>f$1lWSUp6y;IuSV^PJp9# zy!6zMspc4FUs7hBoU3pS)9GJu@^*Q}bA+-fXYEheI3}%f#|Gd0;25>NO(_KWHFX82 zXT<-?%&sF~6cwDXL?tZx>Stv;LUK zR6)W-F7P{cMtf-3&T0d#nfUN$3`v5SndB8|Ha1pK@F*Zu(_FL=#Wg+g5chaXUM*0$ z6ga4ts^K~6qmTyABTAPuzHxpe0WF|a)bNSbq@NmJ4Zc$q0va@O_s=4u$$@*+x&H-Xp-A`dyT>XsX$Bw1I42h zX4&N!Kxe1pN*EPbH#dV1d;E!QF5HPJjmo=tDJhLewnM6eyZ%fj6`O?7Tu-wWnn_*h zY&mZsgegk7bG#G{)aZs=S-h%D)0K|(MRGE!*WR9-lBQ=M0N1hMQ)oPdb-?ahp;bWX zy$|`sZ?0t89KoBDg>c~xEQ}z(J`xS+phT-Oi)vGul~Ts?#zwk0E$SFfG8MTz#sYtkijpR`;s*mX(F!j*wYZYrFiQaHgY1=KZ2MVSp! z0bmm0`8IHK9V^_5iSEjA59(D(8WNcV0cU;^)W)ql5sL)~}k4*8nAvz~wU+~_*x_*ch%`@3!bZ98h62ha=sBOfl@ zi{*D4zsi(+=UB@?^+_ad?V(gMJEJz6UY2}$m~u5LjVhW3_l2>-Jg&=~GPhGwbvFe| zJQPPB#i8b?4Qv{51iTu#xa(tfDvqnPt1w5a#J!dsN=C9cCLZ#4%3USiT+AwAx;qLN zG2J_4?kzjk-jB~uPbLK#fHPBdva1TSn5;kuv;JrlR*_@_bt;KXCrEEG95k|VOiJqf zx3iGNv_|=ls1Ok)T0-sKTMNykX!r_Ii{~PR3})N?&^$JGBx@&RNUe?MnNvy9t<~c#%?ls4lT$Mh4XW06%tSV>yVu1l-Rt(E^ zS78Q|X_Y5LLIih&H7f3c6qc=9l*D$-O!G--A`n#Q|&k(uO! zg*X;lTIROGrPCu`9>yZbk3UjUAxXj#D~49M;W(ZlMy6oYNXI7Q2F2(SUceNnsvnVG zR=9v`azW;{za~Tuhf~od*Md7UM-2uGFUK|L&B4_uzO8Lg922uLujptcuz>(EdMQ z`JttuE$}<_U-y5iF6pcHyvIH4{4dA5?60(4vQ9(d|C*o6MGtO(9sIEtQ9I7eD9xxB zyFRV9uyekm8<#)AZ=s;=L?^Q-`fo;AS5^d~td3>!e&Fl*$4mT!d9R*lS-hJC#W;CZd< z=r~@BYYgo|AtE59+sw9hHn)UAT4EY>v-Wv&2CFOdl>y2T-9=)D%;pA5h9w{>A<6mZBX?bYdaND^YZ`jaM%f zG9=f47)w{~Y`@0Ryt`<_(#$@@eFVj&!mKLTrM%(STEHq@m)m= zmT~$aZWAUR<#tsOFX08h#u7eWcmPXSS^(!WeDge-BAEK}s-hLi`D-lG>k9W{nGP;& z;FYO%PlZncSz3)MKrxA3#fctG@bbRGeOM@m@TMCyju{&h$#VDM?Wx!Tj>=c?a z6O(LN1A_Y=jm@ditD)MU{r@^k&eE_dFkk498rtLsmk zk30U`am;?n_G4Sj`YCG=;LG?UZ!d1f@;uFN0jb?6fbIhsup*Pkk;Hg*W+p|hitD%P zJUN(>R8Kos7H`B<_w#Fcbp_9$OSklty9z%oj7dsW;mBKyH(*v{GPvL1`%<*5P9fu# zGvQPM!mXzJ)5ED$GF5FSX$I$D=_qc(EZgOVC9wqCykypJOH5Y{0$?&}ZEL}wudBF` z@>sPL9^={R>2Ru=mVp46Jj(4hR=l3{rkudMRaPmEXCo0wf-4(nSYh`j9gNAU%Ejlh zy)YOEH^;;2Oav60VXD|nD=e^ZcN90^DxHx#mn2*%40k^d#gmiaIP7ty>B%^;tgKQ! zRu*Pe)vtL=aXltGy0q_RJUlCn!dL^|Fu?V~NogjTs?t5p&`gRb((SB-B${&<*I|-_ zOIH~xsnF|*T4`}oFYrBo^wm5{(eZ5Nx2#o^3K zsxlR@a&U0%D6Ya>Psjpxv*odGG#N#@@bYY*u09BwIwY8V`6<1>3?Ky6* zDB9LPnmkvXComD;&r$J`(&PG z!USBKV13b#2@1Hp&^9vI2}C3^}2I@Elx)R|S?y zul!Z4E&4FO!KKZk=$)_$^Y`VhlRe7o~06Cb&ieAhtm=iG0Di>IJr$pP(D3!_K zDxEmewG|pxeg3HBR?E{C=kB_ehA%g~yWw)f@rIiM&jmgocs!8t9`!bQe(L$G=P}QW z`@H+5?iH?QTpx11&ULq|!{u>)%UN(f!0r;jHVR;G7Qk*7z^)g-ZWF+66~K}>FMNH6#8lzKl6WwD*o^{w zuNS~>5Wubxz^)d+t`fkK7&m+}yH4P}#FsMPdmH%QyPm{2;(KpB|9dwOU(S5*trK{! zPXJ5e0r7G02)vj0N#=X6OW?gE9uePr9RlyQ3t(*mSgQbbvjFx+0qhL|SQ4*_Prk(0 zIUklpk>$d!Co#_Wu)pN5+xq_z!2Uu2```T74J`uLW&!MO0qhO|Y?A=?CX7AT)e&jw zYLD~=TcozuU`JP^Cm3$)oD6n!NRvJ7lO3H?k?8akdy(VmW}XlFRsAxVJk=;;M)G#YG;MmxHurh2=lT6@>g zbqN<%pl<7bOzOttw|)(ov-lz=lR1kIOXjR|Jh2GYk#!VbTZpW8Ai}EUtc{N^Sx@p| zMb?uq73hD0>%HrLCh*?p z1hD@lfF+U1`S_B!nS9uv3UK&$0qjrE`TttW6PAYAz?TAj^{=US`nT6bA--R~_rsoV zc=oyf!1W#HFP!@w_uIc|ueVKGp8)WS>PNm@?8NGt6S*+2?($4Bbzv%=yoe1WRR7D0 zS{s=X=#^cy@l2JD>YB3|AL`)~m1bP-?ncGGPY1a7f&cApr11szC8R7|_Kfdt#JA8Q zaB25c@`9Au*WNlg)!x(D6^^!dbx7@(A2N-;cjSFp@_n^N6WY{yg& z@q3ms7d@364^s+d5~ae&qP(TphWU;1pYD`hx@$ca5>0NUCa@No$uc?l@=yqyN`^uS z2~Oa_3S(vl{6d97Bgk(;1P-E+11W4`6bj+mY%aFq+U$|JZ@Z(|2q<1c+rfC)mFbWnBLx9NL0EGqnP}#XYzJo&1jADLJGRu1;TvSR#4l9j4?bi_MsPcaHmJC?bzX zuT$al1;r_}{xdX%FzGLc%3Hm7Lavt##1f%UcsknELHk$`*Yb=EQ89VXwy=9Na@dCY z7o5DHuPd1X(;sD;(ASze+p3<0Ed}C_t)dKEfwjfmxB~m-?YtF0ZBX&D%6W|mV-i)r zYs_qYaTjJbEH{ZTJ1O0hh4a@mkr}@Cj0YXPL=ia_lF6@pzI11CCy`o?+Z0LHbCqT` zmzw$wXkkoNx)(3kyl*e=z!hwgH}VP}eYDEVtrxa7g;@==Ieo5pGiI?(=DwPX$}*k6 zH3>`(+UfeH;&xp2pv=AUIhqVdv70|Bk%qO{EV9O=&Y1NAsRCqjQ*Kyku6^OpWPkA` znCCwJS+1gZ(}RB&N`zr!BkG-1A|~M~++J+LRoIi`7PYR^S1yGrl9{BR|0%*+youC~ z-+}H3nhi3j5~eLvk<6@}YJ(9hZo?$H`R6IaC3E8GQs0kFAxtv7=0&(qtSWA$-Fh4E z0AygpxH8B>F=>OFKs;e%T8+gmm{z;Yy{ge3&?8$1xT36=q6vUWW;B+FO=lrKR|GEZ zO9?R0#pV;uDP+hfk#(=D*ho1p$p{%n&&g!kuu0W&qyQ#Ib(%!`|5f1BKk!Wb6aIJ9 zz03CoZ`yOj{Q>t%*F!FwbHb5#tg%0A`$Ow}mTzi(|05NEys=0knDp{{V1!GH7o-$* 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 0 ? args[0] : "30"; + Task t = InvokeAsync(n); + t.Wait(); - var n = args.Length > 0 ? args[0] : "30"; - Console.WriteLine( " [x] Requesting fib({0})", n ); - var response = rpcClient.Call( n ); - Console.WriteLine( " [.] Got '{0}'", response ); + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + } - rpcClient.Close(); + private static async Task InvokeAsync(string n) + { + var rnd = new Random(Guid.NewGuid().GetHashCode()); + var rpcClient = new RpcClient(); - Console.WriteLine( " Press [enter] to exit." ); - Console.ReadLine(); + Console.WriteLine(" [x] Requesting fib({0})", n); + var response = await rpcClient.CallAsync(n.ToString()); + Console.WriteLine(" [.] Got '{0}'", response); + + rpcClient.Close(); } } diff --git a/dotnet-visual-studio/6_RPCClient/RPCClient.cs b/dotnet-visual-studio/6_RPCClient/RPCClient.cs index 414e414d..c92e7aff 100644 --- a/dotnet-visual-studio/6_RPCClient/RPCClient.cs +++ b/dotnet-visual-studio/6_RPCClient/RPCClient.cs @@ -1,50 +1,67 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System; +using System.Collections.Concurrent; using System.Text; +using System.Threading; using System.Threading.Tasks; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -class RPCClient +class RpcClient { - private IConnection connection; - private IModel channel; - private string replyQueueName; - private QueueingBasicConsumer consumer; + private const string QUEUE_NAME = "rpc_queue"; + + private readonly IConnection _connection; + private readonly IModel _channel; + private readonly string _replyQueueName; + private readonly EventingBasicConsumer _consumer; + private readonly ConcurrentDictionary> _callbackMapper = + new ConcurrentDictionary>(); - public RPCClient() + public RpcClient() { var factory = new ConnectionFactory() { HostName = "localhost" }; - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - replyQueueName = channel.QueueDeclare().QueueName; - consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer); + + _connection = factory.CreateConnection(); + _channel = _connection.CreateModel(); + _replyQueueName = _channel.QueueDeclare().QueueName; + _consumer = new EventingBasicConsumer(_channel); + _consumer.Received += (model, ea) => + { + if (!_callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) + return; + var body = ea.Body; + var response = Encoding.UTF8.GetString(body); + tcs.TrySetResult(response); + }; } - public string Call(string message) + public Task CallAsync(string message, CancellationToken cancellationToken = default(CancellationToken)) { - var corrId = Guid.NewGuid().ToString(); - var props = channel.CreateBasicProperties(); - props.ReplyTo = replyQueueName; - props.CorrelationId = corrId; - + IBasicProperties props = _channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = _replyQueueName; var messageBytes = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "", routingKey: "rpc_queue", basicProperties: props, body: messageBytes); + var tcs = new TaskCompletionSource(); + _callbackMapper.TryAdd(correlationId, tcs); - while(true) - { - var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); - if(ea.BasicProperties.CorrelationId == corrId) - { - return Encoding.UTF8.GetString(ea.Body); - } - } + _channel.BasicPublish( + exchange: "", + routingKey: QUEUE_NAME, + basicProperties: props, + body: messageBytes); + + _channel.BasicConsume( + consumer: _consumer, + queue: _replyQueueName, + autoAck: true); + + cancellationToken.Register(() => _callbackMapper.TryRemove(correlationId, out var tmp)); + return tcs.Task; } public void Close() { - connection.Close(); + _connection.Close(); } } From e72c259bd67790163363f451b939b5b99acd0a95 Mon Sep 17 00:00:00 2001 From: bnaya eshet Date: Sun, 28 Oct 2018 09:04:14 +0200 Subject: [PATCH 081/659] remove .vs folder --- .gitignore | 1 + .vs/rabbitmq-tutorials/v15/.suo | Bin 42496 -> 0 bytes .vs/slnx.sqlite | Bin 3641344 -> 0 bytes 3 files changed, 1 insertion(+) delete mode 100644 .vs/rabbitmq-tutorials/v15/.suo delete mode 100644 .vs/slnx.sqlite diff --git a/.gitignore b/.gitignore index a345f396..4a26c2fe 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ target/ .DS_Store *.iml .idea/ +.vs/ diff --git a/.vs/rabbitmq-tutorials/v15/.suo b/.vs/rabbitmq-tutorials/v15/.suo deleted file mode 100644 index c879ae7b0d2b865928856749096adf3b2240af5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42496 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 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index b5a2ed7d5d2373918c7a217d151dda9d09eb9221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641344 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�@&M6HR6HK1M~E!^#+LiuhpK?CaUMbE&x;H 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 z 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≺~5Zo{X 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%0A`$Ow}mTzi(|05NEys=0knDp{{V1!GH7o-$* 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 Date: Sun, 28 Oct 2018 16:59:02 +0300 Subject: [PATCH 082/659] Sync ./dotnet with ./dotnet-visual-studio --- dotnet/RPCClient/RPCClient.cs | 114 ++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index a683d8f3..fedd99d0 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -1,15 +1,21 @@ -using System; -using System.Threading.Tasks; -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System; +using System.Collections.Concurrent; +using System.Text; +using System.Threading; +using System.Threading.Tasks; public class RpcClient { + private const string QUEUE_NAME = "rpc_queue"; + private readonly IConnection connection; private readonly IModel channel; private readonly string replyQueueName; private readonly EventingBasicConsumer consumer; + private readonly ConcurrentDictionary> callbackMapper = + new ConcurrentDictionary>(); public RpcClient() { @@ -19,48 +25,39 @@ public RpcClient() channel = connection.CreateModel(); replyQueueName = channel.QueueDeclare().QueueName; consumer = new EventingBasicConsumer(channel); - } - - public string Call(string message) - { - var tcs = new TaskCompletionSource(); - var resultTask = tcs.Task; - - var correlationId = Guid.NewGuid().ToString(); - - IBasicProperties props = channel.CreateBasicProperties(); - props.CorrelationId = correlationId; - props.ReplyTo = replyQueueName; - - EventHandler handler = null; - handler = (model, ea) => + consumer.Received += (model, ea) => { - if (ea.BasicProperties.CorrelationId == correlationId) - { - consumer.Received -= handler; - - var body = ea.Body; - var response = Encoding.UTF8.GetString(body); - - tcs.SetResult(response); - } + if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) + return; + var body = ea.Body; + var response = Encoding.UTF8.GetString(body); + tcs.TrySetResult(response); }; - consumer.Received += handler; - - var messageBytes = Encoding.UTF8.GetBytes(message); - channel.BasicPublish( - exchange: "", - routingKey: "rpc_queue", - basicProperties: props, - body: messageBytes); - - - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); + } - return resultTask.Result; + public Task CallAsync(string message, CancellationToken cancellationToken = default(CancellationToken)) + { + IBasicProperties props = channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = replyQueueName; + var messageBytes = Encoding.UTF8.GetBytes(message); + var tcs = new TaskCompletionSource(); + callbackMapper.TryAdd(correlationId, tcs); + + channel.BasicPublish( + exchange: "", + routingKey: QUEUE_NAME, + basicProperties: props, + body: messageBytes); + + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); + + cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); + return tcs.Task; } public void Close() @@ -71,15 +68,26 @@ public void Close() public class Rpc { - public static void Main() - { - var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib(30)"); - var response = rpcClient.Call("30"); - - Console.WriteLine(" [.] Got '{0}'", response); - rpcClient.Close(); - } + public static void Main(string[] args) + { + Console.WriteLine("RPC Client"); + string n = args.Length > 0 ? args[0] : "30"; + Task t = InvokeAsync(n); + t.Wait(); + + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + } + + private static async Task InvokeAsync(string n) + { + var rnd = new Random(Guid.NewGuid().GetHashCode()); + var rpcClient = new RpcClient(); + + Console.WriteLine(" [x] Requesting fib({0})", n); + var response = await rpcClient.CallAsync(n.ToString()); + Console.WriteLine(" [.] Got '{0}'", response); + + rpcClient.Close(); + } } - From c3a64362771880383fa8315970e1077a031a4971 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 10:59:20 -0800 Subject: [PATCH 083/659] add SoapUI project --- soapui/RabbitMQ-tutorials-soapui-project.xml | 1006 ++++++++++++++++++ 1 file changed, 1006 insertions(+) create mode 100644 soapui/RabbitMQ-tutorials-soapui-project.xml diff --git a/soapui/RabbitMQ-tutorials-soapui-project.xml b/soapui/RabbitMQ-tutorials-soapui-project.xml new file mode 100644 index 00000000..ec72137d --- /dev/null +++ b/soapui/RabbitMQ-tutorials-soapui-project.xml @@ -0,0 +1,1006 @@ + + + + + The simplest thing that does something + + SEQUENTIAL + + + + + + + + + + + + + + + + + + + queue_name + hello + + + + + Distributing tasks among workers (the competing consumers pattern) + + PARALLELL + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue_name + task_queue + + + + + Sending messages to many consumers at once + + PARALLELL + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + exchange_name + logs + + + + + Receiving messages selectively + + PARALLELL + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + exchange_name + direct_logs + + + + + Receiving messages based on a pattern (topics) + + PARALLELL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + exchange_name + topic_logs + + + + + + + + + From 1d146a2748d7dc764d642fdf917eb2023a55eae3 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 11:25:31 -0800 Subject: [PATCH 084/659] ignore logs --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 4a26c2fe..bde152e1 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ target/ *.iml .idea/ .vs/ + +*.log From f266cbb98296ff2fcfdd921ef8e55026b838c227 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 11:40:38 -0800 Subject: [PATCH 085/659] add amqp-client dependency --- soapui/pom.xml | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 soapui/pom.xml diff --git a/soapui/pom.xml b/soapui/pom.xml new file mode 100644 index 00000000..cacaa18a --- /dev/null +++ b/soapui/pom.xml @@ -0,0 +1,50 @@ + + 4.0.0 + + com.rabbitmq + soapui-tutorials + 1-SNAPSHOT + + RabbitMQ tutorials - SoapUI port + https://github.com/rabbitmq/rabbitmq-tutorials + + + + smartbear-repository + http://smartbearsoftware.com/repository/maven2 + + + + + + + + com.smartbear.soapui + soapui-maven-plugin + 5.4.0 + + ${project.basedir}/RabbitMQ-tutorials-soapui-project.xml + ${project.basedir}/target/soapui-reports + true + + + + integration-test + + test + + + + + + com.rabbitmq + amqp-client + 5.5.0 + + + + + + + + From a4668d080266ab1ffa7a8bcf9b1c96e791867171 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 11:42:27 -0800 Subject: [PATCH 086/659] add soapui to main README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 25b66931..5aa9fd1e 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ The following ports are available: * [Scala](./scala) * [Swift](./swift) * [Spring AMQP](./spring-amqp) + * [SoapUI](./soapui) ## License From ed74dc8aa154f06a0a7c655f14b95997c9b72911 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 11:50:09 -0800 Subject: [PATCH 087/659] add some docs --- soapui/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 soapui/README.md diff --git a/soapui/README.md b/soapui/README.md new file mode 100644 index 00000000..7d1ecaf2 --- /dev/null +++ b/soapui/README.md @@ -0,0 +1 @@ +# RabbitMQ tutorials ported to SoapUI From 54de788a6bf9c38ad56f3aa60f35c3601d65f973 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 12:07:20 -0800 Subject: [PATCH 088/659] upload work --- soapui/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/soapui/README.md b/soapui/README.md index 7d1ecaf2..ac57d41f 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -1 +1,15 @@ # RabbitMQ tutorials ported to SoapUI + +The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), with some modifications to make it work in SoapUI. + +## Prerequisites + +SoapUI (tested with version 5.4.0) or ReadyAPI (tested with version 2.5.0), and you need to place the [Java Client](http://www.rabbitmq.com/download.html#clients) in your `bin/ext` directory. + +## Running + +You can open and run the `RabbitMQ-tutorials-soapui-project.xml` in the GUI. The project does not have any asserts; all log messages can be viewed in the "script log" tab. + +You can use the CLI runner: `$SOAPUI_HOME/testrunner.sh -A -f target/readyapi-results RabbitMQ-tutorials-soapui-project.xml`. + +You can use the provided Maven pom: `mvn verify`. From bfd299238a920c35318511efc43e872d11c71391 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 12:17:01 -0800 Subject: [PATCH 089/659] no need to make things complicated --- soapui/README.md | 8 ++++---- soapui/pom.xml | 2 -- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/soapui/README.md b/soapui/README.md index ac57d41f..41d3bb05 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -1,15 +1,15 @@ # RabbitMQ tutorials ported to SoapUI -The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), with some modifications to make it work in SoapUI. +The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), with slight modifications to make it work in SoapUI. ## Prerequisites -SoapUI (tested with version 5.4.0) or ReadyAPI (tested with version 2.5.0), and you need to place the [Java Client](http://www.rabbitmq.com/download.html#clients) in your `bin/ext` directory. +[SoapUI](https://www.soapui.org/downloads/soapui.html) or [ReadyAPI](https://smartbear.com/product/ready-api/overview/), and you need to place the [Java Client](http://www.rabbitmq.com/download.html#clients) in your `bin/ext` directory. ## Running You can open and run the `RabbitMQ-tutorials-soapui-project.xml` in the GUI. The project does not have any asserts; all log messages can be viewed in the "script log" tab. -You can use the CLI runner: `$SOAPUI_HOME/testrunner.sh -A -f target/readyapi-results RabbitMQ-tutorials-soapui-project.xml`. +You can use the CLI runner: `$SOAPUI_HOME/testrunner.sh RabbitMQ-tutorials-soapui-project.xml`. -You can use the provided Maven pom: `mvn verify`. +Or you can use the provided Maven pom: `mvn verify`. diff --git a/soapui/pom.xml b/soapui/pom.xml index cacaa18a..b0f97aae 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -24,8 +24,6 @@ 5.4.0 ${project.basedir}/RabbitMQ-tutorials-soapui-project.xml - ${project.basedir}/target/soapui-reports - true From 8fd52f5238c0d199f26815d3072ba81f3f89dda2 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 12:38:44 -0800 Subject: [PATCH 090/659] upload progress --- soapui/README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/soapui/README.md b/soapui/README.md index 41d3bb05..e4a748dd 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -10,6 +10,33 @@ The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), wi You can open and run the `RabbitMQ-tutorials-soapui-project.xml` in the GUI. The project does not have any asserts; all log messages can be viewed in the "script log" tab. -You can use the CLI runner: `$SOAPUI_HOME/testrunner.sh RabbitMQ-tutorials-soapui-project.xml`. +You can use the CLI runner: `$SOAPUI_HOME/bin/testrunner.sh RabbitMQ-tutorials-soapui-project.xml`. Or you can use the provided Maven pom: `mvn verify`. + +## Tutorials + +The code to send any message to RabbitMQ is pretty much unchanged from the Java tutorials. The biggest difference is: there is no reading of the text of the message from the command line - the text of the messages is included in the individual steps. + +I had to make two changes to the code to read any message: + +1. I had to pause for a bit to let the message get processed. Without this, SoapUI ends the script step immediatelly and would kill the asynchronous process running in the background waiting for the message. The pause will depend on your specific case; it can be as simple as `sleep 10000`, or little more elaborate: + + ```groovy + int stop = 0 + while(message == null && stop++ < 20) { + log.info " [*] Waiting for messages." + sleep 500 + } + ``` + + This will depend on your specific situation. + +2. I had to explicityly: + + ``` + channel.close() + connection.close() + ``` + + Not including this would lock up RabbitMQ and no further messages could be read. From 95449218c6c468bd2db69665322d213e60194202 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 12:51:05 -0800 Subject: [PATCH 091/659] upload progress --- soapui/README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/soapui/README.md b/soapui/README.md index e4a748dd..8b4d6e02 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -8,9 +8,9 @@ The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), wi ## Running -You can open and run the `RabbitMQ-tutorials-soapui-project.xml` in the GUI. The project does not have any asserts; all log messages can be viewed in the "script log" tab. +You can import and run the `RabbitMQ-tutorials-soapui-project.xml` in the GUI. The project does not have any asserts; all log messages can be viewed in the "script log" tab. -You can use the CLI runner: `$SOAPUI_HOME/bin/testrunner.sh RabbitMQ-tutorials-soapui-project.xml`. +You can use the [CLI runner](https://www.soapui.org/test-automation/running-from-command-line/functional-tests.html): `$SOAPUI_HOME/bin/testrunner.sh RabbitMQ-tutorials-soapui-project.xml`. Or you can use the provided Maven pom: `mvn verify`. @@ -20,7 +20,7 @@ The code to send any message to RabbitMQ is pretty much unchanged from the Java I had to make two changes to the code to read any message: -1. I had to pause for a bit to let the message get processed. Without this, SoapUI ends the script step immediatelly and would kill the asynchronous process running in the background waiting for the message. The pause will depend on your specific case; it can be as simple as `sleep 10000`, or little more elaborate: +1. I had to pause for a bit to let the message get processed. Without this, SoapUI ends the script step immediatelly and would kill the asynchronous process running in the background waiting for the message. The exact pause will depend on your specific case; it can be as simple as `sleep 10000`, or little more elaborate: ```groovy int stop = 0 @@ -30,13 +30,11 @@ I had to make two changes to the code to read any message: } ``` - This will depend on your specific situation. +2. At the end of the read script step, I had to explicitly: -2. I had to explicityly: - - ``` + ```groovy channel.close() connection.close() ``` - Not including this would lock up RabbitMQ and no further messages could be read. + Not including this would *lock up RabbitMQ*(?) and no further messages could be read for that queue. From 0f710d4da88551f62bba5c605f6ee8d5593d2bb2 Mon Sep 17 00:00:00 2001 From: "V. Mark Lehky" Date: Wed, 7 Nov 2018 12:56:55 -0800 Subject: [PATCH 092/659] final cleanup --- soapui/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/soapui/README.md b/soapui/README.md index 8b4d6e02..51ed8deb 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -16,7 +16,7 @@ Or you can use the provided Maven pom: `mvn verify`. ## Tutorials -The code to send any message to RabbitMQ is pretty much unchanged from the Java tutorials. The biggest difference is: there is no reading of the text of the message from the command line - the text of the messages is included in the individual steps. +The code to send any message to RabbitMQ is pretty much unchanged from the Java tutorials. The biggest change is: there is no reading of the text of the message from the command line - the text of the message is included in each individual step. I had to make two changes to the code to read any message: @@ -30,11 +30,11 @@ I had to make two changes to the code to read any message: } ``` -2. At the end of the read script step, I had to explicitly: +2. At the end of each read script step, I had to explicitly: ```groovy channel.close() connection.close() ``` - Not including this would *lock up RabbitMQ*(?) and no further messages could be read for that queue. + Not including this would *lock up(?) RabbitMQ* and no further messages could be read for that queue. From 0f1089260e1cd2a072741b29ef5025be029c0eb1 Mon Sep 17 00:00:00 2001 From: Srinivas R Kulkarni Date: Wed, 21 Nov 2018 12:24:36 -0500 Subject: [PATCH 093/659] Update receive_logs.js https://github.com/rabbitmq/rabbitmq-website/pull/636 --- javascript-nodejs/src/receive_logs.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript-nodejs/src/receive_logs.js b/javascript-nodejs/src/receive_logs.js index f56e904b..fc466258 100755 --- a/javascript-nodejs/src/receive_logs.js +++ b/javascript-nodejs/src/receive_logs.js @@ -13,7 +13,9 @@ amqp.connect('amqp://localhost', function(err, conn) { ch.bindQueue(q.queue, ex, ''); ch.consume(q.queue, function(msg) { - console.log(" [x] %s", msg.content.toString()); + if(msg.content) { + console.log(" [x] %s", msg.content.toString()); + } }, {noAck: true}); }); }); From 8c771b2229228df660a9e56ef4aeff93403862c4 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 26 Nov 2018 17:05:49 +0800 Subject: [PATCH 094/659] Python tutorial 4: allow for optional message body Closes #188. --- python/emit_log_direct.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index 1aec46de..32b474b3 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -9,7 +9,7 @@ channel.exchange_declare(exchange='direct_logs', exchange_type='direct') -severity = sys.argv[1] if len(sys.argv) > 2 else 'info' +severity = sys.argv[1] if len(sys.argv) > 1 else 'info' message = ' '.join(sys.argv[2:]) or 'Hello World!' channel.basic_publish(exchange='direct_logs', routing_key=severity, From ec033f94e11d91760ba7a07b4d72fdecb75db879 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 3 Dec 2018 13:31:55 +0300 Subject: [PATCH 095/659] Bump Java client --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 6cbdcd97..0230ac94 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - LATEST + (5.5.0,) From 83f54ecd33159f7486e1c2bc9f0d5ec8bfeb2640 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 3 Dec 2018 13:37:43 +0300 Subject: [PATCH 096/659] Scala port: use Java client 5.5 or later --- scala/pom.xml | 2 +- scala/src/main/scala/RPCClient.scala | 33 ++++++++----- scala/src/main/scala/RPCServer.scala | 70 ++++++++++++++++------------ 3 files changed, 62 insertions(+), 43 deletions(-) diff --git a/scala/pom.xml b/scala/pom.xml index 297c1b69..ce7b5264 100644 --- a/scala/pom.xml +++ b/scala/pom.xml @@ -32,7 +32,7 @@ com.rabbitmq amqp-client - 4.0.0 + (5.5.0,) diff --git a/scala/src/main/scala/RPCClient.scala b/scala/src/main/scala/RPCClient.scala index dbd16770..4e30f584 100644 --- a/scala/src/main/scala/RPCClient.scala +++ b/scala/src/main/scala/RPCClient.scala @@ -1,7 +1,22 @@ import java.util.UUID +import java.util.concurrent.{ArrayBlockingQueue, BlockingQueue} import com.rabbitmq.client.AMQP.BasicProperties -import com.rabbitmq.client.{Channel, Connection, ConnectionFactory, QueueingConsumer} +import com.rabbitmq.client._ + +class ResponseConsumer(val ch: Channel, val corrId: String) extends DefaultConsumer(ch) { + val response: BlockingQueue[String] = new ArrayBlockingQueue[String](1) + + override def handleDelivery(consumerTag: String, envelope: Envelope, properties: BasicProperties, body: Array[Byte]): Unit = { + if (properties.getCorrelationId.equals(corrId)) { + response.offer(new String(body, "UTF-8")) + } + } + + def take(): String = { + response.take(); + } +} class RPCClient(host: String) { @@ -12,24 +27,18 @@ class RPCClient(host: String) { val channel: Channel = connection.createChannel() val requestQueueName: String = "rpc_queue" val replyQueueName: String = channel.queueDeclare().getQueue - val consumer: QueueingConsumer = new QueueingConsumer(channel) - - channel.basicConsume(replyQueueName, true, consumer) def call(message: String): String = { - var response: String = null val corrId = UUID.randomUUID().toString val props = new BasicProperties.Builder().correlationId(corrId) .replyTo(replyQueueName) .build() channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")) - while (response == null) { - val delivery = consumer.nextDelivery() - if (delivery.getProperties.getCorrelationId == corrId) { - response = new String(delivery.getBody, "UTF-8") - } - } - response + + val consumer = new ResponseConsumer(channel, corrId) + channel.basicConsume(replyQueueName, true, consumer) + + consumer.take() } def close() { diff --git a/scala/src/main/scala/RPCServer.scala b/scala/src/main/scala/RPCServer.scala index 069bbe2d..8bc6b0dd 100644 --- a/scala/src/main/scala/RPCServer.scala +++ b/scala/src/main/scala/RPCServer.scala @@ -1,8 +1,42 @@ +import java.util.concurrent.CountDownLatch + import com.rabbitmq.client.AMQP.BasicProperties -import com.rabbitmq.client.{Channel, Connection, ConnectionFactory, QueueingConsumer} +import com.rabbitmq.client._ -object RPCServer { +class ServerConsumer(val ch: Channel, val latch: CountDownLatch) extends DefaultConsumer(ch) { + override def handleDelivery(consumerTag: String, envelope: Envelope, properties: BasicProperties, body: Array[Byte]): Unit = { + var response: String = null + val replyProps = new BasicProperties.Builder() + .correlationId(properties.getCorrelationId) + .build + + try { + val message = new String(body, "UTF-8") + val n = java.lang.Integer.parseInt(message) + println(" [.] fib(" + message + ")") + response = "" + Fibonacci.fib(n) + } catch { + case e: Exception => { + println(" [.] " + e.toString) + response = "" + } + } finally { + ch.basicPublish("", properties.getReplyTo, replyProps, response.getBytes("UTF-8")) + ch.basicAck(envelope.getDeliveryTag, false) + latch.countDown() + } + } +} + +object Fibonacci { + def fib(n: Int): Int = { + if (n == 0) return 0 + if (n == 1) return 1 + fib(n - 1) + fib(n - 2) + } +} +object RPCServer { private val RPC_QUEUE_NAME = "rpc_queue" def main(argv: Array[String]) { @@ -15,30 +49,12 @@ object RPCServer { channel = connection.createChannel() channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null) channel.basicQos(1) - val consumer = new QueueingConsumer(channel) + // stop after one consumed message since this is example code + val latch = new CountDownLatch(1) + val consumer = new ServerConsumer(channel, latch) channel.basicConsume(RPC_QUEUE_NAME, false, consumer) println(" [x] Awaiting RPC requests") - while (true) { - var response: String = null - val delivery = consumer.nextDelivery() - val props = delivery.getProperties - val replyProps = new BasicProperties.Builder().correlationId(props.getCorrelationId) - .build() - try { - val message = new String(delivery.getBody, "UTF-8") - val n = java.lang.Integer.parseInt(message) - println(" [.] fib(" + message + ")") - response = "" + fib(n) - } catch { - case e: Exception => { - println(" [.] " + e.toString) - response = "" - } - } finally { - channel.basicPublish("", props.getReplyTo, replyProps, response.getBytes("UTF-8")) - channel.basicAck(delivery.getEnvelope.getDeliveryTag, false) - } - } + latch.await() } catch { case e: Exception => e.printStackTrace() } finally { @@ -51,10 +67,4 @@ object RPCServer { } } } - - private def fib(n: Int): Int = { - if (n == 0) return 0 - if (n == 1) return 1 - fib(n - 1) + fib(n - 2) - } } From 11b8eaf68587b13e745ac29ea001be654aa8602d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 3 Dec 2018 15:14:58 +0100 Subject: [PATCH 097/659] Polish SOAP UI tutorials Wording, add Maven wrapper, bump Java client version in pom.xml --- .../.mvn/wrapper/MavenWrapperDownloader.java | 110 +++++++ soapui/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes soapui/.mvn/wrapper/maven-wrapper.properties | 1 + soapui/README.md | 34 ++- soapui/mvnw | 286 ++++++++++++++++++ soapui/mvnw.cmd | 161 ++++++++++ soapui/pom.xml | 2 +- 7 files changed, 583 insertions(+), 11 deletions(-) create mode 100755 soapui/.mvn/wrapper/MavenWrapperDownloader.java create mode 100755 soapui/.mvn/wrapper/maven-wrapper.jar create mode 100755 soapui/.mvn/wrapper/maven-wrapper.properties create mode 100755 soapui/mvnw create mode 100755 soapui/mvnw.cmd diff --git a/soapui/.mvn/wrapper/MavenWrapperDownloader.java b/soapui/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100755 index 00000000..fa4f7b49 --- /dev/null +++ b/soapui/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/soapui/.mvn/wrapper/maven-wrapper.jar b/soapui/.mvn/wrapper/maven-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/soapui/mvnw.cmd b/soapui/mvnw.cmd new file mode 100755 index 00000000..48363fa6 --- /dev/null +++ b/soapui/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/soapui/pom.xml b/soapui/pom.xml index b0f97aae..83911c55 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -37,7 +37,7 @@ com.rabbitmq amqp-client - 5.5.0 + 5.5.1 From 61ca6df6d5dd197e2ea921ff46e2b222e849e51d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 4 Dec 2018 10:55:14 +0100 Subject: [PATCH 098/659] Update Java tutorials to Java 8 --- java-idea/.idea/.name | 1 - java-idea/.idea/codeStyleSettings.xml | 13 - java-idea/.idea/compiler.xml | 22 -- java-idea/.idea/emacs.xml | 6 - .../com_rabbitmq_amqp_client_3_5_4.xml | 14 - java-idea/.idea/misc.xml | 19 -- java-idea/.idea/modules.xml | 8 - java-idea/.idea/vcs.xml | 6 - java-idea/lib/amqp-client-3.5.4-javadoc.jar | Bin 1089001 -> 0 bytes java-idea/lib/amqp-client-3.5.4-sources.jar | Bin 207462 -> 0 bytes java-idea/lib/amqp-client-3.5.4.jar | Bin 417376 -> 0 bytes java-idea/src/EmitLog.java | 1 - java-idea/src/EmitLogDirect.java | 1 - java-idea/src/EmitLogHeader.java | 1 - java-idea/src/EmitLogTopic.java | 1 - java-idea/src/NewTask.java | 1 - java-idea/src/RPCClient.java | 1 - java-idea/src/RPCServer.java | 1 - java-idea/src/ReceiveLogHeader.java | 1 - java-idea/src/ReceiveLogs.java | 1 - java-idea/src/ReceiveLogsDirect.java | 1 - java-idea/src/ReceiveLogsTopic.java | 1 - java-idea/src/Recv.java | 1 - java-idea/src/Send.java | 1 - java-idea/src/Worker.java | 1 - java-mvn/pom.xml | 5 + java-mvn/src/main/java/RPCServer.java | 1 - java-mvn/src/main/java/ReceiveLogHeader.java | 1 - java/.idea/.name | 1 - java/.idea/compiler.xml | 22 -- java/.idea/misc.xml | 40 --- java/.idea/modules.xml | 8 - java/.idea/vcs.xml | 6 - java/.idea/workspace.xml | 248 ------------------ java/EmitLog.java | 48 ++-- java/EmitLogDirect.java | 72 +++-- java/EmitLogHeader.java | 102 +++---- java/EmitLogTopic.java | 81 +++--- java/NewTask.java | 52 ++-- java/RPCClient.java | 111 ++++---- java/RPCServer.java | 122 ++++----- java/ReceiveLogHeader.java | 101 ++++--- java/ReceiveLogs.java | 43 ++- java/ReceiveLogsDirect.java | 59 ++--- java/ReceiveLogsTopic.java | 57 ++-- java/Recv.java | 39 ++- java/Send.java | 27 +- java/Worker.java | 72 +++-- java/recompile.sh | 2 +- java8-maven/pom.xml | 26 -- java8-maven/src/main/java/EmitLog.java | 35 --- java8-maven/src/main/java/EmitLogDirect.java | 44 ---- java8-maven/src/main/java/EmitLogHeader.java | 61 ----- java8-maven/src/main/java/EmitLogTopic.java | 47 ---- java8-maven/src/main/java/NewTask.java | 36 --- java8-maven/src/main/java/RPCClient.java | 72 ----- java8-maven/src/main/java/RPCServer.java | 80 ------ .../src/main/java/ReceiveLogHeader.java | 62 ----- java8-maven/src/main/java/ReceiveLogs.java | 31 --- .../src/main/java/ReceiveLogsDirect.java | 39 --- .../src/main/java/ReceiveLogsTopic.java | 40 --- java8-maven/src/main/java/Recv.java | 28 -- java8-maven/src/main/java/Send.java | 21 -- java8-maven/src/main/java/Worker.java | 49 ---- 64 files changed, 438 insertions(+), 1656 deletions(-) delete mode 100644 java-idea/.idea/.name delete mode 100644 java-idea/.idea/codeStyleSettings.xml delete mode 100644 java-idea/.idea/compiler.xml delete mode 100644 java-idea/.idea/emacs.xml delete mode 100644 java-idea/.idea/libraries/com_rabbitmq_amqp_client_3_5_4.xml delete mode 100644 java-idea/.idea/misc.xml delete mode 100644 java-idea/.idea/modules.xml delete mode 100644 java-idea/.idea/vcs.xml delete mode 100644 java-idea/lib/amqp-client-3.5.4-javadoc.jar delete mode 100644 java-idea/lib/amqp-client-3.5.4-sources.jar delete mode 100644 java-idea/lib/amqp-client-3.5.4.jar delete mode 120000 java-idea/src/EmitLog.java delete mode 120000 java-idea/src/EmitLogDirect.java delete mode 120000 java-idea/src/EmitLogHeader.java delete mode 120000 java-idea/src/EmitLogTopic.java delete mode 120000 java-idea/src/NewTask.java delete mode 120000 java-idea/src/RPCClient.java delete mode 120000 java-idea/src/RPCServer.java delete mode 120000 java-idea/src/ReceiveLogHeader.java delete mode 120000 java-idea/src/ReceiveLogs.java delete mode 120000 java-idea/src/ReceiveLogsDirect.java delete mode 120000 java-idea/src/ReceiveLogsTopic.java delete mode 120000 java-idea/src/Recv.java delete mode 120000 java-idea/src/Send.java delete mode 120000 java-idea/src/Worker.java delete mode 120000 java-mvn/src/main/java/RPCServer.java delete mode 120000 java-mvn/src/main/java/ReceiveLogHeader.java delete mode 100644 java/.idea/.name delete mode 100644 java/.idea/compiler.xml delete mode 100644 java/.idea/misc.xml delete mode 100644 java/.idea/modules.xml delete mode 100644 java/.idea/vcs.xml delete mode 100644 java/.idea/workspace.xml delete mode 100644 java8-maven/pom.xml delete mode 100644 java8-maven/src/main/java/EmitLog.java delete mode 100644 java8-maven/src/main/java/EmitLogDirect.java delete mode 100644 java8-maven/src/main/java/EmitLogHeader.java delete mode 100644 java8-maven/src/main/java/EmitLogTopic.java delete mode 100644 java8-maven/src/main/java/NewTask.java delete mode 100644 java8-maven/src/main/java/RPCClient.java delete mode 100644 java8-maven/src/main/java/RPCServer.java delete mode 100644 java8-maven/src/main/java/ReceiveLogHeader.java delete mode 100644 java8-maven/src/main/java/ReceiveLogs.java delete mode 100644 java8-maven/src/main/java/ReceiveLogsDirect.java delete mode 100644 java8-maven/src/main/java/ReceiveLogsTopic.java delete mode 100644 java8-maven/src/main/java/Recv.java delete mode 100644 java8-maven/src/main/java/Send.java delete mode 100644 java8-maven/src/main/java/Worker.java diff --git a/java-idea/.idea/.name b/java-idea/.idea/.name deleted file mode 100644 index 8378ebc3..00000000 --- a/java-idea/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -rabbitmq-java-tutorials \ No newline at end of file diff --git a/java-idea/.idea/codeStyleSettings.xml b/java-idea/.idea/codeStyleSettings.xml deleted file mode 100644 index 01899622..00000000 --- a/java-idea/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/compiler.xml b/java-idea/.idea/compiler.xml deleted file mode 100644 index 96cc43ef..00000000 --- a/java-idea/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/emacs.xml b/java-idea/.idea/emacs.xml deleted file mode 100644 index a1e816fc..00000000 --- a/java-idea/.idea/emacs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/java-idea/.idea/libraries/com_rabbitmq_amqp_client_3_5_4.xml b/java-idea/.idea/libraries/com_rabbitmq_amqp_client_3_5_4.xml deleted file mode 100644 index 06a4135a..00000000 --- a/java-idea/.idea/libraries/com_rabbitmq_amqp_client_3_5_4.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/misc.xml b/java-idea/.idea/misc.xml deleted file mode 100644 index 045159c3..00000000 --- a/java-idea/.idea/misc.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/modules.xml b/java-idea/.idea/modules.xml deleted file mode 100644 index 4449b62d..00000000 --- a/java-idea/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/vcs.xml b/java-idea/.idea/vcs.xml deleted file mode 100644 index 6c0b8635..00000000 --- a/java-idea/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/java-idea/lib/amqp-client-3.5.4-javadoc.jar b/java-idea/lib/amqp-client-3.5.4-javadoc.jar deleted file mode 100644 index 91bb82c72e1dd104b664040333b7b8da0aa69e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089001 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:tfcJ|g$`AXKD{+2tcXV<2U1#ZXN;6y#u2%Lj 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 &FU126`6i~o2E*ygc*S^7 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

~$9cq6~lL3xd9dEK^6 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

6Gm3=XO4}e*O7It)*D#3{QkY+#4iJCq2 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

0ZsirPMi;`WLy2W1hWrx7o_ zW~`9i0mqsB2M+2@sxKm1ch3hc_qPW}PSC@^`=Tt>IPPi(sEi?Q4cy7woqbawFf>@2 z1W6e);d0+0g0@A0!)m5G02l)M`sLvLbn2uP5aSA8XD?Z5JKr8@nGF{R{%SngOMxzP zm9keS(dv90_$Q&;!%Xu)r+eaoj;k?c6!HaSQi4sGl1yonX-qnLFYj7ieN=IvUBBoj z=XG2z(DTgV1T-(~r4Y(P`g#@fiPOr0+T6TD+{Lu)puq0;l2NmX$a;h25`*ziBTtz* zL8y{J{zb+-{+!LP&*{8NZs+Y$mA>BW83xAT#c!#;4+q!RhLg?L=|>kg?HiU>%pEj3 zy!|Sb>Y+vXv?hIfhCdGSW(SyQO-)tt8G&t_9H1W0ES3 z2!;B`eSo(9#CNm`difmR5KcFb96t`v4YHw$hdfC2cgoF%IECCR;7bqC%P+9MI&;(%AFTmlUoM^m(w|!ieZATCWFUUm-rNzOghY=@*-m?)Q zx|G1N+ZO|a<~!-=8+3^ILCXYB2Fg-z@^VeHOFXYi#=)n#5}ir{6$&rO4fzSmp9Ml% zOZtlK*hAFu^>#-h?Nw@MUY8t2`a?6Sy2F{$&-y!}Wd;aLLmd801-=iw;LlJV#0a1T z{kqGeYDqjG&>)1U-t83BVSWMjIRZ-+3Xr}s*a8;GDZ8{FF`zzRg7i_kfouet0Sgb! zp6GA9ws6V3;)Y{tg`?XBgGDxecn*aY$N&{_-bi3%q9PhebZj;Ki=U>n=;uOk0%Xh( zRN`apN~g7NF3GPklt76px>^M1HPn#VdeuMHDc{~iFFIIQKlOk3ItLz6qG-*wZQHip zw{6?DZTq%u+qP}nw(Y*%(+|nyy<{e-q<%r=)cN+>-)gx9Uqd%M9e+AYlP2vc*dc`v z21d&h0KlbGUm7g=E(lg1%)6Dg8y|3Cr-Et$=*XT#&!5X;902lhkY)+l{wote3J6Xx z;MHehl*Zt$9`9zHT|gYyi6z|Z2!`Q>Obd1|wTx|E1`#`+*RT;mfO<)93sC%T69p&E z*H6WcexElNVLubOJwjne+^r4jZY)`@R;D4pY*?-|_f2fi;USiv{wEkwK58x`Z!j+L z%UJv*20Y@+_>GriVW~lTnn5~h;+w=5xZLF%duOsoE_B=$;&v}h{|Y=rHlxOfZm>`6 z2~#!96$NsU^+pMrERoohP_8@*T%X>?$Q`RDoMbiR+Q9H^>@9LFxAl*H5gb?rcUxU3 zc%8f>%#HBf{FHwGKidQPh3h|->86GeYiC5d5MwRK^Nr|&b2REA>Tr4jZ=$9=iU|0) zi+_ve*cWym7{}y<#HuPM>5{nN0t7;D)dh1D-G=B1e(eJG(xPGV^{0>AhB2a)uqO@snJ+t zETn|qFBf*9%3oj)*_9X|t(ypyK_aMB+s;6MTvyrWU7nd@9Crtr9wzMwcs9k0<0UL% zj(|^kXim~zfCsAlMkjB=HhQS<=RK27;=es(UM4uO+We5$$AICVw9mk^x>CJI))O6Po{+^Ad<1q1jkv`*8f(PoiK&nt;aAPD!IN0{FR66%uyHh-21G` zV~w=?#u5+xWmS&&Ah@k;+1}_EzP&;6iA@xYg1N9)YFqfDZ z{W%wJVhgiC*R>5*L~&ORRQ&3)$s@7$xVYH9c7eBm)M0@kxkB)w1kSV?fDgQ5x}9Jg zG{iV#iXXVbcY){^>VFYW-o9rpV<>+NrR3e#fv|Hz8)y$hILs(v9?vXn)70rMi17nA zOqw6WIscKatbH@uJKVk1BlKb&K7qK49!fj(N-CYks`e7Ts>2{kFgt%(h74Qov_NCr zNBk#^Rv<7zREM$pr~(TDSG=+9vp*BZifJ{d{hNA!4r+mRn?`b3-1ye07>oF{zBi}t z4#C+U{p7cQ9=qvzC8j%1Ex@m^kCgEu_34%wLqW*6gomM5gROM0c~ff}U9A8%X2fRb zhV_Jbo@63bCG_@0&hCaPfsOBcP70BzK1`_AZ{E-P#_=>wx7e9nkTr)Rxs+23^~$}# z8*#Aw^1o?K=$>RI&2C}jl1&3AwDu*>n$^!kroi!+^}BeEn_~!VDfr=ss^Vd^)Z+<9S-j|WkFpMisi6Ad;f||E3X(tI~xx~tpM>< zrY<&LyA4qptYUrZFku62gijjO?x}cDRMB+xB7u7n625zNGMw?OzC~&W~cI3=7e zl);k_#DiQzzw9+Qo_pSEXGN{cz@O^}WhyUQK8>m%mR2xrFa8pp;^XGWPSX=o9TpQL zz&6B6Ws@{6>qgR(ck@3>zY4?<66hBR060FGANF-+7su0pSOq08%@4@2sA7vIQqX7) z{`x+o+^yH=H?CmBBP+)u#;1M{QfPJ9>H0XZk!bgXc=4M3XCe2UrORx}PiUw{VI6C*C{cq3yznGi%^CRfxt(4I#L@xwb&an{{!H z=rNpDBU=vX@7#w^NDuP{GU{9Tt_C&*oJ^Jb2xpqu{o)(h3~-5XC;S|gwPG<9HiU1kMD^eRhhzMLnwA&pX^`Qa^oCD<_b=z5O>=3{|tOwJY zJap_nJ)x^uhOuFr8rZ9x>5n9C1p{rHVtJ_!os;0Dn|e}dbxLlIuVx%`j{XItF_nF7 z&0g6rzI2LB@ID{kUg~qAm*yWI1B<7X$Q?zC{;nnpvl?^>(~){Qy29o)ND87XsH6AW$^r~O*awd8iGGN!J?R0 za5}NU#G#T`X6*ZfgZ%RKcgd!h@A}UzS1KdC`90Qr^|Ff}G}c{1Qy+ zLHt9OVt`)D5Ua~;HvE|AuEvIsfTEVW#+~o2W-o+JFIhV6Y2yNtmH=^uh4o2VOfnAJ z;;zDsrg#cixwHg=7OAyDMaDx1sbEAfiNL5Nq$PCRRoxkCiZDZKcI^ugWtJ927u<9t zv||XR(q&JZcE|Sygl2*b+zcUAVxKC1z=`dwspV3kgpgk$4trizLKU?)#7Bi5*ERz~w_(}B}vGZlsrS+6_vFgT*NzMy!#LY7J%e$zJ z9xBuYpVZS7*M*-KMQ{?S$`d4}cM0JM=U>ce$XXSPZPU-}VAle6v-)J8_C6!|A|r); zGiLUn-IEU8x8Qq#G44~l8?G_@MWvKZb9ky5rBJ=qskh-76lMxCt(mARf=88i)D(nz z8UG@igeDVLV~;*q&B|13=?Q70gPj>?gX@BIa?RRjpV14i@G0Hp@`>uYmAL1-@eJMx zYM_^TspDk#Fwp*m9fqHY-|4`u&n>} z{TEz)*6cH9+78mC8o!UoO75FE_FinCWE9$JhB)5jln0FY2+DL~zIsMoZ3*lllaHnM z@Z5>o&Vf}<7@rPE&pyxkYK+}ZdXiILt|+nKn0avF{GMK9?$HEfA|#16B2)B~(^;Y! zH^nI6xq8{@7gis9FjZNI!YYwq}WLC;fFHub75W9IGR^j@Xpc8!bS z-H7&=T*&4y-QJ}jbohub7<+!@em#nqy5AJ|hF76+igTXsMqX03fdiI8s^x-TTr?3sL{m+}s@uTx|iTc>QF;=M{ zm9Dxn{aTUZ^7#FG8ln4!sO+VanA28a7C34(w{hJG%3MRu9KtkSR<|I)_dNhe!AX*~!C_^V2ev?x2hY5581{Fo+my0HLy zmF43|UHUwY6~4O6dguhZm5Ni)CZomp*N%5k3dTBK5ssbNKhQvj^jAy#I3Y^V3Q)dd>IS=mH@(z??();ylAstFaj^40->4{)3(V`?*NuI^v; ze@WSLd~smL&~p?ElxA1!>=qY;NFQ0TUtfgZIaUp(h8B9p$TK?D!Qog~6|9C**)f&^ z$#*1AZZP4FP4dSSANNa5YYS$M(c8)?Ld~k*aHmM@#|z5?pl76YWIxZI)28fy;#U(L zoy`TBxOL4v0}dPdW=BDi?|j1nQ>Y7K)q#&-rxbom)*TaqDI!lr)V-z1kaZyxtVb5j zR+(J*0cb$h0CpM8FlAy(i7nxi+R%_-Cyn<*No17=m16>~py$nT4PI+^C(K%vM~w!> zwg&nZ0n;Cl!SGN+#Pt)HBEeOO52#?iE!q$(fH=`in)aOfvf!;S$!tkRN(lviQ#HiD zV#jNsYlOas?kC-lg0aCYIy2_L(!ByS_G9YJJVmc01IrL6%w)H~e9{m|Pb?m=3Ov36 z&;2aAl31Kq5%4%paLOlKWYpvYT;?#bJB8n3JCe*4F(@7EGriOg+Rg?Im>^2R`PE$VMmU#804&Z$|)lIu~szRhFSc zE#-Zt1c?Khl3yz$T_dmta&C#5n#7=II5Sy^yClj$pXH=NrPh8;~mrVWTX1AeG$ zFjoWFVE0ci@U0YS{GSZ1 zF)%+6ER#=aWkz+u+2xCbRCGlEX33bRFL#iPsdOiF>STOS*AR>=DI90@L4FOy4gQNsph&uJx zK~w|k!9eKuJsHwM`>q9MvP%0eF?{kWf^ko@SR>qTWDULGx%6Qq@pnH9A&G_zeH0yR zf@in-gp>?Z(K7yhhO#A4>e!g^zX^Fk2xfDTb*p|QfFDQqQ&iG)qc7@)VT8i3P5`dm!`O2L3ph7rD}o zIrbr7Sf#jPZa5=u25W1(!`-ewP`*CAYa=tYB!3tXLD-u|98Gu=6b|(p{=7}7A_~rc z_Ybq@N7SSqC>;Xz;jgeM_w>-J_@W4I!w%TlR@k-^3krRcqT42}0{S&bg$qZGxGCO9 zOpQwLKX7{Vp_jA5+pB&t?$+=VNuWhN+zrx+Ay)m)^t81D59IoVRi$6>ThQ!u)7aF| zkQ30c=_M0*XrXXmHY6b^(6`GCDGE9PJR{>Z{0xSre?yj?U%g6-?xPpj)>NfU$On?2|3sn4 zabqA`jgdS2yFyDoS-Lv_TSk!_09u2M`&X3XaHs8M#3jf97PR~=Va?VOy6B@iYkCCH z9aA@A@oHt6CT*?9dSI4}I{QcN4~pOM0*_Ggk6d*G0Q%E z9z7L;0P=+RC|WK_DqZcRx<0R?_nv$?7-$r|$FJ3H*fX2H{&j%k*r(>SZksi!P5DaN z3s;9zm*Rf*9opKFKRD5vfTd;lgV(j-NMH+AhVb_xb3YA~8z`16ud4PkGS3|JbK)!!rZIUQ_2A8={ zSns+rh@-s-@S(&kpXxfeQ#wOquwoIxb9D`pvp^1MW!xa-*( z8ih0#(e_2Xqt0l0cP#U^ol9Z^{QFh&w?d$v=Qlpp&{73QE9V-$cT?4p30LJr6~1(u4%KU7`m&$!hc;H7J*O zRItt08%R(kNQGds#a)N&!;%bbRGRp&+Lup>Jsqe`d`af1rW8d?E}Lg-%iTqeDmx`d z$v~rz<5JBiLhrB!QCAL7RaS3TeX?oRJQ>EYi~FT$R#xj(z#>_(3j2kJY~WQdx|YOx z*}N4r8=Okjr5>=`uD)}hv?s!uv&QaN<@BS!%Rx^B0SS7F+y$mGIDhF-lubv?Oi^MLkeqEf=iWMxHP1l(H|{LY}HjhUtt7&l%i{p9EJgu%CB ztCxpAoXSvU^Fu?t1`(Q|%3?g?t`}DXz-Ep%t7PVQE4sZi{jIk{Ur;+L%X!O6dm=^} zb+qQr@!agNG#Ow?39X5ps)3=Gurt_TWrl5*<|2d%iBx~CRP1U!y;P=kRmA5vI+m#r zi*=bp7TAhnj?1j*xmu7qA#z*Ko=FD(;Mj8+Q1x1r&wUcG%UGJ_zwT(;j%(kr^q)oY z?#4pIV~7ui_ya6BQz8hC(}6+NsTgs}tJSM1J?en%gVG`Ca;MJ!aa63 z5-!zsw`1XAz(UQlz9cagdnsoZ0zamBU8!m{z1C>-iKZzp)cV~4;Esk`Db5iow-e!N z#c`<`Mp2ijuTg=CQCI>rJA(7p+d>uyvoTj4``Y{q3Li=QbeRjeN|>L4wCN`i^8g1 ztS%`0&g8REF9O>sQkPTyxoZ(L39Rd$CutJewUfj&-_W^q{PYI)<*8dss8de3 z=z(p5Y*^r;Jy70S)-58Vu_R-r;HIy(3Suc4)fJpvX}DRT(G=l&1$qqDd|FKDN~a@K z&XUBsE&%LcrR@8!=x(B32gJ&A^4mu9C3`fcgEk~-aWRKJYbBNMKu@*IZ)spapxQIo zr6(yttOP%WgXn02jAI<|-S_E7ln=*6hnV|XI{{f=>v`e$J5Ezf$MQ$0Wy?UH(x>u5K84>Nw(AP|Hk{4|Pf&;qyw z0;Wr6$(euz>t@kPKwOff3mh6&WNS@bjwZJWJeR85F%%vO7`U!|GjKAWmOOCu#jn@4 zHE_PEB(cG&Mpr5srsOnbsABER@%)3-aW=DZP>0q8xJUODId*}N3rsc`@+}`?f!_8^Q#mJ@4Wuql)QK=uP$*-_FKch>2Oo0c-lP_8Sxcp#S&BwZun>!iKsM;>p zyY7-tVu~Px`}OVMOCV5^yW3>PDtg&H>+CaCv}D3^GFqW=R%_J&y6{irhZ0*R_SKw6 z`T}!120mkb`sd499L27vP=gkh-z45>g_r2+uq&??Z@BrT)k&Ne10~)~TYPVeFnIzm zV8_QMv<^z4^byk%*qWXm@%2qq2=VUz`o()Rbn8>{MWSel}AA8bX_yA z@12v?cZ>!f#mBXubks<$#^l1ij~0xCcPIm@U1=_X+>t!eUS-TysKUOa7%UR>ZytgjEB z!kX20JQR6J#b{vUkG935eRc7*5PB$(7i9~|JO*1@gtu1x4R-8_82v>x5ksK1v816C z6GmA}k-S7V%-}-2YZ7Bpk_@B_q#XZohaOV6vPIqdfb|SRXu0~XnfzCJ4p}z z5eB@8P*4f_#6$-BQMJ9Z*j2M5h6Eey-_rdV&=@3+8HV&44=`3Tu;r+Dk$-ExUGkYB z5uJ?Kkel+;mXJDI>m8#0^la*qubI-S5%TUv6n>=QA^^vB=heA47A#muohpu5Di=ts(d`z` z_FSi%2XIqF(JUfFC_L6Vy^Oi^&u?Vh>^k5VoqN9!tYj{;&m|RDx=m*4r@C!) zdW)jh#hPmZt2lLGb^$@G!ri#1X%lIO1j^0)Vy|df9Gw&4GgCS5j=RS_hYGv*uVL-% z+_`h@?b4+*PK3i+9^*3`A7~|Y6SnBTt=ci-@dak`*;5#_Y9-b1l}f*G&4~vK;zcL9 zcW9MGwyc#Rg^3c!a4v9jvpN1K`c6*aUCvF8m#b+!+#ERZ55cj0^PrAf;N7c^9&6wXqGbcT=x*1|DnoJN}6SyBNAC%LrW%a!9f5hhX{^lp1d< z=#-7dxXq7%rM8|+ht#S)A0AH+O#A0q+XEUkg~8K zT`L}HX~DAGJVCpRyO&d_n)r`%%+thUfJF_iz|pedB|KQKTzSxBtfFui`_MSv!>s;Q#f|T1>Zb?An*A0{@xO2m z&O_|Emp8>INbL z^XwJ08C295(k|`X!TC0IP3oICuZ_xJ=XEPD_XI&@%wK#vU@nU+ohSfn!lJB`t#eH9g#2 z#9B}&7d(1g&}#^YehCl3@ulJd}hCU{R5(l<^^$eKmX>$DnO;#L@LDKg|%j zwHDIzSVkgR{H@@9$adEmGbX_i%u*VjCrTy8tl-us zKE3r#(3z-Su&lTpW|Hgyg7#x-KhkXVi9)Zulq`TO`EUvhQ+S(Kez>;a3D)zTn%ehV zG&8+A=4{6uo$Pvq!C|f)lK9=I4ApCcqRbfF)uu0`sY<6)@YRL%U$j7kk4R>eutQS# zHGB*pZhFKpeMOih@? z0&FGX&J~O{V(ZZ$bWAWmA{<j6iHV&bFU~y3g}D= z?^#{9D`tZX?Fo59ok`!RZMkg6lr(K<`uO7CZk3(qftjV#RImV=%@7v8+aBC4UURIm zGC_&X(u1`of=-X}%m8mVJ5+vWCxHBppH!51hwtd&BVhX{?lIPEk+Pj5Gn?|Zt%))> z@%-w_H8i)kH+|anPyA(LZx3H5>BT7(FlWy#O>Oh&z6Hs7%L~V9SM7m{Y7H^qdkk;d z4aK_)1+OO4mwIxRHfq>4e@ze3z^k{U@?CoNZ!m$7+YOxeDKwa_C>WRNo|X%V1K zGYTHT)EAU;<2_>6qOjIsr=V1~rbkpQo0Gjz5)mZ6yil4=?CroEJztwu=KMhY$MItp zQ)16{nM}S0|A9IGOWar6bqFiPx1If?BMTi@{|m3cjyKU_u`|Njo6<(|m0VegE*{NL z*)lX_b2mvP;LhqtJJRhKbD>L*JI^}%{DSk+t$DNGAgCSgP)`87z`yvh6a~J3R6H^e z%xvsLv_VEH+ODv7ZwFIMMA-KSZ6D(=0__j<9|*Mm3G2I^?P}uO=#-v@vvt~3a}(+l zsSHQU5BXQ_LHVR3ETcC@bEb4~3yPAIxJe+AAPXv4hVT2+`PIv(%nz9bMpThk(Cu;4wm1(g2OqQDxReF^lDajEr+DugY#j%Gjq!AzFVX~9*{CQ z45)raUlssrZ0~~yYNLZKVI>*9AaDeiqcR5~ciwpoK#V4km^X;_9+1j5VBpe1qSvu< zJ@(wo-qO#+Ao2)92l}cPoqfS%=j!%+o;)1j=tL8{b9`=Cll(#xYttuAQwc40cv{z- z@feIe zoQ?TH8p7Pr#llwQHhxhK4zf6JfgQX;0)D!+v)l}2AIB*HK6vZ)v`Tta3MnR&=om5{Ey#iHmRdC6T&VU38+q?J zj*BQF7Vp@CeOxSO-=2%82#rHdeg6X#Xh6~N2SD9GTBuyct}K0D_(KtALZKt0=CQX! z>ihT;TN8_O2n=vhsgJzq@T5dgd-kDD?kzb=bfl*WyJbtED-Fzmy-+9(TPBM4Opc8) zl@SRr#_l5H;|NfWfLh*UR9TLuK}|e-iq>%_9KT?m4Z;rQLM;~5`5K1X1QuRwL*?#1M3?no^*N6pXpd7sPRKLvouCSP&yvj{J=ZP7{~&c zi}5Y$G9DpNL^8)INezOMHDGt!r5{WeJFY`UW8A4Qx$+*hyeNURnPj30&z`^fLEpOt zLV=jT?Cb?E^(hy#pTnyvWeC`h;6TM|NB>cK*~0fnKWP*KTu8Z)mxR4QVvir(oJxG)0#S8a>E91NtKVmnu#i}d_#>649v8~3T6 z?99ch8F1aGg3zZv58tBU)uHDhKlzAKYd~xU^b4!nLiP^&B|t62#hFAUIX9~|jE~ad zrxjHN&%TvzZqA&gPV&`T*9VAJ=>V9krf(=y@pL*ewJgzRl{JO#iu|6E|cDkPGuWfS1CdjZM%w~ainwU-gS zy1m1Dam=Nhzgu=mpg&)>CJugIGOo*TNPL-+d`l@~!?&hy-$P-dW>QfVAQg!i1Fsp> zzh&n21t{_@&oNLU9kGHb8v(hsCBQDLCei5dv3oFl#-&`UKbA&|(V2HvWFv*f_LqWOZZ8Ji`HG8qBy|h^#_q?@aJ~WmzUG4>g%N>G-5b zfxyXF5L|p;8=%hvm@)V4jV(R*a-cd1B2I$CSW3xcWaP~$E%m)!%l_ic(G_v$Ld4t} zO@KqM%qTi=8}t%LY=abTEi9-U=oF;^SY9tCF}R{|CB!4t6z|e3taUM&pgWF><`~^kYiihtVwkx+=B8i*J|rN1_r#1^T^8$KG7K28$d)b-R0Yx~Jx* zv-@%WkEMU<+t#0s^CB>+!qlrmP!8X!=$9v~O%do1+E+f;@kQbN^-fEW{=@)fJu($( zz3MY3jJ$v7qcj(Q#xaD=fZQ!808yL)XfDFg2-N{$)Q(8NaDR7kQdtq20y;*;rGw>D zjZ8>N^9K&SZaMo9pl499TFr%NLCmYBkg&sdpd$TwU^8eS9Y@KYtpvM6*Mat3iq)e~mnHf=Fm^a!}3BDfh9=V7B}(CiVwTFXE4PcW7F zw?*HL;`keJnEtj;5da^!8EstcuoUP)iTm}8Mm{zql-1wo0szJ8AYZq?ldOHoot;{V}aLx5DrI*mZw2qR`X(?&|sS@Ogjyd4DidviLsT`B9(O z(*x}80jgjh^t{|!+=;yDsnyx^z25BAoAlL}*ABh$;%_ZTDnEGeG z-Fw3E*`e)^{6RyK7~vh<*w?T4@@~uLjQ-P2wk~+vn*Eo&wY=__pR*Qb{=ex{%rOXWY-(U8BiBuOwMP?Yn5gw z9j;zdVyI;*I0`I%63llv8I<9)gfXOVLF5cX31SSIJvSy|MEHGuQRV=t!SK%&-X1<~ zP7rU%5|lsEm{~b}=l8?!n~{x5ZCBuLjt_+z;v)(3o{8jx9GTjqf>isgvoLCw$W)Ld z#)3ZN1EjbR9)TnaZb^SH?&X#jk&E#n6T!zQ9&riLqaqlK7XaJE;}sUf&O-z_7-r7q z+_YDj`AC23v!4rk7S#qN%goq$_vV3q{xU==wbLlu>_l<7m}Efhk>d>j9ug|V*e^%e zW(hylv-7wkM^ZJ+!{8oGT1)QY1l|gv+B}z33iR{#i(f(RJdw@96uBWu4!V#1EQ!W(@w2Oc~^6fypK(Bv7i za0zd+hlnZ6)8JVU1wFP7Sb%-}fO<72Cv?!ulv1(8h*T9bmLH)(J4btv;Ys#Hy&qs4 zF=NbD8+K+QTpv);I9T#>RlhtWJf-rI8~~rHWG&HR?igq++8`azNUBfdjxe>Z*e55M zj8dd#>l?-OMA`gno-r>^YM-1BN@G@u;S-}5=9J7}%E^84kF$i)!~!*F6VoC`)aZV5k3lWLMnV|E(ci)3 z;6%4-Zx9@wL=r-Wp)?M`>$dt0GJPr98>}eJbD7R zz2{T=Ec|3`zGDdvT473?_1gHX+qVAe(z8spb<^7Pa^5LU9iPmp zkpgeR5&-_vk@q>~X_8mhm(HbFQurZm#OyyH-UkoPh0t14Xtj1;1nbe>MylL4_Borl8I zQ5h{V?`D>eAqC(RHE&UT_XsTk8#mx5+-JfYfog;cGSe0ZJv~mNl791d!OWW^>z-9Ps%sP zWLE7@HXReR075ij6eQF}MHNfcXF5pVg8)-%CqWlX*h|r8A$8Y{Pf~sQmIC>JA*h4= zZno8yK*pCw3Zzw&VrIMP6?Knqyc97<_KlgnV9$W~2!#;(kj@T7p_&yrWmrt$V3^zA z;~q_;gn&{)5~=4(&rWxvPc@C)V`mka0lo-(REx7tQJ* z(rIKryRKG1Pu)zCVU&?aL#6@Y{Vat99Ij`>5oOQLBr@ibmi88iv9mG`t`i`bapMW& zDAJQTTZ-5Cos|xcySAt746)@Z+!qBUJ+r*pmbg-6vu+w*jRNUh^q&^tWRVF1^t#?wiKSi6$_ia2Ip4V@1O`djBGDp>tfg;)F!q{-;^ z>k_ACL(0XQg}3Xl-4PwNlPLzp~n$X)1zU|5ac*(p>9qHfE*Ioh*$D zKYI^T4!xUM-T!>PUti5k=HF*^@->$AZ0B`t=h;3FOwqR&&L2g4tDQDiuGfE{F8oSY zsQrNd=N)}~g(A)Z0RSMt832Iz|54lcd%)V782w*M1@3Qo0^38UFQ{y`MHZ%1RHC-s zNWF9En&jb1i+9R`E}sVlQp21)i4?!$Qs?*UCTL&STO38W>hV%KcPda_pW!Y5+R^$h zo#$zgo^9vR;oe8YmanIui-+t5?BLt`bi08z44v}u=1CTS^BjEnvf>9j7;)ZsCQ-nKAD_ICoU^uJgG3FEcR}#22O{>5IW->=OCm zWBGjZR(7|G?DiA*&Edg~HBNsZ|JrHRr97l87qg};gck3~0^z!c7jFVUZ?nhPB|?18bkKz3*VoL`_9V(_3#b_5W&`C_^x{~Mj%X2O!w zymDvM@M>x95!dqt=zFl*|D9-^az-n8Wm7yEE5OfMI0k2y$$>})r+!>J)Au|&Mwej+ zfB_4@PLn8Y0i9l=QUr^?ogN^suuDnOZHBH7!|qnTejt2p(#d!d*}c_jyAn# z(|XlEVEt7!4rW>Fk?DNkFQ6EjE(`w90QOTB^Bl}Ij1LKa;xMg!z6E^e8?d6+02t5K zqmswP&lw%{$~SOagh@tD@DBIyXii|qU~8x8^*NZEe4Zr60)H4}Y|0exK|bc*cyp|K zpo#oKOs}{nk})&5ZtA@!h*x4Xd%(vDI2CSS$R!S-KGZ`ZtRu1uy>P`SH4-X3@t3H1 zk03d6WM*|11@?>U9J-V@41ji+o6Hrnxe}DQUvXxjMBd8|%uM-V)|LXnAtzexnFdJG zg)R7~Gagv%C#9oIJmfu5j_?UNH%~^yqwC>YEqtTpE`z@R7!#cW^Ewg3-mE z9%&Gyz`c8+TJ(mxkxj$ugwZsB|hMI+ZX(@Mt_Yew+LbjnR zGOv6=L`^8^lZlFsnubra%VS~cnf<_^ja4ZB26aw5HtF*wu+}p1#{JO^mR>d%XdF%i+pO0d?d^5w}HY zg}XR~gG&k^3oiXQ`)s#=9zSWhjs0_DJhbchC-5qm{7tX(zTe=bqU^TQc@BRAMP;-L z$T+apc-tIb-CElj6x$t%x{%oaRlt3wt!si%3&)NQ>7NqSAhPy!ZaDf3a4}f@&ER2&^T+!+Tvy{GX)b_^3VwxJCEi=TZ zFqYRbZUs!ZcBy@vH^^@e8SH{;8E%PhU{$a1n+ZWC+T03vZPB-(0%TT@Um! zk~-RJdVGL`ec6c1#-^J?G_Uys5CKgjX`Y)ow+& zvn{=xgf&jE7{LQz;GQBw5!1O+8K%;}vtQvm30m*T5xX9p-=)p(;yXAwF+ITq$D?U< zR=_e5F#VNAOvq)?EDHx2F&GsXGqV(uRqNZ#!_`rQx|@UPm}7Xy`GzqR-M9YTKEKRp zfXJ~0tVFmrDJBHd!jBDN>P+La7{<>Tn~dzRSZrh=<5xT2YFb6-Gmyj4U~cBQv3QX3 zwHytC(qcUB)WNB8r5sM`A+jgSGWYr*ay7B00|14QSbZq{o50ZnN&Nl$ZJLSBSH$Thkn#43Q0#q<`;8wc4|^=+E%CVK9zq>S**_WF0Mfu)n1nP>c8US<|&;8h0U90M=8{4@EP+0eFn?_TV zs-Q)gp!kycS`p``NwVL+_dSN(wY5OFgA@mRmzSL~s zN4dWK#gUj+YigxXPfL|*hLe3v_725R+pbz2yD-2mU6QandWL_6hS*^lv*25bK*BWe zYCiG+3f*Q>FC+~Z{g!vr2#3sDDH(uDO2YY3?7V;LLoqoZyy$TtY;okkS_fzMieMk6 zja-d`LUL@W9Oh+)$n}-X2zrLuP7rLar#!WI$@^-!xIHTv#vk`_tl>CE-3N83Xbag; zxR?EOlPFuSy44CH2>NRTZ)&}~o~C?$mfk$tcHvK{s?sbIXD1!GWlKz{tmq4}4|`vt zcH-y^|EB(taU#7t2^+(x*M6H0fFijHlqqLJ@nbN>DaQO=@f~MKAj7L=`UG6Yvs@)H zvxCFL{*@5GiLPwm568>E?r{(Qo@t{#a2xRezTl9J zyv&Ue<8gbFap!~%-|OLoaJsqHVhUGI%Grq8G**rE$W=s&?B5HV51I^8IZtoPeOm2I zm2|&Tuk5A*Au0t53sh~&%(Odj!Y_YA(G^_rPXySo#-DifZf|s$(CFFa1a#XyHNr8N zxtA9vKN_jk6EvB?_Iz%X-m(k){u20HeZ?-a6ExNgS=OZo*kKdO^rddrFFTxj+QZC) zz@0m_^t(3rgY6v%N-JC7xv~I#=HzPUd(&Z-0pd64gBaorveLM?_qCC@cVcWmXt}&4 zFeYt+>#0iDV+T0-1EO|avqw-}OkX=!)TB{GBdgrwqUH#}`Fe2173B&+z-Mz@Uj27n zYwW?iU#E2jra1eDPYxOfd(m4$W&nEN%d&BV@2zl}!&+2inrZ3da`CY$p27JT%{Do% zpBe@VZfoC}6j#nY+W7&EMMXFNpqMhDqR^aE`T0$VaKM)NmhCPV+H-}CPZ(ECSi@W< z6!~OhsfNda)3LRvo2dk^W`C;wVDP^i-FRLw@}cY_q&Ccz;i@C;(P3cQk<@IH$6Df;F5yr_ zcwwzOw<9-9_x5!z7aUfDhldMIOIn(kDgrY@mmI0N;dm@W=MhgYE3B+@MWkdU1PLwy zg>E?YQQM;{5>;a!#?6GOT&u%lM{8F`_BzwaS*@(iyUMM6687Xa&$>{dby)vO_T-U{ z;vkwG>9tt!%$qlzB*09^hPw$Z~?k8w=d!c#1vtFDyz7KfZ}VkD^E@lqG|}iTk6qI_sOL z9`^8e+orCBb9`G%V-73HtH9u92d=O_0!oL{bg;ZFxCQX1X)LCWt|K+3HU6=Y1+~i% z%Z{2%R7^DiEH>{{qRGnc+pdV@Xq;*T4fF>*^AfWdW_t=n#5^ML;~?V z5mmmVX=*9Dl$4^_)4V&AGFCi`VrPZF{#c_um+?;C^)xy@Wrx-3%B0S80mLd^*OFj-)U6 zVj<@NB#-njWTA1xpHHfc#L|<3qK=ZWcbwnLEd!c=Z_D8qP+3o1nAO+*fbue5UWi!G zrD#*f6-Z#h8;K6iX=@2uq9Kmkc)Dnz;SU|8`-j;QRY4O>M!KbUy{|H76_={oa}MGz zHgFVa_v{2TK@R5uW@JHoR}93ekt01|<3v{_WrSnqLSq^>EkGQNv;gQajPhUtqT_!V zb0LpdfnCC8na|cNy=zuKADMXr3P6A_f%!CyuAzjgx&J=m1wv9cm{m8G4XB>W!8P;d z{^Usb%|rjbm!y2wbq}alttL8HfG+kdYf{sX8oYl*4uydj-G;SEQRVoTqL%)`@Ai>k z{zQ}#yZR&`@ziSwj!JnAZ{$^A$*m;uR=KJ66sZv_=MTRpI>sVhDnzE7N$4JcyL|gY zjsEhTF12Euw?qd~?FQO36eMH3@TSVGhPll17o<37MO??nq^l}mo< zg)zkHt9dew9%}J?fzQD(uiabec2Vi3P|08efl>%3S~`^Gc?ZCo&eY3FQ-2pCn{s7+ z(u+*#R>p)D^|a{fe;YM9cQw_8tQ|Rgaj}_s)qC~#09Hu>_ps9?nIJvq<9&GJplY^? z88fIpcBrSi@;U@cQnIl*e7IN~YjvwcGb&DqV*K=0h{q4_;_X9zZZ|BlW;W?VI9c@TjY?roFJh8&v>I#1 z;i;f(&S`tY4eLEB?SZP`dgBN1e=8M^Y4lc__y7P1h=2gU^_l=ib~bd528MAQ@mTs$p7otcNThESZ z)48qh71(|^TgMGeVabcq95j$*r|eO)oaXKK{CU1qW5=LVASVvFzDs=A*PBDuYxQs4 zgqZ4Q#w+nKqQks%)OW;f1M>8IloygBI%dzscgM%jOkABV;j2j_=^33Be2;I4?$6yx z8DHPqJ&Pw_Za-b!H!)b`);JMaQ2)zBbig;@Tp|8e?_~shjhhsb!OUTlYypD)vne}^Nv(I4slHlD~j|g42e(1V)r}c2{ zCD+l^+4IN??KM9W5>P~Jk-bc>Uqo!20(kwC-A?kC#y-NyDrj|W+7&pYGN9OXTla*Y zRu8V2i5vhB-*5dy(cwI z{X1wh>H7&JhBtrW3`*yjukTiGOb?W$0GRoazQjLQ-zDM}kc#2S+naA>A2xXmJ50C; z*E9vhq_@cJrm{#`MjYsPexZl!)LbNb>yIZ|%p=j(RwqG>zV1kY=B+;-N%Z{QR*3@R zxXEJQUiqKeU?ZTtN3S$%PUjx&1N%*r#6@0=2}3wJcumu+y1OelW2)6N$z;HwmQP$5-<3a{Yj<52yUym-}YS?6+}a`0jUK#kS8R^ng`9{1~#+4n%37r4cEgl~~h` zyToqxCw8aLXH^d_$THPz-v@0XG>0F}^qv+3yegt=*q1M80(?#B&aOW=MP@jzSn;B1$C9jyp7m|1flQ8~_KyzFngc(enD}sH-_1@# zB2G_F{B;gJyJTr>x4lgrrV=A0-bbY@eK}}rw;BajXkH9j#5ItfjbT zDuhFtWI<1a;(H94vQ3&r?nzqu5h3!uKb!zp1&Y(nS_ufA1Lw0AHrA;Sz{szD+f3Mr0s%@OYpJ+Wf(B2=UOZr8U zH745|8ZO)#LCQmkLJ@ZCRyGXpJ#UtbO&Y;gG%swG?eP9>=I@y&&`0K?ogrk@7~0-N z@}RLmypZkvMifE`t|q8KayUkw4z61Ln>TLzV!pZBwEy`U!_chLUh%-#_wn)F=Sktu z%O5_;0*X*s64%t%s4i`~1?vCf=`{nkx`+VF3Y zj;3+vax9J*!5W@i;N*h(2;paI)Dn|>j$9}CO( ztA!)ydzR?aY2THxKg~)4vNd(Zm)V$k-ssTfpMtBl(&*OGdKrDJnmTDVpIOSXIhkgq z=qxX`=#{mmngU!6ga9gAB$Z*{JoC{hd_wX7Y}^v^oGmW7^bZox>inSIb3=eDZ8AHw zfBM|lS8@<2Kfex2j_%NZy_2YGirA@IyoZx|Ean+cfoh)iyfbh~W(t561a6VFaJTtV zvI{2?tGw3P+24^#$Bjw5NWH$@DaNC+(;30{c+n-5=ZqatK@g&3vHKdFT-&!k`dq7V z{0ecwF%Fw1I?Zy-KHQv5CU|c6AsA{-Qnol9x-UR=-)ACrkEPoR-?hha zk7w6Lgx0c!fOYmLf!<*WQshD@rRs6N9DXMmecL15HO?lNaqs$W8*tTAEw^5{0EUni zSla{uxSB)-&3Onh^FvSEOeEp;Rq{QafD+hu4310r+9yX|8jw%|^~|bTSfa;-8mZ8; zqbXtQK|`RUDYp{-efv5v1y+{lyQ%2AzXFolOP8JAA7iTI(;dX%fy8mRjK~+C(uA_; zNH6}VNF1!_uM}=^{;6^G>q+SE<1aq&#hM0?K35ewiRQ?`ZmY(lFeBF)+>OaiG;bT? z=BovAh`M3}iMP%u6R;+269N=T=_KY7X@h9H1$w}@+7n7#5eu)YI8VCXVCEv5Jl~D> zD8UW*I`_zd;EZT^ex|EOdRBr1{5av4UC^H*vdWJpVh3RkawKjcb4g@KpY}wmL2d0@ zm@A7|HK!KZBA2)h(vT=xY}TNOT_N z(J_^ktr7DXkUn5qt<;qQS)mV_NKn25NKnMQRlH)exl?~L)G~s#&SJQ;dcZuSyFkp| zbwe+q=%rife$YJJpm=Eh;gHHeI!Q4=$3FQPk;GajJ889Yg|+^S9B>{$%M_=~Z;d(` zn))*DIgBQI^d@zy;0k`CwuiMe)0SlGYu%u z8DIfo^*`z54iCgzks8=w9DJ-#M%Cdl?FZIkDgknx8pn;CUFV%#(D zw7g2@dCIsPchJnwTPY9#ar}4dSmglZD7M;`BTxGh5X`uF(3<`5@U4Bmi5W71DEzFu zmK=3Qhd0q^6L2X?m0`!JVZOwLyzm~{N=Pd+|DcJ~O8c{gfqhp)==H)!j8H{dYtEK; zp%ILHSvTnVph!Xr!f$4g#LSOpZ`Niowfx_T{6IoO zF7K;2sYiv{4C<}#F+XcQ*fdzph^}w+Uqhz#uVKfg?~O$(J0^<32cU&feU}ixg*J$4 z4ucDDEo9${h{2$K9%T^M4^(exk`~XQ!ra#Zj22Z$cL$6fZzJO@E0a{AqCcpJpjn@m z+<}Gvh@1*#KbXQV8kxQs4MeJ)0wK0kfqlHUS%uH?n6I$?Q_P2;Yk$EW7$TO zL~5v47}E#dNLAiNoW&FnMiDd5gl=MLs8i(ls{?n{Mzv((D>opm*eQEGeG(_qFl>}4Zpl~)cd=(ankkbatCJ<=Yv zgF|w4j~i0)t?tn|b!73=vz0WN>~j9WjK6E`IP{Kol8xcj)mj5y&GV;c?YAnJmg%Sl zKwFI`GNGG+2b%-day0!OtODI|qdWm*Sc|`XcNFuZ*f7ZJwD0Jqtu&+%i1%P`UZbaz zlANoK3#DCa$ofhSyvrHy=Vk$WjH| zb}`$Q%3NksmT3lU1@}g0>%*vUFy>Z~?6gyIHQQzqU4h0H#hL&OZCq9 zK_95RO)t9;oWmJ=GObIk-`8-fL6YApOm3p0KmRhWiYU~IENvDB3T-l(yvP-3Ig$hE zNzV$c6i{iYY@bpY}ep1)tgzTEOy-XjMQ-Jr~57se$f zq2L-62hiOOG>@}V8?D;c1)ehoA<$Ik>WYJjcO={5`U7`${bMwxv+eugMH{B&j z3W_$WZ?6_jnA3BjA(p4Zw}nfy81QN9X(&M&Eb?90j6Nr%KNTK5{7GvBzep*CKC>?JS?V`}gfe zq$fK|YlME$Pz~Id_*`-jRX#{{0hk!49Yt!b_Zuc=(-wRnO5A;># zM^?Rw_)^9N_fG;s#7z!3iEJ?81E0oB5Ynl2rFf9zWRxf9guhU&g77f|R8N1>pecUF(^Y&56hz?^f`O#$6-R~ z0Si5lL_!i;#nI8CJ>V9`@Gi{@BK5r3@8ZKZGWpW3s8Pm~#O@VjsnAOEtTjc8wCnnC zVUZYDw=z;BRS_bRlo1M<3knwIk|KxLlwm@Gpyyu5@)LE23I39isiq*xm@A0(tJbt( zLSmpVA4?0*g>5gHYCT6OCCME47guc?D39#w__7Qr!5Qu-n<)z;_!h%UN#)_2J;!1a zKXP-WF}F4flxQW2Z32%Uq;L2;wBbpKx$Pg0<$Hff`IC(2 zPjvZ{%If!1`ImwqaiVUQq?5F9;6_}A*Ru{rrVT~^p^7b&GSiWgTZ!HqdJ%POGnB0F z%Xf*Vk2cfF^e0VVq;ToABr{e%guCPu3oYU{qs|Z3%F-~H7Tf}fL6I)^BRu9JCZ=$U zg%DkRHDRk9sFj{96sktd+6gp~0e-iTFYm&UAP^U76F4(YstcSHZpn)Hq*uODtW*p{ zs^y{93sE%;*#efpTSNZIU@LiQKTr^cu7U zTNaFDP!z-7It4f%2enqfB{W8=fTA6J<=&O4d)4uoGb4C%8=gN=I}=SRlet64X7rkZ zICM+b{jrCti7d7?b*=jXwwpvoC+4ual{TpKZn8Ia28*Cu*N@CezGI7$CK9pXy54nNY>&a%x#s7(cDmNpG-}@pJNf#~n`e>9S`Rd77P>R`4GXzI72xJCWCi0L0`X$E zXMOWQV;C}6l#T7@KM4_2A_SU2eW3(Rr|u`BPZG#-MZ6jzDAVTIH`lOfa1xHLqt3ud}mka60LHe6B~P~!U_RB>VCKSBi!GyX?QSU z;)Qxe8Xc(<$~%=AWBYL41nMEJHd)fi3%QqSy zTrAzmzRI~9(kyCPy~ep7%2vXgT;wGKwdK=rxjouwu{1RB4gbVmXusOs=~+e^UP>CV z6NZrRfcjk^xc*eYXU+v_k7AI3d4wqx_n_Ov$%wzBsU=JZ5EwYajx5zm-KrF1Mu-2; z98rJ&tZWv~lr$Oc!; zyj2jx-`o-l0Y>HsnIfiZOOmD!ax`H}Ev`ka9wVci4LW#R6S2pvB;qEdWPcSDiKSo+NklDyKn-ES&N|~`!fcJy zDooF_5=qbs?sQG32uo2CCksh33qq-ta`jBAl}2fbf%WMSNxD{(0Tb*-Li^L`5G zb5%03kZ@b`Mt`5QEzfD*S@YkM$FyGS#)er)~6E z{-8FQwd5pV&Z9^3fO4+&fX=c=tB~_AP=$&kHcAV(ZePP zYQD}V?nFR@bXGWjrk%% zTkw*P*LFHYsA+OvPyK^WnU|<-aADa!FB&eta(iIp0IN--N1ms)xtt!R>8h#%vH7W1 zJq~>RBT@6bsew9QMT??{$qyssjn1f0xG`cZ`LC2gZI0>w@H!(>vfhp6kyoVoZA*J9 z9x~sD z^c(E~t9+86dTNINsnQTHn0NtKRt1ryy@EyhvT2;VH|;vpoLFPtl5?TO{QUD8Fnt#0 zj6V^JB@OTkfqgaWdPD*1jD1!6*Y8gO?9nIz!!LbFR@Qz)o))w9APSuAfDK6r=mgH% z)%#>B&4Wn~n@l2fUNFu5CgIkgeJy5sQKJt`>%x~2IEH>L`ewjY0?gzxmpV&s@+h;K zp*f^j$wj)^X|@8@oSUu*;c+OO1z!AUvDs+S6i|A_re$6OB>TXh|8k+7W@C98K}QZ*V{u$A zQdYs(?PYbaCk=`|(_H6scW+w>oBLi#cS__aVK_~c*kboVeZYS2!7$95xuJY7kra>i zmQA5*F^~ACd=KYJkl{VhdBE<|3c06;qbs!}xf3h1Ssum>@24w`q|=jr4Ye`17^Dks zx0M$c3Lnkz5R8O6K97*#`;dFbU~#t{k?V=K*Kd`q9%2+eSG_ix5M+sRoIEn~{Ii=M zfPeJIRm2?|0^^AiU~OTCVz0Dcq}#jvcxCwNUV8(aQXRE=thzlmn|i-OM##dH*w&+@-*jm*?H{JQ~e#i7v;(qdaI-{$+JvqYZyH(DfyYoUZr4$4# zy1q%$!QvbnkjTB>=z#VGEA8gRU13lcQeb9}_0x97Aw?cahYEsm?Jg~G&60c~GC=zI z)rCJYl3lMVP|C%k3@={k+B|m92bD^-zt#@x0LSt@`@ zEh6Oe1iof06YdpzZJ6Arr$j4U^fR$1t{hCk7S%BY^P&dGrG`9Br=R_2WxRO0Qjx!!S-%mr3)&*d4HtT_4Cu^Jb30)~AZS5tFVso4W107Fev zIDHU*;b`_bzpMx{>kVC>WEE_rIjB$ylk9PUxF@4x`wvRpiFB-JI{^MPos-Cx$Ve@x zAeEbI8W=LPMX)~i>Y;41`gF3{A5`#QTzf#b1@~bdg_{|#@oSK0N>3_p@gp!U-#tT7 zw+h3z$NHSwpk%n@tbE${dayh3s5!C#3^7EFTEe&I=mKmAq(EM%RPK3<5?kC|!fI>u zEnpy=05`5@Hlx4JIKQ`}AJBNYI-N3wVNMVsp*}-#!$qzfB2KEIw;z%C2@Zc58(_E@ zQ_nphS27;P;yDdNq}>9TMVjAwU6rVm8@{;_={I0_z0KiH7=>Ep4=8#8sM7gznOh>u z)ev2GzH}|0&fsiHx?HxE>~AjK*;vru*(CEC9sv8nP!7e6fBs<{6yLl2^U}t0dcTq# zv|Cz>{H^|w?%0CGy?%I>+@Wq&bdrakdGg70) zP?w6zgsM&1&@QM=nU_QyO`HS@a@sDhOeK^xFI}Jj+6DIm+s`kiDrE*|@m6Bsx?a&+ zDPmXoz)2+{uE*f5HKn}6@&Ra9)mLCAjYOmiILy+Wse=KjN!iw!7?NXMRun&(fE-7b zT_Kq)CmZXB18$1^4*xVwQ8WS|#ihT>8_`9A5Y?G^$1i8X-uD?-GzCUpknVY!(W62c zN~_08Af_zwiUN<@k?ztG(fXB2p@I(?AW^}i*6s~NlTs^VjFMvnai7`(lj_e(G#`dA zbjk5}BgR-G1`QM156a%iNkprl4tWmcgX@9?YK&`YB$BvNie&=wGd_1vzi#70Sb;C) z&F=Va@Mj6%6a@c49$&e}-oo9(pWlVxfQKKqXxWzp-f?3;)!zm8#lGD7i(9dzi8G-8 zS`-qsbV?@R2mV?IyhwPu<8I5?yAksut<$NecNe(a{!XmKqU|tv2j1LlbHLw6bFcOl zT_dmSGR?yFX#r@JXWkaTnq9kRPZ>iHfMkyOM?1dIt~>W%X&tNy?n$vzp`NDxG7cV5 za<}(6CRjR=N-|iX%x@jo@pE4;G68tOtJ@1t$%!4+>=^^_r1r#1_Yn}vFuXX{_rtyl zk1Z56S9hLp9!mb#V$dNl!}<}?S0&S!UCn^9GuJV85wX^qxU0*&$G08V7gaF1JnUjU zt$(-;UKPI+``bqmEP=n41BkhkDCT^2Wq24mjyZuHFW{kw0;qt&S7^)|E z2DD?=0ZTm*4cSv^o_iys6qeJsUr1N#*;qjo>_E!EexTSHwX+IBWD^A;hR6Dh0a!a3 zD2D&G8DUD4%!>oOCL|USqCd08<-C#Yl@PxF<2vK95c^-6T>;+9^9Wcul67nxAQRm} z-&=%a>kIAgy7`=wR>#8~+Gv6$vE_&EQ!ZVoN<#>hgv(;}67rg&G&Nxnh9tP0GMeSL zd2ylddkm{XLZW@okv$hiPUPJ00dI*Uz>KgvK@$1(+}hnY^QMv#v(d)mPc4RC$qabW z)cw&$c@KM@M3ycL8J<`f3b%Ut+qwNB9~Yf8Hy>M=@NbMDM{}$5ZTcXU1Uc!SO!d^k zqPF%p%c!We)mb#S1<$|IfF_e4#sV&jFTVfnP$*=VLP~%J03ZH0>{(ybkKuylO zk?$tKKp1$!h!*IAOZIk=aD_N_NN7xh8uj_0A9W#ysoRzGe);F3$rwK4MIUn5fhPSB{cgyRq3UA*5Ck&xhB? zVOmfRJP2(llc;azoAEEx$&dTJ%IT!fKf!keaZ&#A$!DusL8(ocTY{QRFW|%<+PD zapxp@eHQ|-}n(liR+ z8gUGrib9C_3l6g=(r|srqLLU_1DAJG^@T$KV?^%a8yfXRsQDCJn*JkkuF?g_$FCkM zFl+9Cec1HFaE2gP2tBGZ@woj4dPCYw>m_hF^l@9xPFUS@hotx30Pdkn8-C=IFqwH% z;71HvC;Zvzu{=$1r$}NmqLN>*NY%y!iV|625n^1KAA9ZGfG76v2d;yBOX*^iFhP*e zDHIJ z<1cXn6tf~U<5Te;TS?fYDjP6EY<~p$U+xDV$3n9e*A*yDDj)#gpkwSH#jN65?Af(P z3|}7ITn{c3XFq=UxiK#2yFmOECN7fMN>h*wT3d41 z>lns13+bKF#Szk(OyRr&V%dYr?mP~#cPXz6lqIYfbucnC?us{sD+hSaI;iNXVMU5HyE# z+r#{C-JYKo3%xR*u|iG}a_ClIp0X{)w4n7biN4^z{5SB+YJbNy|&9U-qJfwH4X-m@gJnQA9dADIWiBI@10e!C6pmcrl#bn5h}+r@bk|=a~H&*nGIba zxNxD6*4z`4&_92=!uiXo>LW(qA)eIiN+~tJ8xI$j_zD&iUet767Rv^P2To%bLXjODfsGchOJxMG?;c< z)x%p@s+xfILyqX88&^tm{R4q%Qf0G9sW<=-tQa=#8R6o59_Ck^+Q*rGsF>X|ypPwv zV}>KXY@#Ztf#O4oN~8GvzGl6DvCGo|d?56tLGq0_sTpI9WY>6*W{h2f1pz>Wb7uKyiWz z_%%nb_x&VU8Z;jAq}a3dlvVOQ#b(cY<>AT#1%X&HsykkQFUXIke9S9>w1Lp#!cHuxHw#1#@KthyPm&|TSdbWv4j_pih>ubN zbzFX6*V4SBZhHA)@nAJ|RXxAr1~6fix<0|vC!^x3R>L6T3ZzHGv-!_o3Wrsix5mt! zzV!Auf538kO;jS|wz9M9G4&RTWBOWbD}D*s7vcFYmDj*x&U^c9!K*V$(5X zZ(~Ka+K&3U_YU=U7tUu&EX|`o<)&_bZgX!dht9jMET+RS0h;HUut09TxMheWmwIh< zcD@Mf9_3*4-6e__#f=Nie!FP17VMbcMM(&ROlUv}F)>g|M2%%N$I`eRQ-93i%vDP1wAo4)D=R5H%ne_$c~ArAFiGWX%=!vpxInb0pZ=)Q^}iNP4uhqFO% zjciczYnFRNNPOy&k>_L32`w{uv4!^sN!M|mVNM$I5qTepmLvP=x@%PafmHlzL<+@>8)b%N z97U_~596pHftWtr5#|fh1&5ZbbEj;I-Gf<2BnUACjn=b}Q3{LKI{ykyd_h^+wHw#9W50n9`-(ciLbSSNix$R?vN-RG@~phMj52)!-qBxa(yr0-n4f+yu|Qk8+( zsViL-AZQ9!N1fY(nC#5cufxu351hUtJ#S|^+Jrg#>56=bXrj5xXPl$y zU~xNcyAJKnDJwPur8zuLCWbg(PlZJLgHS@}OtL3COO|D_DKc)7a@8QPb#M{(TvlwP zDO{#Np{4s40_X$R)_5P3c`aoY5v8IlrC~F>=knn{p6!gi}r%( z+X4be&`43CL@j@5zcsr$lT$^ReFdV0VZ)+SgkPf(_VF7e1?1!D2BF#A=A#oNh8%R{ z{OY93N^-f?ELp7F^P- zwL--*2N$VxuKbKL-r_J{9o!`1mLop|I#I#CD29VzVGZPub4-9;ocm{GUUNN}p9Jur zN1?HTPwq6WTC2?^>!hEV!hs2djn0Dn>lJU zLeWat7!+5dMKG}mar{&#Y5;h&F`3miSzWx&kb*HW-qER#AQMsvOMhF!8wj2g;SOP9 z9}Ach|3Op(kfO$3r6^Ql$Jm{_^vEX~T{w9)*&Hn~PbVx#NcA8oJAU|RywOQ5ico9Y&4+!h!Vth{Rffdi)IlbHJAJD7TXI{l(FOo$i#`b=~LIwzp7tPqfZySN_dKj z-{$eGp>8A7fVCvP-X)43pEZxG7>X{Zyqcds)J3IfnE9GLKv`wR-RTUqGUvU^t!B0~ zdNC^Sn(Ci|R$nD_jiG0m6rg`tG&~yJnB-D#^kcTdM~B-N1l%?CAJQj2oE$oW!HFhC zfHtkM)|IX*IZg!oWr(^1{Ilp6OHq|reS`23>>fq>*~7$1RLfaUh1=l)x*Z(xF}!@d zt)YC|pCq`C|6E~%eSb4lT%AvRn{>B$ojsLqmz{wB08j@A5g@%-HBb{z^7$UZ7*)NF z1MH>~?P=cEp7>xnxd2qtwaYHsa6LmhaBO`cmcvB*#yqJs47wqcXwo)ITGdlx`biIs_ssUTaq(0`Xyez-4gQqp6{(hH4&}*U$p`pHwLxbdU;5l?cVrtL?BtEvdzMX3{scM|AkvGtLaL=J`c| z7nxI6*jvsV30{@#N9CCHWXqvQ%zfZ8psdS}7L@#~LX# zB%~uU=U18{v;TyNwvnOcTew*hpvU11-SSJLf<_^OD%b64^ScA|l(0jUagVhx=Meh% zeL`PG0cP6UMg;}ybUN^Yzsb$m`NY`a_Q4bA`XLUjqpx?ifNSNRqp2HUTfuRICAj-&xvnVw+W}q%qkUZXrf_J*90(wQ{%r~_IJ-D zN;!O%bAIh3>|mQ>^=vG%0jX7SqMF_wuP>2W;w8n)k}t$R8Mv9(cM_})fim!n)D3sE zjuC#zDMi9`!`8D=tLDB6rIOC2nRQ^kx%SY~_Qz-zxy{eu`Vfdad8E^Z7v2lvS6!)g z5|2pF>mwSt#=;CG1i(O=8_J&w2cjcFqvqi=5QQ(COXp!%!y8VeeyUY#eOsqYQ&Zf`++b-i*h{9K+iJymxkN_M{LdFz^xf9#p9Wd=FoSI7tW6`zyUXTQk z0>%Y9{YKy3PP>U?Do|uF=$k&fzF@tTGQ>rJI;EN9Q*YklZXI9?h}t)As8)Mb>$$~_ z(m-SJ;bqOMy{mL+RkDjPPMTQ%@rXGPo*A3`4C0<)(=edC?V8k9c+=W5`!Emm#TMBl zGW+Z~TF08s$v-PL$6lCo+p=8Kes$dtGIlvXRQ(&fI-Ko>s(Z|$giX>>UEk(cA!oA~ z$yB%Y_(5+rEW4DUp?>ltsKT3A&>AUNZu83xth`=-5NTbfN~YIRcbWzgm8ptS52+wrur z_56vAa-wFJ7h)r$?Y?&1X=|NFX3+W z;bWfQPc+Zc(O8T~?ip?Q`GCdqe8nK^Qs47O&#D%2H1*A98)5Fd zgyY(=E5h~uhl{8GZ|X~^4_I}`;oD`?A-i_1DW2r{CLOQQO`y0_1Q#FKq}+3otF}=_Lo@AvFlIJxB2kPlJssakx|4FtY>a{4R;w*< zD*Y%JhzN=M2fa9se_Yp7F}U(E1?0oNk6_|a(I*57N3_q|HF&_-ZxE0$wMu)>O zP$)kCa`NOP?3h^s>vSRHn22XZEQ>3lw;6r~JN%@_p~ySrFEND}nv957Zuqco7QVqB zCb$u}id+*MB=9m7%x4~O=H)wzI~18bA%IARaq7!}@apuu!Mmg(5@x4*w~!F*7oXr6 zK~Khh{GqoM$BebmTFFx4SRufNNPbw4pJzD#g$^F=+=(ry`CYiO770mEyM$?S6EmD! zypgNXokKs395Or@{m{XDZUAU)Xl_MV#qXwc*JqnrjqR{R^N{hOHnYDGd4;Af#FnDm z<=FVXgGc--vSyUsngw z3={_o0_UPaA~#yJ(Oo6W2-d3By7^swyJ;z1yxo;|l{frsHZ21^%lc-WkplwFrNeWk zR8=fxGb}jEFY#<6l2%6ZW=n|k>eiQ&V1tgG^e|eC**qtM&0&uW1`J^9SaB4t21`a% z;qrir8-8~7Evu2sz3*r0fk1k0#@)`gp?Epw?2er;JnLJ9h{Me7_*OrQf zV9{18x>*(lH;HNf8Q`8bXlC`p4CaEc$srq9b%$8kpd?^ zSTd2icLlkpzqT;F+3@oAT60$j|4Fn!JPy%xFG_l+RzvshR5$R?H7cW6?HC9OywZ~x zh#NP&uJ##;p^%$pw>9cqDfuG@M9a@Q$7si*-~&kvcL#oIT2*ZCo&^y$!P%kC6y`pk zv5duTv>AEFuA_vo*oFGo#&G6ppkv&18pw5xKZhT04FRX8E-t`odVrPRu}s8O z>@Sl>DMye#vBIWKk^R#7xsMT@eSEMPb6360)~BVen&W4Gp^)Q1Ji_+jh2^9Xv(iv> z%wXF1N0Bg>EWHiHL=h|D583Zovk>CWlV@Mu9v@>+%w#V{vgBPyhm?o@t~4F;cL^n+7byJ~=+_eX!|ye|;;4 z=Z?%}&vcoN$re1f?Q7fHx8aF(NG?P?_4AI}X}KaD&D6Q-mZsT6Yh~pB%myl7vfuZO z4IRv5D|FQFY-6@-%D*Um6`bBw?w3UUJ(gu!(rs#*`3C>rm;;P|mYNj?03by1KZm>u z8Jp-kTRHt2y#JScs<h zWAEkqwR>|F+C!pAIzkL91@vsOyZQ39)06DX4u0cR0#1A<$(FR)>!r3><^Rra68n178%^m&KhWD5p6@0I@`sTf({au z2Im^p*u7}0LE|Ki#^xp=R|yJi0C!)} zF9ee!5_=MF?Oo~gDDOxUVM{YTJlS>G~>QOtH~N>xQ@@lykykBF^G36#%!!n4D`Wb zi5Zv6m0(!VG+*2heR7hi{z8b$ssx4`=A@*Bk z9g7k zaY4x%Iw&o=fPKLXQ;CN>O6^E8^fK|!1)b8<8LGzk%uB=Zgc&iY9jXSHrN(1tv-~}?90F6n5LEA@xG9-~_mnnEsgki)RJb!aSJI*D{ zjg5<=8vy^Us?iDuSQHXh0mpjBhQ*#tLYwx6T&ogJEslQ!IU!PSSpSK16vl0)a7>51 z<9@tFLSr0>3%oYY_)Vchj*SoT^ZAzuQj?^kfH!@{$6+y&6>?Ks!`a%K{W*-+cpIwp zvHG=FwyRk9L#5;8Ip15=nNk8t4%oMK!U|vT7e|Re1g<8uP&2=>`BqM`%|9_f=SlPi ztQ!?f#h_*t&zY81vddbg2lxo~30Ke?MqRK=MKKE}GQBw~h=q^m?R@1;c`<*)Bo00acS&W@AGfHdqwrK9qLv(31(x*)M(D1dch>c z^9T}cc@H0p>g2%~p%LS(&a_}kBz|o-L{mW*AfyE0qD8LJ<9)Zq$BcXG>ACohJ4WVb zauibRuR(Y;9?Y3hP8l1if3uE^WJ|d!$Q_*PX!?>v9r0`AVY+f6*})I>qShq8=aC7H z?umt?FGD$fu74;omvEz5fW=(OfcyDpmXv4_8*#(n5&XpK(M0-zo%v`Xh(zl{kqVUS zaiwz7o)!PviG={aDbpKV=j%ca@RYK`=GO^t4P#FOjmUF#@=*&yL&5boMFRp{rXP+v z1vZuFEOQtu`c8o=B*X5wiUw*HJ(v;1*#vNj10}mRb_qMg7SlgT*|BpV7aZ5G)kIzy zc8PW2Ehxe;!x2K9TOY817_4;%ts%C|v&JmDl8aft;nY|H;m4(}3OFPK6T6TNv@ixW z0?U;F{~*3WfJWw8tyxhM*fJ(w) z>-^*-XBZp=kQpB4Ts+NfR72%;LJVlsS-a3i275Aqtt|)aYF17DW9>7o!TnzqUW?B4 zH^?{1@-Y&GKxTx`SROS3E%tNrdgjZ9mIY1lt3miAPGE?mWYBywMmEWmeq4ZP5b|1D zCe(H15&T>Ls-)y7?t|u#9?Zkxs*YsysU+34|IXVx%A%E)l^teeA7%}-HO?|r9TpNj zjeXJ!1Suu3-U|epY1q7|GXA=Yc0plt<_o#+K|C97d^y;qwte zWHE1Ib0^GR4I{0UoIAe|s1)tq>l-AG?jYgH-}4oL*W7n1t;yG!;a@gsU=BciJGBbT z0~2vYgC@pssj%D258OFL2W6xm2=Zlbi-Rg%xD`L1RQ4)lL#0C31MJE|ANg-N`4E-d^@hf zIObTEFUkc4y3s(q99U6h`>a2D#Xqg!-R$`E5bYj=(QHeYhGH*~M~+3u@wVEFTs=Z% zQ??X%D5UVke85%Wnz$nYlV}4XHuY3!R+cb9`l!@j+7w(~1ieJjUa7u6=GMArlNzFo z!Q(30mrH=XJD`GE)J%y@rpR-_+?fzBA*c>Guhp1q8-&;4cnt#WD^|)wn;O6ToCALD z+Z4VPP1+LI`yHO|m8hp7xJG){1SX8BfU#XaZKE!ntkSd0vhpUp(D)uSg50?%syx)5 zDb#-{Bd~=EPonZ%9E50wE%r~Yl9DDhcGBoZg3-iNZV?CnUO$FA>;V~SYw@QqY)uUs z1$=CH>S|yM_z*lxCgpB7=7c}}&ya$)-b7yNN{r<5`2Y3!u9au>!PZLSR#*xHa%7xRNu4vNO&#@h_lUJKl}i zhgHzI3x^q}h`Ab%)ZvtQiJ(U|HSty0?J+R~1Z4;Hc~ZlRr?nj?D)8|)MJggi0j0HO zuhz5ki7Tc|ytReq$ZS9R9)*8nv9MgKdMnEI5XejUAJ^ynpHWF@Ku8FP5UoZv7hmgR zR5RN);j*lWR4xCRp?2zDN1Wg`2ci<{Djb0$KZvydp`ggd{lgv`#v{R=3-E#EKEY*BsT$vpjKZiQm8NN-MaF ziW^(MyIbk>-hart;B4l8@HC`K&3By=i>pP%SFo{#5zh8wlO1hG(Ua;z#RJ1L*%OK6 zUu|Ly!{)ic(4b^67^XhcP#zq9J(6@Zi4)EnESJ~K!Z3uDn{w7tnG+uZb7+P zVJd@5we^Y7)Wsc&){)cPpzSC-Q?ZJy)Mb%@{_eF(B^2y4LJ5Y|DpSy;&BwOqu`w1F zM7y}ILIKF-T^7@cx6gt2L*z~wmY46UC|7M&f&!vYB-RT+l%~qo$ ziV^#<(j4)~)Wf?VIEN#_0@bW$waWGRf^>r?-5*cKdc7O26ymJ5_^_;J`G-gmVA%0< zxLxEWvp&D9z&|lJnsDJqQ5^m8>92H1iNC^b{u$<17@mDn(CKTu5q65m$@S{>`r-X2 zNWXL)@#!Xs;BT_k{^j}hs%k3w=?472~rKkKM<|z{2AI zh$w?Dd>XOx< z{)eb3jhG9M_tv!YicyRCl!HnA@g*h;*+er~U9KrJ$_c6BcaJ4=$pdVH*L)_YsRRT` z)iwv=)Dgrt<_sKPVRzs$F)&(-a4Yd1PX1~%3%};?TCpS92&TDN&`MhL`vC~$#`uS5 z!ndQbha?Ja8VIdnaUYEN(dSnDqFUinY~iE>3g8=m-<5Gj!9{9y`-FCBS()Eb3Wu|s zlrMgtISg>KM_katzs#3juG<)!r5l-j0KqVhaL3{c1U?{@YB$5L_7RPcQJZ0c8DoPE z3C~lhpZ+D$3rkxh^l(wQXWfic3D?Jc+Q_P^X;Wq+pr^{Z=Vg$0W=0?ZfJcP7MrjYL zh{|KhqEbNi-(uqx{i%_lGb=SyD5cztgA%y#e_>d;!Te)E!ikKINvVYUGeWwakVsPr-SyIHXtj-vDQM~CrxC3|>z+O#IU5=_3 zVsw57wU*?Wg+v%*&OUo8_&#M1_)YZ3ZvJ)N!AG3?ZP!=QyJygS;;lbK_KIX#_4wp4 z*7FbYC6a9ByPYGYEmin;yKHzDqxzn`i)^0UMV2q`_15zjjtFPeuw9Uamdjay*^&c3 z-!lDP;`Du^^0a{qk&Fq(5(;uT&WM~UZ+Ugq!BgH0z$a{~zm*D2QmWfr{cKoQm(H%x z=-)%0c+lLL7}bBVM#~ocX;)a8Rocs|T4j$EgO+Mz=>ohSao*Tq#WAS z^C;^bd%)QZ#c}t%J3B5TySiUAIrop513!a3c#obQk0 z^?`MNG2i=N#cTYikHy2Uta)GQ>Gc>w==Grlqnkt}h0fX`{n~z$wT*Iuj3_T5- zYgaVu2-YrNzw~WAds}gOxw`wnE3Wf&$WHTCX#Mc>QOAq$&By!vsoi8eC9^F(%7^mN zTSzPFgq@X=fDxw6N16Rx&^0%s{Zr|or?4ymBN6iMvW%4eu@jSm8Rc{$QFIob#S)_g zk3KJ2&(CcW8m|{-DvvhAgvp2oYDBOo&!EqDII}BE1y$IwMJlc0_l2AjR|BQ^E)@eZNefR( z`$XAe58xHz;h&9q*cJ>^mawoZ89qV_Prk#XzZ$KBY<=3%W08c@7%xMADB!7oac~4y z2niR$q6d)14<{c>q|gWABdGJwQ9T1|lPGygWbQ7A_@f|8m!%G-W?-697C>H*!G2|u zCR8*Hs)o-+pXpN2BPe&1;+6Va&jGMkSdk{-NmN{oL5KJt39$BcSI1QTCcKe14nbYl(Gv()5+}`Z7bhreag&s|A3sYlMLD^R+i*u4-z1 zxQ&K%o$dkKIKHN zJN>2K+XsKv4&Xg{AbaHgqsy~0f7W)#LVux3Xm$6C-|ab zGM)6;H~$qX2INyn-le@|)Nk0G5xlm@^LkMqm9Ie~iogm@W9KsZbPw7zo$Zrn;re4~ z^`4g+fe*>e%7y#zbgPy5UsIdRI%G_JXW9IYTg4LKmg}$mjGh)8>~Y z%e;ap2-Xo86Wps;zRvAVKXcYXXR;}CuJ;W@Yu7_%FA=p4qE2jpo>S+WO8s+;UB)kk z*^)zaE*gqUlChp^pHW7!3y1PQa{=xsjPpL3O@TST8-w~gx(90ZrlLCmnAB!#AwV!N zw^O{@*f{}+Y0_rsdh#=VG#8Z_+I{V1W%9v+4fYf$;6!PoLX3`z;s%Z{JBVsD=6Q=B#;W(k1en#6Lgy1E@4ciA zbE+H9!FNp}h$wU5N(3E}g0`sjf-fSO9adRgJcMd`kXW(G-$ z`m5izM|gjNvpW$&a`CZu2J#*jjZbKOExIFt@b`rzm=ndojr>=}yVK%^(~Mr&bBGYA z75SLspXOTcdR-3t%4}k8@oPR0*@38dPAWvc*BzAd+nTxrs z3A=D+O}nb=Kpbm&X~3xX5+3RS6|xUprcuJxwK;cJB#ij3g2Sh=f$`{k}Uden7S_X3T=>LuWT-G4f=peH!w#iXN9YVBUWq zT+I!wKfFFLUNED-J7$wKDJXP7#&O9_EU+$fuQ}Pi=HWKGq?Ys`G#6Z|Vb!+o5%Nva zCO)1%6+15zI?}_$L&S&qn+G|Zt`e)$Y4mcH3FUec9jYr;pd++mEiWA_=;%~c@A~1o z;hjfJ69Y-!MX5DuuqUC%I?Q%a*zpv-C&r=3?nl(paHWS|VSOo5AJe14#mxF!mCYyY zv>*JV*P(_)bZu-nU3qhVC@>};Kaju!zsWCOE>C;e@O(PXb#FXWRA4Tl=|PSW4UTt? zRHc4H`^dW%dpr{Gu%gSuBv&$hUftI=f$OS=pWgLP&OI!x=~Q_~azgKR3%zIB1>H|d zy5wxo)~`G+|Ex^<`p#9-eY?NaCZtXWjEm1*1mT!noufJR3NuxUX)rjJCFZZzjQgYW zS7a_Na_M413|_00pGs5>k&V^={H?AQt^pU;V0JY?rSTQG! zFXIx`Ot)e3F-fBg( zM}ggLC94mT)@4<*fkJuF)oIevJs9ViAZbhO@TIA+ws>EF4R!sO@Ghd%E94d*Z;|-w za>2uG=_)DlM_mGDm8rXVX*0tsp-a}47&l5d1f%2#$B?$KhLgm8>e1z8YR7OCCEe5O z8l|tQfg3$dJ%-P9S_~d__y{qMctkf(x88$vScH&}^ww%qMcZ%cZ?gq&DDornR`ChP z?vq11f>xXKQZYSbqczptX!lZ&`+M21Xyi#tpMtSi5c5m)J!wM!&j zNQcVUz&C-qHNZ)Ji|CcpTTvmQLy=Q|3KmG^9un>)nmErETmY<~72pNNc9N=PfKF($ zT@!=;IuZaS%`j0pAgY+6^Z+y3Yck*_n7@_H zCoagQ1Iub``)%BuK<^h>c2Px;k`SgpLx@{*>7)-3B|FEYyw{b&uT2}88f};JbVn8&HC@HWwM@E*9jKY<1fbLYz=NC>&qHyWM-bt zis{W#YFTxiu^H#cwwrTId%Cb6xeif#u?%GWQnUHL2tAr5yw)$0#4dnseggcJIz`EH5XE73 z45}1lJJN_c#yp@sUg2>52n|(Op52}he-LDhu@Ped*%*^u9JneXctIF+j4jFi4ZE0m zVOY0UpOdaa(^%GAanF)fovyqlIR}Z&V7O-LiLG|^2$t2WhBa-vhQVn2j(MIejXiKD zr?W(A5e=;Q)M+5kJkDfv&R&Q^jsO704KW*RQ9Du^na1-3UOKIMTKmq#`Z0OZLGu+| zsn=Ung+)|uQ&i-=rDwAI`+MTzD|uD3_kKe?$5JD#E3nKGQcD)0?FWhR$86c=^Z%&1 zjeiM#Z=8M|uyp^~1uJahVr*q=XZ%0FXY==X?7A1o*p&7;N_fPjhAmN}Bc7z#-cpk% z{7jqI9Umz{P7p-WPsPdl=S7q273Jynz#$dG6DbpKROrb(Qsn!43g9P<9plnW>#i?cr7$Du{R@_ zI62A*Y#vyji}WO?otIq~AzVHPz33{aE+r5MR~%`)rO-^%_E)~;mUm#l+%62NYau#} zKx7~j;uNbfz)w1Cd;}uEW|kdmx@xO2{YF*P{!;r*Z5pvqV|co>A>-2O$3rA$PBAXA zST$KXBhSXhf6Z5P8guhY2GwdVkSvVz!j*yFm751*Oz<<_U=$zEBwDg5L?b_Qm9FqH z$m;vnk~8U$Lsu!2VwrjIIL-ynDMdX=f7+wme=`=tN*i@q)YytD@QC(loxfRBo+ryo8q zYRU}JC+*)M+z8W;K*-pjMFPWE>weBi^)H8l^#3@NQz=Vi3M%M-HenaP+O0Vu@uj7A zd7$Gh4;2xDmOR0Ou#Lm_NIX=#gXrGBW%wj&O+syIy9NhkE%xkuoRxbwK6R2xAv+#6eG+w6SZL6DoFj*ein% zvwmjX80Kjzu{k+9@>&_#ulLBIctQc|XdL^QT~A0`r;2uP5Y_>&99yIl zs~kpYsj5nkp5Qrk3x(!DD(8Of9Q}&?jZ8Y06NDHmCex~-839ne)+b~>?mv=SQ`=dn zyYoYm5%&5qaLE=}&wH9V&wCEfs|8oX%1vbfg5qO$%j~z--H3sTba-oW8Jkq?vH+Zr z_E3l4jr)oh`b7iR($fCjccY_IeRXxW9|~YW?iuljaRjzko!+pZMpt=(x`w0#{r#_G zSL?blKsQIH4>;RiuJ^)K-V>Qe&M$&kBCf5-M7Q{F>0;d8Ot+f<%px_B1-b|a+Jt_n zzMMDI?Nw8Kiy8#vGC&drhCNi{qL~a5r9BFQr7P-Q4N(8J-8~hgk$&!#6YPgQ^xlL? zWl4IJp_tUCx{(5PabTC-)X1KDfnVi2=yEr5DY6JK6JmCzfV{w_%RfH~;wJ7>1+h_(mx>%kS?KX&A#yHp5N=g0V+^=^`5O-J3~%~I)^kPJ>xW-l(%!VewkLm3(@ zafiwpeq@cDL0aTD%p)$h;3lYY@>;y>o6+*-66(>&p=l`CBeIZ*4Upz2f~gZct1Q4G zQ4+}zF^;eI%uQ>JQzWu2i4=ub9r_;@_;E~`O#&>r&w6t}Dkhf>c1!+!3H)$QuF@er z;VG5sM1NS~QW9n6y{NvE%yr4Q2Ct4yq2;DiL~*TPDBB&!lxbHms!rYlnS*-x`yhUX z#!*!eEl1VUDEZxE_RTRtwD}bifWQjnWGTuIK@+++RgX&NR|V0%$f`T6(vY0yRP`hcu5Y}8CJ7Id zQ*}!y7jKf0M;!KZ7=H+tek8xA9hy)SH(qwA>#O&hQEtwbb??tS8xVJ8l6u*fQe2-) zPp>Rg0Yo18qrf*-Ai8z`T{zOTrSRJaB>BDgG5||HH#VU0(Xp+ zA0o-FY3S7+iJ3=IRR7N2v=r=Y>$YXAg&ul%FR?f<(h2Bt+D+9*j`iXO%5p3V%_U8HUhLc|2qHiJ$ zG9D`ym9vDE0hCrN5RZ_EQzWL4-~D!CEj>3D<2Z2~c~wxBh${KlS4V=qwVIZIJ)BfL zCNKVtD;y1GUciG)D5o6&yI&2ZMtN>*lZS~b_qE)j)CpUUZZk={yi1l=5^hHf@mn?zHCT1q~m~4?$ z%;X`D@U3?!pDvJZ4=r~MRVOo)S1bG5Q0-*A6;?j>|}`6kv< z7nw{;qQ{KO&ItF)^LT8=XP}-)@Xh1?^yzT^V!UuQQM7sKVHt;~p`bU1*Mr;lap5GE z73~mgE>1s$6hTkk&ve%4Lh&*?@aO+@w!`%sAC*7>03@pd08sn~D(rt;l4ANcMppmr zBG9sS+z>ah zANc!q#lR?dDa>5b6RJJ<2Zp7H!yY>eW5l3-4!yJkPX_j(-)=wsW5&*#m#_n8Q=`@S zTd*@a#K=Cj6r_1`uJ0Wm-E%QUgllDxU@Zm5mjD;iUdoDDr-1jCsKpx^hbw_TAb-C8 zJMsJZ;OvedfbKXePxpkDlS72ec6R5>$;BgpR)o}xw^A_6kv#F&zckk?e_ABVIsXgIv}sXOqVuK3@zl=oek{yp|EQokfo%4yM7GefMSg3!6<-btPf+%tx3j#Z zwPuPKUeD-1BzB7#Fd*_>RTrZdAA)i`@%;!?z4o8c&J6;9R6LT;!T_IqSl z(0hA7CvYw{hvt>cy#P_;i(Ww|mC??2q5e&4m#( zu&d;Me=|1bh(-Po3SWJ>bglCKSG}XyBqlgJd}rGrTU5Z#AuFtEzp>8NncIQ$lR?b ztS;K(?$bTCgbra?P5l)l)1I#xL=4BYA5>QKregD6Q?TV0drCy=-%}8GZc+#9rh^U? zZt)DaxZxMz3X^X{KFP!M044(L|a3ZD*kOs$}nh|MnIhe&j{a#KnGJVcnZs>DtF1cRQXE{;SWpz%FbZ}-c4w4L* z_9h!pwQMXvNgP=uyH1&YYm!WHWbl5eZRCW8#0fD1I_sfO*uW{X>-G0K z6X2PWh?;`ARO_VkV(F_*C5sN5nxzWai&h?#m8L~H5~iyoXqu24vU0!tgUYa`MroVn z(9&jw=c?D5#-R0{2`Dsj`wp|zM|lFsWsuOUL+|uj4r71tRkDf?uo{RUT{bbD02w*O z0FV;qvO5VG^stU8e3Aj(SYRHjY2pZJ>#Yuyn7^3J8mU=yVKC=-bR*_r*uQ{F@^;1#zWdYjjft?=n(POuGU-J7ALSDEuF6KW5g zF>e`}7wd6Lxu?kZ2&#&KF_V}rpi(d8F_~HsxdSgw z9Kt(VIN>qu9PBV0KVtOB7PyAl9ztyEIsvF_P%J?akol|?+*m(i1O7b7aa*v2g)g$W zDsm3mU-lH(sG8xmhP4dv5g3T}ujH#g?`+F4bbHf8*TD6E0%+LQ>QB3N!j!RdjfMhN zSJ0@(9F8x%m`pO+I?)y@ z#;-}2tJ>R)$}&jwzDW#MC30Lj`3q>eHq8Z|982js0=dftxk=`^xSZ1UgdS|pm}krC zNMde%aE~RP~+MK3nvdxoD;eO7p>Y~cXr&F3Z}K>Y%x&q z_P4{@@EuT$RokXlTg~!V89iCB7%uO!p3F0bw<$({} z4)!;aa31lUi_Gzvrv%sY6^Q{DokGJY&1O_%_ul6+P_zdm@2`RB&iskQ&NOTY=I09t z$TK}P8V*5$qU_N4n(4|Xb0zDm;OITkc5|$&aJSgw)@bKCu#Ws*fXka3Te-RVi&N|D z$5?15uJrv(stU<_L0rD>=HJ9&uF1H^@t$vt?&(#iKra_o_>0)oE!53`%1L zzZ_TPd;IL1x~|H{AY#-waX(CRd(t{31O_!%E+<2;5Tl?0i~?!zk{oZIo7sj)AK1GiFklloxRFD%Y zr5Yc2*J9VV&Gc=K^!pPw3wXupLi=Du&l^SApX?c?0|#Rad_qP+4HtO$kZ>6*5Z z7Ll_^3vOo46&6GaOf8XRB`=S3%8FhdHZww88}c@F*9eK>a`MX3GNaHkt*!LqZR@+O zGeF6Bo^&|HF2Um<4e=g8=}%V*KX*{RglsVrA{Hw9uYK6-PSy?Sw)rw7_y zy#flbO9Lb(6sNp;7hU6+k{LU1zkb`( zJNupiTIdiF;0#$i;Bexoqe=gU7<B{;-29Po3kN~RL9L=?x>|Scw%5lI z15(Xo=0Z6HOUX_jU-v(+hSw=Nu!V0O?i1I=6voBehF=>*gOxI{dh&6YO@s`R_Awx{ zK%O1trWEz!{RQ(bxrQ{vav}6a^kq0`rUG7U4nf<(bQn`X9LW zyj7@icUQ5&X2lay758x8rIAs+lI&-hIB1u1w&!!^-%kPtz-Q+Pju=)I{42-d&LBP1 zr|0mJ4u&=$4m|~7%uQSsC5MQEj(Jy%tdI?HWX}bM%br~dWU<)hp7}fd_0;#$4D4+P z%vIdwC3Q;p3Gf^pwXBpE1jS{7z!WwSG3&@Y^QI8DW%(L`@mLjJNe(^?9$j!uFAzwD z0&64R`*zmAL9HSU!w(pNfd<4i*vO;fCm7LJ?8Y$ihBFt*B`7jB8Zi#?Tel&=k@fl{4j%=_j za@#ff&+ySX_!5PD?PohQgT=AYWReLHe`Lg1rG^ixVnAWH%xjkf+1<`kANj5Ri zGMxC>Fk7q>sMWSKZT1s8c2sHR`_@n-Kj3plP>K9 zhSbouN$t9OTg0aH8*wO@!D7SsAB*(ljTuso++cvbU5hgcIVidHiM=Qsk)?y9icIY5 z`VTQ@S56Ks0hCup2tSp7gC!QS2dUuJ+=gzTSR96Z*>spVJp*j|0bGjoM-&uC7G(;_ z$09IN-Zdl(rw7y0j<0X~qfXQfuF9t$+44)~Sm(N%k*eD=w!0dZb9lmo+>xkGeR1?h zBmR#9L zSEoRP&W@MRlrRonQ!~K=j8mYR0eiZ^;ff>_GVoKRIteV7vGP|_$S4kQH7^4aLdT&k zk3E9~Y(%`SEZQC_`$?@3YVKN6vC8)dyQd#+Dr@GhmYD8En+OmMf~4D((85?m(I}xi zrW@POsr_ZNiy`RLi(uJ;Lb?sWZUWfS-aW*dhY=ZA_RIgADJ0PIC{ z58%y2Gdld|0-LGMiUti7qE?Wl?5fCaow6f1_)Gv7uH;@?rt;H7)glX2(69y{9AZwu zt-yh3bwvn3*iJLUX7b5SdJ0<}vbl1guAyh0gN|7bOnJDihCF@g5)z9+R;=wG%CYbl z1ZIM@j&-0h&H0hLqrA0{8_RNGW&vIdhbc&@sEit-v}}_n3iik}dx{f(OjUO9MRW7< zQcujY3k|o1YDs3KucoT9F~%qVZetD9kb70tM#iX$GC}X+a;$cV1d&wVOY71@bXb3- zc@1T>l-9YX?ND785jq}+GMm~LI7F;N?O$@yuLjV@y7;keWXGanx(QCH$7YUtj84V! zY3JcXvSu!KE??ZhOB@8P&`YR#I&gXBwsnv30i|~cE2Q#6Em3191!G6MU(4lx33ZyDzdgE$Kf1X^7_Fyxcb9XA69uU0$E#4Xys59Yi) zJOOmS(9+F4l{QAgb1zx7U+>C#)NH=I9}jDuOe5YSVM9_<#L_!%_bVf_lq!teXt~y_ zu}30@lC{>bIg~n#>~usq@@L6~Ov@ZRW~xAI#}Bjgko>n+x80IStiV(P66&%KPfQ4z zLM-%+^c8UO|FpWaM4`Tw)3LW1cSlEuN6h}fRHR1+K~D42!Ipup#mRrUjdjI&EZ7t_0$Qs}e%n?l;McSF!pLvqub) zpyo^gT8!T>%m{hh7$zveE7=BL2w57L(VPuul*KoqJjSP*&6;i0LXGBJ!`~a1cJKd} z>yCtz|Cuzc%UhWL%5}(2eZO)YB6f43;ICYVBLmk{TmWiB40zCFoRDCvTj+w-%qRP^ zQglu>0y%c#$FrFJu9r?}Ui#LZ^Qk%b|Izi1L6U`C7H+Z2wv}buwr$(CZL`a^x@=or zt}ffQb?ciOGZAxdOvL;1oIH^k`D2~E)_#_2^PA2fh)e z;BX(AbS~ML{EJY+5U1;siAI@7tfk;#4}`CYTlCGw=r~-Axn3A-V)PQgI9Yv-9yGEfHme#;kxT|CE zZwQ%Ckj}X_t6V<>ZM=YkVCWQk`@}MPkIGHzJ2b?0u5yD#qzl{N_`KrW+y(4q-O(uc z1eIq@@C>3nwaBtrlaR8}B`i7bz{*@i0JgW4$K(VP(GcBv|0tZ#fl&xRP9h(qbyxs2 ztsyUdOZ11z^B=#CVDVm8M0sEjoujG56Cs`ynceiP^|n8WByw>%PQ|=UmK)sXh-~G# zBHPyyRE#KK!+8WFN`feDmynqooI>(HEGsb}8fJ15S6Irnj0ndRX0SN4&7fDY;5>!v zLT-HFlm7Q<-MeMS$NKMmOqhTBb0J%5tMlud@g-IL{9Up%Sf5w5!nQ_#=k(7p>46nT z*yQY>2pgbo?-ie&7`F10IwSssS;YFGd`E;`l6e&Vcyy&v%*};pjoL_g03iH-q@6JZ zxt@(JjgC_}eFXnnt8~im%VV8TA+R7~%Hz!^5qA53_2^TZ{AVt+5i%%w$uHUy z(MwO`&x+|C+=KNwb2fR85F9Og9hD3$=i_kClEBkm&jDS>(S_|zVp_$0N)(!Y_hZuG zdR+gPNk^vRzvIfUQ$6nH|0FzSM&S+l{A1D`{g`y1j*kqw{O+`ZkLd(DkLL)l7wPo! z^hqGG+~wPk9p&AW)Cw7>lBgt(l7DkSy3ERc9m{QMkYM`zKMn_?o@oelReYH~l{5ikO65+4;5e|v6v@o_Es|<2 zkYg1faM?rlq`@ zR!nW#KE2dm@MnnDh<~9#vEa`e6wAC{Tdj{}hBsY7l945$C^qz^?q>Y)grKR3B&Z3C z;_xSL`t5MdVK>Odr!AsT(oBpFT-iP@Mg($Vo()UmdJJg77!`LXEM~e?bHXR26)HT9 z1;NfDD3A5cHsjZt;VZ% zt)rLLrN_n7{8k7=C_t}c3DF2lPgbV7gDs+yfc^{csSh^Gh49UjyDOsSX&0!1iiI%&*M!BBRzxlOwf`yqo>3Ap+u*ysHslrUR6d2ILSi{&x8_{A&+| zmr}}{F942b^#%zpoh$fEPLL%2p_rahGV8rb40~}n&C0f_%ROG1Y%@Xp~1J1K~gA4O^TMCaLIPJ`|NuNUr~iN!}@1&2W@3p|T& z-AU3r)HJtfS;;)cR8{PIN!lt$?;SCelL~Z-YGgB1?Rps}fu0*-EYmjUVe1JUYXlTr zVAMMu@n3yvCe5O@wB@ynwA@5HZVy!{e9b4%*%9iA_RInw^1t=g6%0g7GDXf2^Ft_s z^0(Bb`4Y_6-W`Fms`&@r`O)&QDM&2lAm@#N6DfLz5hhwW zkWh&dg^>!ALE~u2XyBJtup?ptN0i`Csv%6ZKCL>mq%TnD@jnAQ6)qLA(6RGa4Sjf&}NL5yjsr@(b)*wO=K$W z)RP?cZwa|o@B93K*)oSDA_o^ShR>M53WbWbHh#^o6xl&gbQ&V&PNzmSJtn+0XwFQY zFn_@}{bP5?g3zNR@Vn$8ds|$FejZ=x`^9HzVJYkDZ~m1wY}?*lU)E4}lC&sxZiO=% zgYI*{SY>Z9*5zMxqJG2|MqNY6eTtT5&?9QrLwUdoE zT1U&vq~<`GN7jBmEZQ z+i_q&LADd>{~LuSB_jR*TMK;uPmKR-(;s}`KQaDD9{!&ge-c*%;MiwwkmPpWj0+Dz zM2O5N$^deVi*@{aYdDxbvEfjBLE3tAHBI2cC~))hNjs|M&s%ct`~D-4uYYQ}KfNuQjo0kU$kVF@d=1tc4{Ht+Mwsg8M!?D{ht25oAiAb8Vg&90{vK_F;J6Ej5JBsI|zpf@Fq5(^T~wG;;(z4x-n$CWq|#a<~04YUjo z|I|(rifBmK7$Kq_G&=B1)1m@Q=2~pl=f3YNS~{xHZMB&>X;Qh&CY_J$cMzVDv7-x> z+Fg0ATo3wj2|eb(xnMKGOK@!33uQ_2d~#{vw-vX*7?T3L*N8O}-Nnl{#bh}u^i#@x zhB*R1R~-tgN_>oCsB+>TYcjvq1NX~GT$+$>=!{mi^S0dif&!Us*$&6baA$;XuwP6E z)u1xTZT?Ccwc>JOJ)jPiskgJ_*dmj{a&(vGe0|Os}VLWzVp~2tx z=15$0M(WAiKlnAWAR(+Z*8j5^II;W@H}ZF2aSD$CKI-bUhD!;c`&Y0NeM@iGOb~_6 zK!2$OUJEgNL<|vAiLOC(B*PC+wp~}Vi6P?JTk4-|j~1O{L%nI3MouJ_+7kz%CVG6m zI|OGlsY{KxG!ys&ox?ndp$8ACLkutHM}S!(qS0c=eX{2BM={!AFg89ioH}t9qcyahoo+r_CwAgRji! zwQ)ZbRcY)sE`oBGF}jVjeDPe0ybvjWVqUJqh87%Y#2DAKML*}gOGVk*1xNM`U`pr7$kQ7rYc66K; zSmYm+ALox**@#zm*Y@HOM1}2k39Q&_D+s7G9I&6@Q10yZabq@$2J0IPF=2;Ql-IAQ zt_F3ce}VWEn^aIMW}9&M39>;(`gqs3-yyiK_yQ7h=-`)kAX@BN4QXiMO_y4z^w zsc!hmv0duHQG0uLyz<>(Ve^f?sW^q-j>uXHZqSu3by$N_*LVE7vSQsS$OKH6U zQ7(H+JjJhXtntbw!a{OH%nryT_YM@5vB2!jBv8FTAX{u+1XvZqWvt3NZ9}qy9tYTB zY8ty7=M}1G78G!DX7nI;DE$v8fW)MHu^|SFs2s=1EjJOC)A>3*kXCF5Wu=caO`**b z8SOq@o(m0)Ry@|cz=ZgeQO$CqPZ^~m#234d|8Zj+HDkUt)K^|Hch}9fqKb{Fzk(;m zg)H+l1IVqcp&(6GuR~(3Ih_(cvk}ap&9)ojAq1afq(|N~*}sxM*qZkds}=_o$h*p# zs96eh93SMUC}_7U(BWVZfjBSFSVU9%&=A~^t1Aj;$5H}qAO0sz*Rv!^T?Eyk@{^`B z3WanMK_C|}L44MzmQzYw4ceVA^@A^_6$iWHXiftx1qqi!5h*_kyl8jG;+8rz>F=m> zUN4sv40a$ZLOqgL<9wP-;RwU~hoe?Y_M~*t#6*(eog4i5jc7rKM5k`v1YeE;#21Rw zG=f|T{?p=78@^fP=%+38!kQa|{~i6HQlt>>lKdR+{{`H&Ja#2eq3(*{^_1iR97myl zcifgG)L|5g)o^#%5wmU0dqq*a8uW;4YfB;HPA{Z&AgRy1`+DzI`R2y+h+k;rz%xn2}E&C>BNx>KXY&yVI z14ph%q|+dK`P!Utnies?7T#Rm$Xf-=)0vblJd|XjBKgQdch+zZPB~&Pvn}$GB|4DC zF12TtHO-$Mi2N1<4{$wEZSG&%k~OVZOTuV?WQzRg8XyA928nSLe+MCPa4yNSDFk@V z2DihFm!BFXe}#rs0{4}~*8+pbMD1PEAi6!cBQ&aPUfut$Uu2S9VrSILDk*&?#V4)s zWu43RtvvOVIVs?Nf6rEQXwi)`EM9RxYoo+@7F9Vd+RQnOruZiuyUm*REC~$h+5D(X z)I;HFTn_bZqOP?n+rjc-=L+DF$f5u%E!0?f%Wt4_VRfR1$jP0)syA0$|L)IF zm^=8Miyibn-$Ty|-N@>+5IuRIt=wu&^)4J<7ts|iPCWjQu;=f@mAxMX0NjnuO}}Gs zOWMnMw+4K&N?Zq*+ofyK=3k3T>roz7UX-$(f8nqw{OKCCyfD!r8=u--PobYS+LLsn zCFtguN!Qu^b%hdnZLK%~!XLss0YAmD^D5T8gI-;rAF4eipKpZV%d2$nD*kw$__3ZC z9eFM%c1W*6r5`_)foP-oz7f*XbX|mE_QafZkmUcdt_6h1u$SWBLtzpPcC2VlxlDSz<2eERhuB%S&! zGB7Z%#wnpW&4?2vCm0^PzGeldg(fbV zk875#-F>f0eXc@{?TLOr3=~;XMc_=XKxyS%ui3Hy&bfKW%QwS*b^;Wqj(UXCGwTUC zT2QtT#W>OcVheC@X#6`Iv9oiayC5P(%Fp7@2VWl#nEk&UL}xqEM9s@iE)E`tUM;6(F+PRYOpfV^T1sNH;Ua^`JE-I)*SvW~ZA^fPW0*6MUGx9$a& ztv-L^JxQ`EnWc`u|NK2*nZWrp7Z*=>{vTerx;B|K~s;rFKF*S{A8%=`!= zqCPrHwjl(AxD8uaei_Ez@LOEtF+@)dSthzyJs+6{H&d%!7)%H;gmIm96iWX8Yy`BD zZp9D)+@{=NMy z1dz`-JRlWXMxRW_{Ij5{)HU)GrQpRwVc1W__6un|2+?RE;<=hD(h!qjk|RcIv4uvj zOX)Uxp!AA8U@Kiz+A6=6N1}!NyB1(BeUILwCeeka+6(uy0*PEz@k=Rr|4A}xzGU>) zC3EbMzbk?ak$)Fq|^9@iB=Z?=U{Hw-U|Q zweqaP4OX)kSsD9rU9hCedXppyW6BUDVO1c-kpkBUl|!hd-Lxrm1d3W^j$k57!AK{k zig7I74Co-#1u!5}_2%I+Z(S-fEr017*3$w6a1;L^HbI71GS1qKg9{SBk_(>7@N1t_ zx)BOEhh&QjLI9eO3GtPrOsb>RGBQ1H%_>i5ZCCC26u)fyzVyf!^Wh>EZzF8%D!b=2 zK6$62Io73AJG+nec-qvQXNRVMIdZFfR+vH=2;ebQ7Q9maah3 zpRjBY?{!SMqqA|_rV@^wK5Q?C@yZ%*IhunWX=AS zS$LV6XerG=9&v)o5LH`N3TusUpMm92#7YtZGzjO@Lq*Gx3{dTpEo5m#@ms@L-L*IW zKDTb>T|<2CX5G+Y7I?6Yw?+8TlC#(S8=;wAz~6*U;~Ge$gqw-ExolX4yw(26_{ZIL zq}wLo$Rdce8$Mq4Z_wRxI`VBw+_m=lqeTcCdqd3+&DEnE%&-O!;A!(_Qf=T6TQ`Hl zP*_WOhj5N&HR!4A6|(%Yc|u?aJ6qTUxO!{s;iT07%H?nFtTjg^8jr?B{cC+gO8p0D z!VM3qNCl-zw?@%$2#A{vBPt7jhwCIbZbcC z@f^^SVj-T{t1+6B!1QI$t*j4d4AZg8PSF2wEk9MUoD4O*vKR?Lo+%~v&^c9PVvWWk z8WARqKY^A~6T_NeyFu82tE+13XnL90JPSJ4zvpOtt_l9#a?(Oy#Ow9<*9Xx6PPHJv|iXty;_EbEi9Kei*YySiK=|$qT!%TGUa~ zKnVvCCANed2ttsPAEyuM$jsqXw2b`BywaWY4zqAgDKmnD1|D@D_({;N0P#j~?7>V0 zkN$j3_q>>fjy*`Huze+h*}>Etoor>#sm<7}8&Z?!)U!$uR8O;8g|0=PWKqB#NCWOy zMI+rFa(c#5Rj!!_O1%O}J|Uon8Zn}DEg)(O{_QK*LOXKfC&OS1_&N4 zv-Adp%>3rax3m_NmO*lI59!EK${Di0&ql5ZNLQ@~*a8<(L+bu=hv{G4DEIJ`s}NAr83r|U^-Rn8|?Ywgc~YVYyCPxBPlx4Zivwa4G*%RlG1&2LlNAIB@COVpzBwdKV7 z$$s`>`x3n7{~NOxw`U5Of&c=-{HYpc_&;Qotf7sWy_2n}iI|h2t?B=S?*Du3@_(59 z;A{WI?B^wH*5zn%J|Bqh`}b6v2clJI>}DxRdg|f(L(k;~JT}mh-d;Wl2ZBY?CT2sJ zhcWl=+TCYu6`y~5ZHFU#SwKD$*oOzxalp;IFS{<^d-=`Cb-B~i^GHH}2nz zA+k%9#$%6d*>K#QFGu#~?#s56YF@nKN9&92%7w~&=RZp40vI)`?Qxm`x}({pa?2>IzH zdgkBI(eJ;U8vQ+aT|+pGT6T%F8?8}o;XytY^~4XsGWTxb<@Q$GUKk}1;!H~}G6xUl zSZqE@R z)C6?ATtK`zMPuQ5I)5qX*V;vIn94UmWamq#>C&r&K&ixv=J3M;@|)w9$5?HqGFVryNG;FecglBfNn3gc)-@ni}8*!(R#bJfgt@grvf3F`-c3P z;p)R_J;SW=U*i}Mh+MG<$?$kOPk}8Hf!Kki+z@D-`5Z*r7>QTn;|%v}Bx&sY{01XO zTukmt5hI;Nne>5OPhOTYz*V~&`BxL zauphqwt60R8Lwn`EFZqoRT4SiCFIy9{$wleYBoisleAEpvo~9b#aJDIe^3)jO1XuP z@83zHJxOt7ejwj0TpYRtrT6QJ^aEKnPRM0O4nywfQLb496noH>R{NHE9>21uppsaZ%J zX^6oxWPpjK{<{!3bf1OMurrLyiiAI?%=AU+JSdZqc|2V_uJU}42&Yr+&Y&bDQ5ae|EOOl0!pqaR5-oFYm1hAT%5=iIby^8!o*Tw_%AX#ccp+u1UU{c3 zGw5YF53*gB%?>nGc%9X{%Ii8)_fX{8s0UN^WWG#?dk7yzI`ittVvZut9l=b>*-Ll? zE1=rYe^y85%9%eOkJc^dk_n(fpuPk$ix--E@^GLZN- zz01$s!Mpue@!JLw0TH+A7xW9a41df@oO-A5)ece&Fn}ILyU*_OfCKLCKzYb2B!ivKhgEYwN_$r8)gYs*@x%utK-s z6ahvfMh`%+k~ACy1DDIAm=WZ&s-;zc0+^);g-^bajUsuGUcJ;=Oe|7FkTe@8Gj8J{ z!E0%Z0AD!>W_k~}S#A8TGt9h;j}6G-F}*(>t>w=U(yDs8TV$NN$JN%%f?rQObnVox z4$07slswUDo#0wyBGSB0q;oXDhndQtJqEeQaf60}5-weTwtkPBhMD4?E`v769O!0rucD5-ZR?P-Z&ZxC!+MuP_&%V}v@SrB?&YjKQ_dRn?q| zT5q?49Qh*5puIix4OTfJY`{BAXfGES;BCxs6)Ee-*@F*{nMk8G#4-(E|!O<5(L&$T!9ivJi~!8)L|z;iq?9SivDqr_?2_7fXxTRZ*T!%Y*R>uh_%E!3zV zW_uS)cYwzkPI#2%Qx2d^HWVZgpB^+qcH3tv>dsw|kr#Slq)ZBT?FOes*b3 z627Z;OuIg3rk+j(&V)-}K5PB$bq=)ZnDNXB=_bztSE%R-IUuv4sXI>?@+&G?Ou4Sl zqn3d6p(qsGN?_@p@m&W;W9}bbOQ0x*2lwsgxJ9cYj|J#)z0z&v-O-9%_tPDR?x+6- zf%Zfz^}+v~&#Dz-n9obQMCGMzx}=};ofLhr2BHg0%mk|l4y~lJQ}X>}_jNDyGa2~b z0~e=3zpbjDY?u8{5BdLKT0$@G3>r+ zIQsQi8qT-+Y3*|VdiPct91~{x`PpTxsoPnF-^IM0OUyllUl#O+Z^MFxwXR`gbinr;EOo8rMp0wd%;Mu zvV`Xkz=x_Qq|2_YU$Xw3K)oS?^_= z{&75Fyz~_$G!}M@h9UEih+zS0z=+Uysv7XezcNEj)>vc~l)mR{%^o@WlES%U)O|ij!poE6;|L*rc)v;lf(IdO=o$Fel!#(HCPmLGAgCI2Tiw4~$=9$=7ciHl)Sys{Cp&^0Om>%&C;R z`!Dw3#hH3284B%wn>JiAg0L!nbrIos=o2%j^`VCgpioa48p%tz7hetm#LR9CU%Cgh zH3E7;>J;ej>25Hrc#W~xZWlj_7hi-&5_!h@gE<^tLi~1*SIJLP8 z(mLoPa~sE{O8vv*?~I!~a|ooTLaS}7qO)!k;XRdvaX#Z%`D$8%c@tH_)c~}~mnV9W z(ZK-4Z)DQda3iHF;MEPyL#Cpi!Su(#qOwuRQQ1~Zh>F1s(b^Z&yle(W*5J7P5K=`B z+k$N?ehQ*vmTP|D+>{JYbWfIPwNZ+?(Z9d{bj)4Okwfvg>ZQWtfT-XqCyq2Job6vh zlakfy(izUm<4%NV-9lx9?RXM7TaJbP*q7Y~xs?R8M^XdX#bTfgkLDGIfYF*SW)y%2 zFjzhN_XtX3Cxyu<)(H$b`(QY^5GlLHG4Kc4{=J470N?PS+W?a>gOZ&75`Zo-v{Tlwg4BlU)a z5ZC*o)N}#nk)3Ml%#N9V+|R}%=9kktEMt(%1Up1COv4ruitRXxKrB093Lt4qsmL0^ zzbG?T%88Q3bnb^$h<`=egKF*TbS1*8M-yLbsc<7I@lLg^Q0%2nmPAK$J+cuUF@5UWAI9is+wVzUmYK^=&1A>)Vk+DnV(4lGHpc zuv9%4I-74wID@Cl**jg1Qepmhm~Zk(G43WSU19|#euTLcK3<$o06gxYH;iD0jDsHY zZNW**qfz1Wo1D)qeuXb1y9D4PQD}=aN!GRj`3Ec=M4|Tl`l5=Es_GKuaN1clXiz1k zY?Uvb**@WK#d#h8qT;Lv{I1EMrqS1;yyPbLSk47P;fi(Ir>Dm)*bN;bo1vZgJ6)Na zR~JOJbW!_N8NI$0rOj$X*Xf+<&4nnE=66QIKTp*s+8Hz9vyLI*0dYFR19%wXKdJBn zjY@EqbiM-B8}Ez0Cil*XAR=omC=wSntaSLZYi@@3#ey8i08)_&US2W=QL#0Xe7cN1 zaFmE?P}hiZXcD*s>Pb;etYz+*3$?gY ztE(Dzalvr$Q587bETeA7I&p`XaG+Pr+uV!a@GB2D+P(%78|#)QGxj7=>#^bSIP4Ph zwyeScEGnc2zxtr_{hVV_9JWIZ@0iyKLq2j=hwKxfhU#lq%-6Fx$nNB{jrq<&jW1mL zI@X1QFQAr;Y!~gJnxf#wWqT5vVgyKC&%%~;P^16?@V%uxa>{`DS}R)9&~34h<_WHU zFU~T&NAH0y|6bmJ+yqa!L+%p?wsOi+$oU1}<%WnO#1ot+S#kR`5**}sH7eh+hEuW8 zrcaxj8*V(S9}C*PF1rCKF!q!(ptD}ZaeY+jf?zU+wJ~2fS^zUCbXN(jmugVo^RavI zoZ7u@+mW+`#UZRIWaY$9&648ggq`0=aHGu6Ko%#-h~A~!w&hr250l|I^r|uN`Y-pBl=}}8sh~}n8h8=-orr(W z2umq8>>pbO+S!z`F4d5vQ`05bGO4RAt0rBj3Rkf$E~tFh!$-xpR07QZrov1TjjS>( z72)b%zj^9KZ)}xqc5-fhS5VukeAt<9T8Io0KlI5l2aWL{QVZ}<4x^Ket1HB(Q%*P+ zNKuakiSfzH0Lm*NaZ`d!shZ+*f^4Z|_#20;oOMqmxOap+Evc6)P*3yU7UqN+&Oz)F{JECWPFG|JP)~}&*obG(4K91ceR&O z=ZmZr}C?*vTS)1Fuy{d+sF zaGu1r&ZNV4%B%#cZlKR3q7B`vAySQ6#Ra33Nz}cplR?<+e)D;0?g8o-jg3z8?qtK7n>Me9z1}t<_mG|l=OgbF zO%*dkLj4ZUi-G3(Jp1?flcQpE#e3@lxY{mk{`ukGlNeCpM~KHH2= zo_=lW`FnhChIeYa@YnB7{?%U+%61aN_C*%0d!l#%MRt-Z%q+pzSxozBkJ=@zz@ekD zA{>3@xb@gXl&M_yuiDyz1jc&o$xo>3K)Qt^nG5<)dlXbaLh_#tr@}FT=!B{BFiWj7 zeWs<9_`^b1W8yGyWodiwqfQ);=r2~*_ua96dH)oro zU2zixaf{iH(;m*aJSvtzU?2AZQ^=xKHsQn)YL?~d|7-XF=EFHX{I0mGbF%#ZECnGuk*~!b6>AT$V+^^{VEhX|Y;NIAv0BN_2%YDG%`70;y zQumHx7{8V$vL@y1`cUb3PoWDKmk$wga$=A_F6(pJBwP*Nm=UuO% z$bwBB<)#@^=h^E$B5_2^B$;t}NiM3I+CNVP{2#F^Eni&9wf4(p#W)=4_SSE~m74pY z2X!}Rn%cT=P=EQH0o^>3##-5o5oOP-@8%aelUagq&)CBa#0NPIF$A(#k9dnqXj9UQ z*)Pz;e9GiZpR4DreSN-<;VjYqXQ;2>>7lEpr4#>qgk)5PvXFLVJgWYrjvPI0pj!Zu z%C8*+>hO0%p)G89vZoiqw~~iZ3#o2!C`yt3Q=W(4%I$wE1XfVd5;?O!rEpiQdyW0E zTb?n^1sN~nHZPu_y~gb~LzBWAj<0x1{hapeKZZ|m$QON>=#Fe<6KGMmg55k55r0FS zo=Peb4PscaUy@Z`S5k@aiU|=(B+NI^8kNmaK>cQ=MjSr3#nmf$EHa{OuF*m*!&}J5 z@1p&y*g#2_N#ej`te!6OykQyf z9csRZ6+(m+nK*5oLCz$AH|T?-<7`>GQbu!yO)!khqUcQcwh0-~g--b8$(H~1I71&oXOpxS%KTH zlW=N`AgZQNITp2n$Szm(HSM>HkxUDAh{cW@suO1iVAz0Cy;Ep$B+TE6rhx`13KMpqNfh=IigOCT%W z)#w?7`U3(H^m_!&>4%gyiWBfVA4esSiUqMuGLf*iOGr?{cPtp^fg9?x=6F)~csDrh z8&)5w$IpHClHFSw&iLrOz`-pISbz`(h%jl$HlvG29|9T`sfVDjG5j*rVi8NeW0oB5 zf=BC>oE&)id4=pe0ElppuR}C71tqup3M&D7w<81 zQ}EY6lOI;`!~%e#zT91iW#&sW$_#s8dGL}GJeD;2M#n#ylU1>dJ5T$`LFYtTZ#E?b zzaX`Rtj6T1ik*Vg`fxoZWe0+dnzFRaN;3?9+zsEdUw_3Pa*Mo%{caG=;z>HrR%u!x zGV5N0bX0>Ty@bnw#}TJS4lI{J?J+AYJEzB>J$NSKS%So<=qL~jp}A7Y_SQy5iYE1% zVHf%%O)h6j;uhW5`ahj%S9Vwr!V)!9BuT5n9$a8jc(;;fjbvoBF-{pJio#1iV^*tVDj0wE5 zD^=QxmHB(GnQ2P0`?BOEv)53H?BSAbb)J0rs}bdwnE*x97Y$FG?Wa@%7aom0crZEY z*MzwqDPmVta+lyS#|EWdV+I{C#inUCP^L@KT^R%^?S-L3c7FWYH9&l@U~L+-`%t!^ zQTXaNh-*{Xg$)*yu3arYk79CXD?p~z{xH-~6UCLdimKB$p_#%|gp_Fr6JK%cx^wJ@ z5?bVuNYXy)$lr8n$nX7FZ=?>=PU{2u-ShTB|PO61kf&lDks77Y@@ z0Gg_+r`~H=P{{rO*3HVQ&Z;&y6qu8%@Z1c1o2@e!{n%3B`_|QTAC_yo@r(P%%fAU0 zc!MvaOS24OM-tf{Wxd^mW+t!oS#5##o?(o+79!fDk}q2fE$cNs-SfdG{S3z=RGQw` zu=J2dmE4g%HCUlDj?-#((ynzJtk@+#y>s0-jVug0$b zB_D#Zarzf3P6;K$d_sI){;rB%4)JARPx)xL9XkYX_xZ2E;vc&4#{m-px-TjaQoFsm zFFaYbzy;Q!vc{`SGW6RT)=NwH=wc-98$F1WP?^bZDiE0gCA*lfIa>J}1qnF+a9 z-smE&JoAH?I{N3_Z0|tZ+mCae!mBrU-`uS{|LYMvGcgi2x^BSQ?6rQfUc8G&)K_Ze z-JjX0mCsX})GXF-vS8%MIX|gC@B32>^Tk-iT<_BeQTBMx72hx<+K_teWN|p!(($n< zIFY(_kz-8IEsU`bwf*#Feo{w1Cf=_Yn(4vqlBEO@oH>c(JIm+&Jp9xnv7Cf0=EIDW zl8AEE7E!P zOOX0kn-p>@zDvS6uB%g%m>K;wIOL)UlDqmcMZD^avLI|lc{&}JLs^e&QEpuNC|drR zcygYwW}X)KT2Ca}qG&}K99{;>LY*yzM2}t3oTiqzcZ0OK$r1BYHRCAjczm=!@=S8B}CtZlg zf7MbZ;Z?_uY0+((d@j}T{;t8>j~ii}T%>^(!X~AQ1sCIcsxaSst1hp8+)%@4vB@1S zIK&XKF?&U@`8e9wAHQ*{)2M46oqpDr3P7EVH9qqxR!gC&NR7#}#g4KHEY6Dgwq%=& z)FH^5acNU7>>XF0JXe&n5k*K@GO3^EpMr4T7Zo*NVy18PVLnSN3~BVn^-l5k?(TG)#%a^P zU%T4Mv)4Qdw*502clbU~V9mSP>Y}zNJhN6Wu$FYm9)G%Z1M!~c#mGB9i{PWRvh@G$OS7$?4W(pyE&zY$}fH4Rsm9Lj0W(Z0>` z?^Ne4NmZl9pPh|gPMo%}OpFgZD>!Q%`{i^6_vvHLE7n3Y?0&Pl1LYt4->Dskczk)W zJ3OxKqRHRa?hj2033Gk833>}@(|G|FLxKZJ$g+9`O+Cd7uCWRHBzi}p7h$|LqR(lv zl21U&Jk*dFOZOKU=Sm%z+z#L4I99 zXy?(eNwbqjZ!>2BFAp9tp$uWe=Hd@a6#$ zc3Q+V+>F-A<_rp>uK~IbPrF@;Pu%1X5CuQ=Q2;|BxYKwi!3Z<}O2~XyA5wQpt2gZsVioh^)Y1glgDcV%lieRD)9pPb4%atpBErzpPL|B=m2g3QE@VXHXsxkVd$(tQ;71D zv3Cr*MJSN(t=NBWL0+@a4ksXzK!1gXp+W}C(>{KCEq{p1o(XVL*)aej22>n_N(17h zhvCA&dL$5h4X|#;1OEKm7z|p=g5>24!Qg@5BWWi)-cHS>C zhkOn+{V^px`W<|pewS68hmx3P-ZuVaJBO&$@8pBs@B8`19Av2Yc3?@YywU3dRCDqv z>&7WI3?z6m^B4O6>sg3;JGeHH1?mwuKc96({9HJ7YbnegAym&UF7j*3XBC)%tCR!R zqi6{04+Z)xIg|ZN3kM-ug6WSEVjbLP1OAPRvUtI(i^Nkb) zfGM#6uuP)COko|B1&LscTn?eZF=C}I3gL?C+$@bd%AksT5+23SkfzuH&_V-B%EA=R z6ja0qu*jxhU?Q4$L}h|AsHP<$Aw{+63L^@tvJw=I4S~H1r7oP^u_%w1_P*xRROHLUuCSaFZAj=7C zq_`H}(ws}Slu#;3thS>N46>w>%94~zv2YQMOjgCU1PWGC)%L$`sGye5Ovgs0V4z8W zJ`AW9jV%lSQ!8d^BpiV&kW0Lm&=(O70J<*Hj+9FT%;KDpRlZGHVJ4k%pR?sI03<(Y zTe2melrV&fzwBCLk5M^;x-NMQtdu$_`ub4m;ZP%r1(xWMk!@~)sSPtVXCwQUv&~## zfqtpluB9*upu6Y+DzQvaO%G*IAh;-j&|*WtH9ZQVGR2Txv}PY$1Wk*8K$ODHqcN&1dHg^p7i;9GgZ5639^Hqo5=WqE3 zBA$f5S{BH>YZTR8La3@6<8_1eeP=mDo8Zr8D)Ey7z@)#<$jOlGk3m zd*MzK(i@`HUGk!ossyb+S!J@|tUmuAy3Q%O(stdpvF)Uiif!ArZ9A#htk||~RZy{Q z+qSJU|F!lxt?j+fYHi-m`}Z5q7`<~8oxZa=;){ql4~9Qq9_yVzq&z+=UY_4oY><|U ziy;0?aG|Ek9$nii3;tVXT_R8_qW^&0T$^aoy6UMiia{vWK#N8WNX_8?s+P;_}8ibvn`X zoqd~Xp1a~KsMip~J+>Vfn;c48ufMkV?08mOvY=@(XCEpxZCG==y5+lB@`hVLa0jJz z^`AWNak$pSDP}pMGeLwJt*~;lUYr=9bu66iI+QoF4jWOt>b*-a+yS?&%^N7ceQ0;x zndusD$0*)rgp_-nLnCZw(pMd>ewz#Yri%(BF#uG`wxXTBw9eHL!qIcUIsCGbM^nzS z$l|4Q2P(!p!>mUp%QTcut5uj$z}LSUqQZ&Da8;hIaCO!$6mb9GG|irRuWw2|RrHiq zD|Yf4g|V|{_MEV--CB$U;wEc$ZiWyIs0O#&8i=igyLb(#3@?T!2_6cx4*ydzMQ;*| zw_(_Jx!jSklN0Q;U*Pv+89&lI>CUFSq`u=qK5f|N&_eEjuhELk`tg9JoMxlIFk zuz`|l;T9X+rDVji31bX}#yv)+z6dLurDfwbe$^*`tBKVhiAAM~-C*NczauB(=;5l) z)VLaWpGhLYfY!E>Mhlm;e7lWi*=_LcC)Mily{%rez4?!p_)lfzQ~v5%{&&>>{+VF*9zlQ#aA7F{)*g)i z=`+F7$;s42!qm{w*~rw;`F~auZS9FTQND8YcQ51ZP$`{{O3K*&K3LeS}vA1*e1 zg-X_oIvKC@)`NBd-wpPwSL}HK42g+XMI!Bz#_eN=6?e+=v&!E!%vSH+e6F+Pely~+ zx!3QVY>rkr&#~*x$1Wc+*)J!0y2Sbhbmaw%!xQ&y0J&zo(rET^wHmdX%lXjW=>4!> z5ynN~@SX+=yGs5%Po)M?;d%e6)V<^HB$da`7Tn8x(Hb4X4o%@oSBvmv8$P#T-+SSzqSLAi3dUvm-$zs(Nv>Y zAXTJLe2Fy5uzM@sNeROFBsTxtn?HgpVmWjWz>^1c;-L-bAlKl;EUC7?SzjJ$t&dXp zi3Qe$5HDsRVs*7JPR#I4zl zg#(jS(JX%o#B<456E}zQJ;BZX!vO#q*KExe^N{F^-QQoAR|Q}pBbA4sNZ);eTd^p> zXFb^ySNNgO?0D00xV6q8mMgyN9DbOPd~@9M>}yP~fy(nt;S0abePG*Uub?V~3sK!h z3DOX1ox4-c$P7?R25CP(7|kf7EYI4T@LTM)4DsRc68JrYg;eWbY46)C4Pl@G+z^z# z(hf`m^gCHJVYuBBb!mO>DSjg`9vbuwz;6V(mP*vLlfn+Mi^gIFP z%oP}beq!OT%no2hMclQ{KmN)BXpFsa z88SO_z25gLqm>ufblCTUN)^CINP_j2>8rOal_8scZ|_wNQ$C%bvfk06ew7c0KPASd z{0C8i^O{pX4L5L{$-Q)(6H0cWE-BXCm_+(RK%uQd!n5r9K!gBwU?l+z9= ztWRBB*xWy=f`dGiYQ43Yu`0wo{2HPoe!KPEgq?m~@yQ3yotjoh%64D0=+RK)V^eJ} z>1g$TfbO?m8A%t^^kf6yM|{a;kkq3bF_v>|%@$JLSc=A4q1KkF8$IsLWBq!(qW30C z%#C2dawYd|F&6*+!>frF%t=auP!N^q`6{4p!n-SRlrR z@44wKE`E7J*F(QUMGJ}^X$iC7-(I*ofZr|UYY21{m!6^5>I>!~sculpdGeMkmJK@E zu|FcWZ2$Pi?aLC%bLvl6M?I$J&^0ln8#Og{T6n z%0=59jPw3Cl+0elLO3CT+$Xw9?hlBu%xiQ$&AI*4`>zSg5|NpbhkE(Qx5X5Gi%N_&)KmbJ_#5IAHE zM!6-F=9z*#pvZRM0R(@WxuASWlWGc-HqN%!>HLFyU4SYSlpAFIdJnf!o7SE zapB_Um75@1^GQ0yUqq>JSd}6IVG?8@1C&K=i2L#qqF69aBF^6G)qOV7IfBt9DDSYeHFA0*v;UWatnBBsY;II zrOE7C9A<6r1#1OS+adg)o-*0qr2^}>nI^ZDgC(dNF;+ml;0`7<135@0S8*EFz2})j zliOIC`@MjT3vJf!zFIG1hq!NFLv~b@ilxLGBa^iQlyFo4T%2Yu-Mu_bn!F(PEb6l6 z88C7VxbiQ%vnAh`)2Tt_?|B=Ds-?j8FSZgy&uuytdLva!!h%LcI=c+yb|j%M7yFSM1z$pE^i) zZTDThk-QqG#9s>FznBn}tzU{qm_& z!Zm|z7Ean8L13ebyVTom12V0?n0=dPgjJ3;&yW*r7TzX3R(rY?ycWSn1R{}1!ETaG zSJ(avo}a>+i}WFE>nXb4xn6>)`}R5VEdG0P$hTBBcTj3Da;yc+^{j~=W^Pgcwx&m_ ztDDZC{+3Hn)}~h7`9RQ4tIbThAaTh@t+g}axOMDDvmBr&a#GffZOl?m23i}-5eO--MM{< z@lVZ4l5c;RD=*R1&`vgDU{pxme&SS9C8iB2Cz{xRnz|jgU*8hbLj|vo>s(qzY7xXt z_aDDH-5ja|DvsZWHKBl+skZa;?b%bw@2rsHPv@=Mj+$*&_N{jE(vf2h43)Wmq}`sN zfOkdGY49;E2CSRI71_t^{dK2=+^SbBX*hu$g>b3MuUFN=00q z+0X$iF_B*u(RfIJi~c7;*RsUY%g2pG>VMzwqrXI}}EGgIj0dqienMnF4lLMxu#SRiVp^5!&DlGm{ zzit$i@31}Gf-+beAH0D){XSPu>Bf|@9C}1{=&#IE> z&=zhadUK`Li&2U@3D$k|+snuT<+hT$4%NbVXst-dfse}{&XFr^w%pZz4Bo|uG^ zJV0s}0u)wb%#N=uT5s41l-Z2Ze&La=APgYvRoE-<$Ygx9GXe;^jo6m{fpW+u z1e%;V@cdNf{M-b{rfBZoRG?6N3DU+HdmEl{;}%HD=Ez`yX@O?3Dkc^tHU5Tx2W3h) zWKlx^WAF$5xc1^Nn6mX^2}BEeueNn9o4=w%4iwUAHfIX7wu%^LEwLFI{c^^8@O@%G zwZg4yk9UEyi2l-RDOhw&K8<-L4%oAW>3#HR-~M6Cup);GA>24*GB1S$pNRlg4Zzst zYb97=YEIY}IH zXAZ2_=P`BdQ(#9CNsYKCudh(U=U^ahZJn0m7JIwprKi)gP=8+vujnTL#qO{=vtg@s z&23q`k+h5`a4Szc7LrLsAxCcqQa3=MX_GIx`2p;;yt6!|-z50i9ndQx5`;ChjXAa1gM;EsJtPk8lm$-71%U$jBL zhz1R=+E>U^t;C;^@v2wFByBblQYO>hx#JA)MFy^aE8e(q zkZB%qLX7J|3j+$&Ap*X@f+EnF3kLxP8$dF=phFcg1)guoBhzl@TRcq;VpTmh9>(7y z)~;1Yc~VY09xQ3*s|9^L(b4413>PyaJ2+}xW2=w_>~Mq+T_b)EL5J?mI?EAk0}GdO zsKi)t9UtN3$>-JXcBulv47Je|6$8vw@yUhK5s}70`$%8N9w9?m$Lk?L=g!P8l^sCw zf;CJGpunA2t~;8XEqOG?Am=Kr1ce1a^@Ps)B!K{CiHY2xgjA_r{6k%IOcEzNW)47H zC50vJ{F<-}bG>957gUs7yl(f>gi-0!$>r&OuuxQMMW?p1i(I8EIekIcuj3=nZA^Mc zeOVSR^G7>!aT<16l|$i2xexEDJmOqM+TsgK#uZjZ$YNK)oz~^wN{3Z>Aqt}buwq1p z6*1%BD~#IsbW&e4k{>=cG}EX!YdsBws_B(3E5<93$j~`lo*`Y5eZrdwV9;hW$Eh_H z*KL^25klYR{4vte)+C%9Xmh67>a2#YhBg~mB0!ok_oXs})~XfhF^1$7St+I_y2=-1 zA_Lb&R(gy<%r?55Mv`|$nMBUQC)RbE^Y7SDQu%HBC=NvCJQ#VSLJ`Aj`yLH1^e!Jzb6Gc^99@0qleg{WA9PEvfdRmoudaDN_W+Q%Fzj8S zroPA7H#3dn05jzXdX90Pb;lEa3UG>P^Oox-c$= zXRJYJEaP;azM3N}f~N2fbI-2 z@TDj0QZDc3InZaFABp-us*yTt1Hu_Jw$L+nG?oe0`)nQ6&>1n(90t4I1)}J2miw}_ z+OJRrE)HT-eH23ltvd79Y?qw$ngVIztxHRqEFr%|J=LBjNUU)RlfYoWDs!di@5c0a z*y>HIhI)!^k)rc?*39WJ5{_lBip{Z`1CxK&CZXn|*m!}^zQZ)5Z~T$2^Lc~$%KdFS z*rQLgauzU?<0*!hQvsj7Sy(8yJ*nr%OW~DGeU9-_+U^Jo<9X^9m~s4d-i?aJkE#Rj zm)p%i z)sNfr#`VEqTO5(i^#VsFJ|KcC$-pqseA@O5wYK_yxtTO^z*4UPqft8m^OyfWL^BHZ zPEM9aHl~6u&K3YRho!Nhv!%VAn4zVOi{t;=klOyUAq50Ay;cEiz($nx>p$bx=y2Ct zU8d;+syCZ+;Q*5nw#Kpq=Z-Gx?{|2~PRIf!Bf{Nl#!y}K){NGu@O1IJf#&ldd z-tN2_+vlfTbPjW*4#2CPu*jcnFIZVfEIq#jXdPo}7pTE}Cu=eoVP!Vtd5`N`bg zyYOtpWQrn`-&YD=j{WK&lVJMNL>q0T+`n@I|Hed#y$Parvp&t9AiNfOvDo;u*+$Qo zE?wsVfx}5dr`@`T22Y(C2I&HYt7$#{ic6P!i$VbCDJ z14U`n-aRIkIaZMXzhA>UD?*6RT!8}dp;BcVVVJk?r)i;vB}Sm$3r}#7tx1ulVXM(o zmUBvC`QgPAw}BDsa069&lRndFyO}_l<{BxQ$>7RK24t+w-kqljErim2T2i2RwR+Z0gr?zj-{N8UW~#gbSLfNeNR({^rApNRkF<&J26UyK)%|jlG49Ul zaB6=<`ch>}7dIwPK}AA>ly8y+wL4hPWM2T^pnC$y9fh9TRmku^5P}*l$sF6V>!g53 zy_SjiFyn#~R_qu<)}BVEM%enO(XnQ7El$rfmIXA6{W)E+XH#1;_1xQrub6d-PClIB zbN0{0K-cE({#38A9?k}@Au)FZ1Y}_+HHj-5eFc68Nh&Ea>>-aHxJoH^b+vdKV0sX~ zkl{oAUV3TCv@cAL@|*Z=w37X@2`IDNzxKE5wRB%=>KXZ~_UvhZM?_jC#1VGKgrNFW z`M4Ngz}L0RKFT}y!*bDs>diiNYxAvK z-cJ9#MTHAcR#Y?eEst(*<)E#dmcF+`mj`Q>6n0yoEQO=Aq;Q?443X3qW;mZ(xp>kIy z0RkruEZIjCTQhs%hElfSqk7m-#-rEBkWDN?>E=~fC@P(GtTxz&)hn)tse_7=`3Hq5 z?T0mrahHm8rf{K5I@65y5St?C;Z<)-+P?qDk1&Y->3+BpXaj%j&z46ytc);2a9cc> z3z>XBQE$BbQL7Y^kH8A6tU@ik>OKyH*1m%vZz9-yc8xb!cQapsWUYQEsE~lk0b;`+XglaCoGV1Yk$u|xg{`av>%_gz zjp9<+%RxvBMhV*{LDJ7Ok1;Yj2rS-HgL4AkSL4R|vDs82Zg~v%0(<_#GTf9Q!y)f# z5G~0^#_Raeib{jIrZ>h(=8L6`R@Zh{7|WBcTc~Q`r_j(ZTHPr#($sh)o1>(OTx2ISC09Vx7t5 z(N^hYmA~7lB~k&-T&5hAiBsHX-j@03A6k@Nvlro&d)D!#+tgL+(Ud^}e3HwV%p9Rd z8UD&`MKc#@Fj~kgpf$}Zsvk^hAn5zb9gtifsJ@?U*>IDV^af&-qe(N(G>_qDLohDm z<~Vvj7fyN$$u!#I?3p5>$GE}h6@m#j_sF66yAg-GPP8TI6uUhd_9&@dj|GsnJb>TC zIf4BcZFWs)J-hEwiv^BH;a?frb5TqXV?mELjJM(C-XLg6rnFPnLZR|{lGMj{7%%Jw z*`Oqxu1CPS2%1KIH4er$`QnU*YsLTsF1WOHI*s|)oDqKu?q%O#J8p5S8C3_bnJk|4 zuF>4uk&|kvuhthg?UcG*9pv4rAg#TIon?^ZSv#p7J0EKP!l*<(C;uULrfo3zA**lq z;o98P(Sn7j4=1lCMr}Ah{H_0zq;{?Aj8IjOs%M?lQL^Gw9pAn97w`4UqVAK(2e|Kjru02J@HS%82z|I=H-(canK*xp9X)X@p>h>*2( zvNd!zw)h|C9_@4GeZcf|NKbqmrE?idky!=OZUdZ3}m-oupM8HzOHNB{7r{n zmNQT7x!Yvq^VKf$9qPZe0{0zTO~13klWxn8Cy$-neE04Sw(jja!?PNmf9~rbu_xuv zuW`TE%nB@<`2N2BzqyR~vuvn{)lksRjNC`O2uW{3ki|m~-@Z8R9nd9z0$`+YGV-~_ z+riE08M^bEpZKH{TXUAJ24T%Vk zB=;X9c;&y0;F2SMPyaE39|DZvTJ&qqA^#Y`t1!fPyaV-#BrIqmWs=z@%I1~Y)`V|F zhb?k%fhwc_T8XBL5x#O^U3V8309L5Lk*uan#P-|yW~i(J9{(r?sE430rol<4OU`;> znj}r95HtE~y#Pw^OYGJi%Dq)%34Cq-fC=G0sQ(IS80%;?uEVEMSfpNb;s$u{7fg1P z3Dmb{WV&Z&?6==6eg%B=!nfJ^aoKN|*hg0f0RQ6{XdK+P2B;sUqOo^}k>#!ocpk+~ z!g#94u!TF35n1feO3W|<9Sj~MuA5Tg8@hn5LfjpK+Zknpf_!M{o7^C_tW3cIsi{nw zM_h)sIW*|hj|6b#dWlKzL(*hRIXoN}IUTh?xvLHVF^$a6{T*PrEs)u0Y}#2g5$<8h zPzG0LX@O`w){c-rGEnt4KJGe%;?2=<1JKY5$o7C4YVn0xVdhDbA3K9_%AJzWmIwa`H3EbNxMtOZ{>e34x@; z-gZtZxr%>!Bx>fQtDpE6Hb*9X@>$!nykD}4*zIF-rEM+gn^$oTdr-AAJx41!(t@nO z-@mrcUj675o*2XDz*ZKx>4MGz) zs5A#r1j)Q72Y1xosALkdePQAxh1yb5ucLIUJ-F9_{qX!x@0aWPa^EP?A|Jw62+N)M z+vgdx-!xqve=l^aJyXds1yFtwm<1e+X2TC6X+kawf2*xp5%UTpLL)lO`A&Z`oYXkf z6;HZ&`M%#-S=z5h;)6&PTyV~nCQ%2qm`ORE8S&}KZKmW!p?NNET4lu%1@ArJs-Hjw zx7l__XH@zJ3t5mT1`dF;zEiPqRY!!m9}U86{w$qUZf977s$s%4##$}}`Eb`sAD{^d zc1IYCje2R#oUsu4mlOP)oQmi#Om_S4S#y+;jU1QL59l6z@P}q{S{rj%rLoQN-g^mR z|NU~SmLmm2N4G!O5kJ2Jj|0PnjfApAV_QeKa*i1D961&yil%<1&aVu(^_-;MFk|og zhbiAs!JqWYYzohSnLX$ajTx5l$}?t=R0JvV15G#Wt%l9^&_qtb5tS*%u7-P6c!vuG zENM#7Dl3JI64G7vbVl z`vzgNF0S28>aFE#`1Prr=QsKu0q1#Fvz)Y6irGg%mQO zeKUHASy5HmvR;E1xde_G2B<@!FfokSuhr=a?kQ^*fY&8)w9uHkf)o_AXQamEr+;E#U7N% zNA2vpx4sroa!fV4x8@Q!X{A&58SdFOm6y&mA0NfTEI@u$sN6^#qL!zQF*s4lW1>eIp30EutD_ z$4=k!hK3p-6oy0<+^H$FsQUF^RHkBLa5Eu?VBf2BlT zvmu5tF^`6#lx&!HsjUWXbq>jjJ3^iTxJj)wphLtf*so0ea5E2SVp=U?hY^Fo83v4} zJsY5lECu_e4{n+Dpe(~G7=CKyW{3Amp@Yt2gX3H@hZvEk-`8#Z3C$1eY#MEz1&i)u zr_YqD%b)z-&HSi8)X!Y*y2K6<6C-@&_nm({zpN3LEfOfrxZJ>>;gTU%_N0#(x zrM4v76t}47A8B>9ZqcU(xE14nA+zah-L{2%rl<<^zJbHj1IKMzxC8fpq_cF??LXpd z!6>L&yXV)}OCvUmDipf{$J1~mqwl`bH5Eu`wO=-VteiH>f-AeNiv?lYw72zXy5+dq zTq=#WJFJr;=Ui`TYkK9cY#;||RB4{ub;bS zQvj`17$Apou>~C0L`-cg0VolV|3Zts0%9SIFJ3?JN|1E`S`7COZQPI^N3%J(s8MNi z$)-^~ltp;VYCdUl(WOJ|cV}!UopwXEv00r!6t;NE%TN66+s@boy6!Ust}l8w-iN8~ zPC>WpTDuzV5li>2>0`X<^EX|m-Doez2=5qTLDFdA37*>Je@PBoZ#n>yL%QkBG=BH5 znanY4ul;%si~)GllSTx(Za_SeOLKh#Di{rsrC^NIKPx;>7>~n9%Fzh=Elc#TLtE`k zt$RQ}hd?M`{4WzNw`sqb_LsD*1 z^thij0UiC5%Yo#Gxo?xs5RIjVj+c37$5D(#3^^yh1hww~0cKAkL4pmhxXR&9cmF~K zd(7ei*r6{YCXQNcAPMP|pjAphAt81SHt5$(QljMiKQPzv(6+aRoPREEmcTTaa;iwZ^d>eb!i~Mrg@mOohVT6h);NXTkEqDaQ;%1W00|=vb z7=K#`b*SBD6*9)Af;{MXS}~kZhE=|>&m-czUgpO_*vIq#75;pZSHCp$Tol3lr^7?o zBkM3X40|JoGYCaLl(yaf$^sgXd{>8KLiEt|B9JI%Xn}#lff#}DAlQysUI#m47qo2t zH&@{wnyXXAZ|MHVBg9i<^DyXW zgL~j_LA^`Cr_t^u+WCB2Z`1VV~SiCtZjwB1LqU;A8j{#}> z>Z=t&n>?XuEMC$=jQ^1hUPPUFHRQl5@*6Rexx32L1LRjhmH< z{=SumVvjXsV@UW*E5;&tdet@k{W$HhXjk*2yC{38^qI08sm<{XR_ZOBm_Yo7?%=4L z#uoDU&f71rU#MgwIf06}@iKOW+XtfB5dq~JLJ`qh+gr_{-8vt{IFSeMJcw_d@ql;R zAHN!XZ?Dbv^7fQxcmqfUkb8llkF5e4|D!zqyHF}M?!y2(nSBP#&db+ph)r7P=K8;O z)Ast?HULTGQD~1hg;&I5xk>abn~Y_1Mq zg{pnH2p8lUI7t}0Cv*a?Y8beV2NY4&X{Ct;%BVAFYK4nnV5=|g9ehSNI70Na4_$5 zYIyLhOdA#>K`>w$dZXHaAT0~9eM9&<=&b*+EEp<1$+j9@p24QcP^ZUY!^g$-oPrqB zwXtM7u44?ua41Ca!ho+uTdB1cf0*VlkiS^+oUxG!ud9To($QLJQR{( zD?-eSQgNkoiHc4vMJ_4Xg149FFwtu*dkiLpL*W?MA6LrT0dgKR6&hw7re9_x!6$?o)u0Ourh$j^q^jdD0j(aN(hJrJ)x1IJtSyy772r~# zlRS^BwF1ONiz1k1Az#6#z@W3bFjL z-a;De@_cPPR26F}5+kVhEv7PJ!*=`2{aDXX@HaQY@4rQ0fsA^RciZ21wn75=cIX%@ zs(4o|RSOBj1`1S(>}ClyR;RIy)lz)y%%hu{_GPz!kQLncV+b@=+lruR z`f0X#ba|~6RQF(HP0~gn{_-H|FSTlsHg22==HjZ3%~yd&)H}=5FjnZnh;3DH6POaT zMhkQ059Eb)D^XVM7LvIAW*?Y9$%W<}`U%TNHg03JT0|ASq~;A%6iB;-Ui3&v5Y9`p zFP3qwy6Gc9QfeX?mz7YJUr98Y>6*{un0w>i8Y<6+XyikfTS}(Uol5K3aIL(vx%>U; zcsDNefEgie7Zg3wrYavJyJbsNn8+Gy?hNE$|13k&0r;Dv-SK9Q*lL2>_t z)i2k?=X0`xPav;6DF2)fwqdv%A0gt2lj~m)-eu3p!xj;PjiAP{if90}QnBB96do~l zY>(w^KckirRphoN*}}zfvpw7dEzoU8w4jH%ft^jq!w^BIdcBkW%pz#@wX$q({4YB% z|2W#Y1&eB@Qv2pxwZB>$wHXJM`n%LkK8#k@Pq!|Msz(i+nYz?rsXGnYmAxo+V?r9| z)n26MPa?EU$72g0S?uHvQ0;uaIiwEse<295z{ucHbvjYn^ol{&nnszvHFyrSbV&shnAJ`w(W z9KIyGuOALlTz39|yw{W^`~vd5_*RuiyB#sk#y7Va`peIU(Um2u>27iUG_;!}n)Kp4wkC^t zWP>99f_z`-ifY)X_g(#HhJSni*H2pLs40_4%UwneD>8#b3ygumD3^FWzCn_V@JCZ- zis?Ckke1R`MP|$Xz7i#1EBvVN7xqP*ix9DZMxjWrg^hb86CwZ+KORq>1C7*hHwxof z_oyZvhsx;SwfGa_Ea9XelRz#~wzKeyixql*d%$(gY{v5t@ zEo9Mi0Gy}#LBl)1*T~gXVG0ctwy#JTz)keG$gL+y!=115$J`CXnz0YDXPj((BE|%@ z$M|ox5^Ex43rGPs@2bC23Tr5N=e>j2c49n9$TO-r6%J5q7Qcdkk9EXGNm8M`s}(5q z!uz0R?zpFpXpwr8LSSJpi&jt5&4Od$iSPSC&o%;0(IIqCmp0Piti)M(%yL@%CjFy_ zS2{o((U{D75O&T{cu<&hFoGroQSCf>fSK<|EOpuSPMsn>bFe)^x|iWI80akm)G`_I zcg@Yhc<*m&mwKa!MpqRmm6CT-CJ(~O@#c2p#OLLk_Z{kp-l@>ye+51NaaG3Dk+VFI zk>ls4nF)!|7_7)6BiewpXKpf5NPz&iA_qMqhYBosHAXsqJe@vx=~%!1P1*N2#pSDF zsLA4Z9^`?WWL?kbnOgddOCv0Q-^J&b{DLm#S1TISn;l{d;j8`bkGQ-UIsb+7b20GO zDlsX+I0fN`ExVw;Dsv*chrNoV$y)niq#_jE5QW|H{YZV6Qif)weKiO04SbRloUUyG zhj-rXg7M3vg~QPmO|KW`CqMq>gdmR5mYuLRuIODJE&3tNua5w6Oa?_KsM%As!PxCx zzavRCr#yP^6hHu;z2NS|G=q_)SoS54iMe^MkJxn^%H*z3_@&O5xD#xL=Ko`#RWbPe z_dM!B>(AG2B7a2l(qnSzn&KY90HDG&&Uh&0mEq3uuN_bD3uhh^64c!iVR|`8d@pk9 zq`CqB#CgHziw=?R&sjG@&b=++x>#{K!L2YRgzCXMotPan0X{>HPM&f(%)KDObzWKe zq*NmEO~KU0)I-d)G(iNgXu*(4Q0Lf5xnOmkMo<}}?SY>v<(!mbHIGrl+fB6jwW6Q1?3L#I>X=ECzw{F;vM9MqVVkUXyS6ODJFdX-oUw*`t z^&bF-sgusw$=a#^NgoDEZQz=gUsjC>K9LpDao@oo8RP1;IdKq26-IDTsMTOihlSTM zd7*powvjDgfDz#!r@{Lbx5RzaFR&BZ<|sg*xLXh8Y(+1|TJK9SjEJ|}0Jps;FOoIk z!D5NDLwL9^$%3+*6;d}MdJr%!(m?r0d?isiOYj?-*tiMl$zTv;HzTG8iYalWi2_^4 zLlGK}2T@HMl0i?h3DBa)4TW>G(^-Do0gVG+a0_S7zgho-^Vn(_;+Kc@<0_SLh-UQn z$emeHCIRftYF1L)l>t{mGnG|dEw*WI+C#yab|O`OaA>#&;*`>^%o8xR$dn`6x-7nk zB=mj|aH)_O#cL3eN&%Koh$zQ_6Ubt+kJxM!wnPbjFon(HJqieEV9tg1SqpIEAM3@! zMz7obWY>rk?6r1PlkPxgg{JF^p`bxp>@hTXhr9Rt$K<|esIU!5&;&Bu*eZL;I;kF$ zSt<8FsSI-8Qgj1Z>}E&-y2(|L#SHmwaK$?(VoWfDDvxS$IER9AAEK2PpqK^`!h=iM z6=7!X88?L&*~-oSMQlhbaZ*=Ub?8i$B2xtM2C2dIA_l}T)W17}V(aq^Na2B%P}J#V zITPWTa(~6fF zX>PJ;egW=+@aUp@2$oeTI^Vc*2T?Vm2pTTSP36;>DnOZjS2%NW6smQBncYGa+;SL< z<|JFlV)~gmfh5nFx4%J>{raZ1;rjhhc)$|y+^=;Ol6s({)9_cZbX!T+Dr#+r4^%};KK=m06s{d zT2EMs5|xFVOhJj2ZyoK2%XZRu#hm{gL^l$8f@S#ohN38w${~D{ZVA3_0HRFuAQk$4 zRLc7Ycu?;xP?zx81{KM@W~NM-2|*oY6?lCP{0p1Zh;Qb@qJ~ynn;;uozWj|Ra4 z{He~QNj#zk*As>pxB=%Bm(fvc965+@g!qsnBPP(RkTsJ+rb%GH$eCPtF2*VILly@& zB*%D(`hgM%6)P;M1z0@ncDleGy_pgtd@BWk+8D@BN@9j@u|y&#(Fj=YUYcbkvHZrm zc@0`RlDC+40&h@gZB>Zs1QIGtDHozy0wecf7YoR){yM^<_rER=qXH1lf}c0zXn&z# ziqR?iRR!E(CO{X#mEkDt_%2Ns|0b&s@L;EvpSyywn#4)`+IZ;+7Hc9{cu>u<_Ft0# z0&c5v!kz&E?y&?z<4&})nQRp{S&Qn*kC9CFXGK|LG-6r$4eji-I2{|iB!6BZU~$Y%1h{r6+mUHjRs53sbTwTn4W!2ks@JnWa5;$>mdSfR)iLkaXDKq(zv2*h@=nR51-%^W0;A5KzqJ&4&qz*A^NE z^9+w)UGO(bka0w99gK$|WM-(rHPv<3jscx-WR`nYpCddahuZ zHEcO8-ZB}{8c~ui*im9==5IGn5iZwqH=KdkUmiJC&ZGRo(I$10gd5_!*- z*u24-h6zJ<$Wciy#OUjS!}3h2F5!-5Mq@-}fiQzOF@r*3I%eH#G(Gp_PfnP9$H}MD z?f!OD;d4fcJT;nm^*DHUMGK+ymn(Cs_C{ItLo;T@d?EMR2a70vC1dre9&6cg>J1i3 zOZx2w^cA0MOd&3UM%j72@kZ-|l#A-k&((8}X~hd0nhgQ`ncJ%fm1Ctwk-BW#x+anX zOdYkF_S2;DG*wdt*1ew8R6`~IYIVF=*vLio#ia>kHJMtW6Erd0REmDlfv?AF5o)UY z^+!)dIABDIprwZc%UxCk0h*FGK@Js%L%tW4Xn6-%B{@t0@^ZQJM(1i?Ye|_(t+<*G z4+NWEp*87^D$B!2WdP;Gd;Y@VoIAMxE-vNVN@_xNg(@U#367#QH;wD7ghG~(Pi>ts7VRcSo7_)IgK|=rIq!VAtMPYOJv#(KI9J_UTm>7Zyz3h z(^h!HaWC3H>R{yPzOxkmEE*z4NC)~xY|LXK4CCEE$-x!g=G}`7i^aI@)}3A_jt^so zd(d3%R+Z6u>uf|XpS~WSY$m$T#Cxj=vb}a0V8^N2JmXNrgTFSGc%~_-ZCkHJa3Z^= zq8f1DAajDyK9_;6r&lOn9G*1b1=^{2lFNKWMFt*t{Q zSxRgHW3oqG`2J{mh*F&|Wp))+_5i!_;My!=+V6My7x(brG}`;`^;h}W`i&%Mt4N3L zIZHwL@8{31SG3Go>Md!eE78+*P==m>*}!W@r`dRf)a*Y zSOjT-W!0GwN|dw4X>qbJ?NvFOQ3hLozAFQQJX)io^CvAvW6J0zwW#S` z|IvGX6D5zCBFE3qWRcxcmMC+KmLiF!wVYQ9SU*jSbl`esr;CW*0yJIn464SJ(eZ0~s7=Jd9_HbiM92e_-ciL* zLGleHFk_QJLAbn=_VEq7h|Me#&dBPS+r@io{CPeFB0gvbz&%q5md&G_c`3&V{2C`D z=XGyQf?Oo+Z?P6Jl;%Emv&VuSRxcbVZSHt9+Qb`(Y?X5qdEcnBzzs^m*J!sL%D;F* zebR<|Igh&a;JvVaZbDujDyZ?ZUogrA2FTL7054a#t-fL&uWU@xs&-}#7m~&H^0{Mr zjo?BwwhoOGBKC+G*<7Xa^VG1ZabCS38wyA$b#6kC$`=-Ldin>EpzJ=o%YbvbbpGWO zZY|!&&~IU<$H(+>xTe4IF@El1>ttU`kqmSJRpL9$87}seo5p$8XOA#IU(DTA_7bxq zN-b;E7aEtg@c3n+=@jR@IG;hC)1~99<@8o}RJdg@(>}t#-TKgYlpjXKSnW+1)TQ#A zja2dsst21d-qnGO_ALlc=-(l3D)-4CVEELgLzG z$g`oHQVk^AJ&QJdTuDnGMeSD}{kl&JpT8c_+g@Kk&Ke?V)?NH~FWc;dLpO6_&WJcP0s;HzB=AA@ZRfi*V) zIC+~NI0slFjP3U{eFtIKz4_QLpoStlNkJA3VtzZM2p;|!(nKg}IC$LGS%vHK`^!*2 zKfnd~=_t53#mL3Y?YFbDbMo%%5fO*=&%@^^ii>!OfFZ%%g(SxpWuup}im(`Y$aB#9 zoH1ZHq@ksGr6bnGw^zuAQE;MHcu|5p)e>qbCC!40Fr=0lp-K*n&mbg?^3w^FryX(C zzo|pGDzs(KG>unjlH1IBQGeF#s-uKa$c;-K_5u1%DeH3rH{m5^k{7I5tnl_ z8(1?45h=6TYYHUr+5WEohp%^FvIUCLEYr4M+O}=mwr$&bY1_7K+s>D^ZFN@H^h{L6 zR7ae+_aEGI&)(l!A59m};1x5H1k^=^?6P?PJZ2QWJt~O>?>PQytxtJh@<-&qPZMEP z*M_v&dUY;F&Z_4*W-4x4aofmI_O>wh4Wy3w>R)i%{6yUuvUrpTXmc%j+Kag~5TS4- ztd`6Ea1ug-S{xsEwWJPMv>~;Xm$+7YeIyBUT`E~U;U!=~w1Wq@=H^eg$uj*e2sM%SgF1i(`^%^G9hd-<93x)ENI`-``C zM(gXoFHJ@tW}BKmFz+Lexs>8andKNs6F7Nq={ro)2GY2|Yn75$@NeXdIAG8}X2hwL z#%YAoY}R>3&4;1~xwW-ig*&r7#)-t=HFckPzfm5Zt@jt#lVOt|OEo<=c8rfgoNN)y z08fLFL9M}7)sK#wUcBdLcR5gx+8a08TFSm$I4uYg8DTd;Ca$cbma8sxnS4=wCZiYd z?sxBOlgs;C!d|Kg{@>0Rf$bU)y1#^k#Bps+5j}@gl{!KSG;Ar&2NI$dsT{@0RvBI1 zbDoyq0s^jznUvBB5HRpslgw?3ZsJWp8K1fsdY}>p9~;N=!`>C-dt@VOFgi0vI301y zj4ABE$`zMT@I_w`No@o6y_*_E|G3AbSq7sJJ>7jBi&)7P!5&pgWjQCY9zjmo&7qxL zK7;|BqDS(DOibGEmUV$ZD&obZnRLen58wDTkDt#87+XJ66k?A>@G4Mj`kWQ$Nz384evq5oVEtTXbKq0qD9ASaJYWRtBaam_{qu$K@AUnE0&Cq?v0X8hKF2TlzE6|Wj9wX5il*&+97Bmzj=Ab=70QiAvrM%4j6{ExEnFAm3 z=U?UTTmLz?(71(A8G1%2mZ>G-i>@p){gnnTk?)nSu}o#I+GU98I8;dcFu}BqRl%5= zqh|BPT^`% zk9ak2${9kJncil@pL|xU!mMX6ZFqF}J8Rxd%*~Nk^1Vf8S}vOI%n8@kKDYEeq)3{7 zd4r=X=CCr{_~;H%z6{#5^8WL`=~Gy|v4n7r5HjW;S%&C~ORvLlU9&SRt_d>9?$29i zOaJDTZ=55kvLEtq;A`3J0w~=$k#kDCbw9R6-EiK|N20!iTiG=4k3eT8p|eua+3D!) zCFumAfZlhy2N~w{bPu|^M#_)JEJdrw-!&F$C-+ICJCA3TmUbSSuzrC4>(1nkF0$DH z3;+Ng>wn&v{6CkzhqQ&0vx)8h!K^iG>^6UI{%gJd^1cj!jSKWz9s>HXccdzaU>i1bD0b=`qq&sF}*w+!Bv zZ`Y-sTbzl}r&ME*!|Kg>h||d-${R%lBdIzzVvK{GK7kdfuw%fTWwWEI44LdrJ>LKm z!^uh7sDo&>d~nLDxsTbVIlo%#VGiLYSm2>RmhelB2+=r0Au)3l-(q-)@En57$|+j| zu>p2oA&Csr8fG@9U3OyU@fkxP-FILCJao)|GS+XKe~jx^?2?t@I zRDDn*D|$g&c^0yi2IhrNm0N|>m4*be1EK9{Du(&o7y7tTUL8<-@>3kuBuB86u16^v z5Y)@^%g@mPfoquNYe<&X9I>naP-);aSFyTO*Aq(>uVr~6g;~8OgHlKdtCVwhmuTiZ z$^iF=$;>0h0uvJLjp5*+g*;B$dp>5Eu!hg05FSQ43+Ukyt%|U+U%>y~`;ZcQ-f-+L z45{!VWj5#YIRa3fkPE)@MEdSfd+`Dfw|G#sdVd2-z-O;`7AOYJX(1 z(Nd=JN(pHTua5DUpErr{U~A*}xAw+AC>Wwk$3}C59U$ z5?o0Si-@3XuEcNtrtylFOYgUBqcQs!1Tu=4V<;^g?tS8}(C0??P_wLi|HO4CZ(<>* z$>ps1o8vv;^{5El`;X+J`=R0*hJ^tw)OMe*P==hc62^lg-fq};VHzMZALG|n!44J7 zp4X7 z#nKDW7^l+J0G6M3$0a=P-giFC;|Xpiui)MFI~SJcxto90R=dA@nrH0kpT)e;CP{&a z2C3n0q??<&GIM@>*LeJMGLE)#c6zQ?VSZd&Lg<(2dsdkb_PQEv+=e}YS%5OXI@nIH zuU9;JYZ_9wbWq{{Bh+ztZFS>F8;A%JE-@U@Q>C5KTBzP^PiQvQ*wvc|>n zj^B={sBS?8)*0tjEq{59X@my)Sa6Eb2NtmdB~*LHoQ;ehoKTVXCf>@*@uJ;pi@z$u zNf%d+pNtATd_qpQVBSf)WHzX=*r_0GUX>1DB=eR)I2x+$!V8Rv1}(FXlF;8Q3(!el zPeKfn?(JZCezUvC?-Sx=Mt+t&Iyu8c%I%a(qk0!5Ne$8@g-($A-@NoSu`p`ZA68d{L64N*m6{&%KdjXQ?Dvf;vy=x+`{0O0GMB{-580 zs-RSlwshD3IVg0mCU0*$TQV4ndNpLaHDu>F_Y!O<9+NxEgEGjY$8>b(cB;Au|BXyB zRO$8?{(Y=M{7Q<+{>R6vvx}qcf4jB3?DjE->*=1%wt_vEKUihKD7RAR)U+M43w1 zW00=gpq2B-rU^|MDSSNeT{ajK2O<$eqUeSka(YoN^Tcd|b7tQSpZq0Tx`t!=I7t%x zkW)ld0M6S(Q&o_s^H>6@`c4iFDrKTUzS))OyeZiX z(;tsD1UV;I_$sK9xq~|9^uXTp9&s{bOceAwmTow~_Yuh(FXOaAkEQaxNO<>M+xg5f zAGb=P!gjDl)C zqA*NSGF0QbI>EyL&sG2!WJ7?t(Vu&Ju3(xlo8~P5fZ!Nse3VIm8w2hj-swo=mJV+l zz2jc#qxTR-Ot4e%6xO^1k15OpXI^|P>zbVdw|OoX(G&w%B+00d3XvqxlSdzGg@2NF2UZKwR-;L zBkeS?NIKGVOcp2fdX!;~sSu_Hgy`mbcQt ze0g4Klh{;In$C3Uhj+;|`ugIIcTTf{=A(Nv!-#g2g3M4DK1n*c6UEv3b%z^^-Oq<1 zC^GcxYxwI8exLxqc3?6Hgr$<^O}>l0 zx^|+>qg!2Dn8@SWtNc1sLPqs3!uaTeJ!LiAX1=DzfELJWVjL5d1G$Rl#@Xi;$B$z6 zG(O4!X)&-?QH^!Hy&0TTNUERt`}nzq>3#2h&^@6z*M`+^4iEe*=g*go+x@i5kLix~ z?+X>YkS8&7KOlO5JK~yVg7a$A_ttfd3xNl9((5bF$w!Id^QMtzKsWTRyF>&21l6V$ zQx&?@WUXfLOQ5z#^2DV>x~KdclRa-0l5_Wl>Y@T`UiD~2LTNWS!xlHMZwzYgA~NM!kRG8)ty!uxU8p+ zw`K7txDkOBwa{d@b)k2|z&Rjqb0zK5T8~Z<7#RPAI;a{m3F47y41^SA|92y=`Ab8kh$Gd% zzfM&avlN`V+5YuD)4h-Ⓢ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 z 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ⅈ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%0Awrz^-lhHus5VxSk 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 p3GaPLinP~Jn4NT&zWksY&+>g7Q%a~ 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

EUbXh;IkC{H(m-0XH(z=Z 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 T8 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Ó^I*lN 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

i&pMzijIAlRN6^AC){yIf~}p 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%0DQor1@6| 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 diff --git a/java-idea/src/EmitLog.java b/java-idea/src/EmitLog.java deleted file mode 120000 index 32bc0191..00000000 --- a/java-idea/src/EmitLog.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLog.java \ No newline at end of file diff --git a/java-idea/src/EmitLogDirect.java b/java-idea/src/EmitLogDirect.java deleted file mode 120000 index bc74d66c..00000000 --- a/java-idea/src/EmitLogDirect.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogDirect.java \ No newline at end of file diff --git a/java-idea/src/EmitLogHeader.java b/java-idea/src/EmitLogHeader.java deleted file mode 120000 index 0f9a266f..00000000 --- a/java-idea/src/EmitLogHeader.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogHeader.java \ No newline at end of file diff --git a/java-idea/src/EmitLogTopic.java b/java-idea/src/EmitLogTopic.java deleted file mode 120000 index 40c49659..00000000 --- a/java-idea/src/EmitLogTopic.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogTopic.java \ No newline at end of file diff --git a/java-idea/src/NewTask.java b/java-idea/src/NewTask.java deleted file mode 120000 index 8e189155..00000000 --- a/java-idea/src/NewTask.java +++ /dev/null @@ -1 +0,0 @@ -../../java/NewTask.java \ No newline at end of file diff --git a/java-idea/src/RPCClient.java b/java-idea/src/RPCClient.java deleted file mode 120000 index 4f1d2e4d..00000000 --- a/java-idea/src/RPCClient.java +++ /dev/null @@ -1 +0,0 @@ -../../java/RPCClient.java \ No newline at end of file diff --git a/java-idea/src/RPCServer.java b/java-idea/src/RPCServer.java deleted file mode 120000 index 5559abc4..00000000 --- a/java-idea/src/RPCServer.java +++ /dev/null @@ -1 +0,0 @@ -../../java/RPCServer.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogHeader.java b/java-idea/src/ReceiveLogHeader.java deleted file mode 120000 index fd5d5b34..00000000 --- a/java-idea/src/ReceiveLogHeader.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogs.java b/java-idea/src/ReceiveLogs.java deleted file mode 120000 index 7eaab189..00000000 --- a/java-idea/src/ReceiveLogs.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogs.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsDirect.java b/java-idea/src/ReceiveLogsDirect.java deleted file mode 120000 index 033cd067..00000000 --- a/java-idea/src/ReceiveLogsDirect.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogsDirect.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsTopic.java b/java-idea/src/ReceiveLogsTopic.java deleted file mode 120000 index 943ea267..00000000 --- a/java-idea/src/ReceiveLogsTopic.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogsTopic.java \ No newline at end of file diff --git a/java-idea/src/Recv.java b/java-idea/src/Recv.java deleted file mode 120000 index bd95286c..00000000 --- a/java-idea/src/Recv.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Recv.java \ No newline at end of file diff --git a/java-idea/src/Send.java b/java-idea/src/Send.java deleted file mode 120000 index 38371d99..00000000 --- a/java-idea/src/Send.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Send.java \ No newline at end of file diff --git a/java-idea/src/Worker.java b/java-idea/src/Worker.java deleted file mode 120000 index 35bbea07..00000000 --- a/java-idea/src/Worker.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Worker.java \ No newline at end of file diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0230ac94..fa456ce5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -22,5 +22,10 @@ amqp-client (5.5.0,) + + org.slf4j + slf4j-simple + 1.7.25 + diff --git a/java-mvn/src/main/java/RPCServer.java b/java-mvn/src/main/java/RPCServer.java deleted file mode 120000 index 40dd9654..00000000 --- a/java-mvn/src/main/java/RPCServer.java +++ /dev/null @@ -1 +0,0 @@ -../../../../java/RPCServer.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogHeader.java b/java-mvn/src/main/java/ReceiveLogHeader.java deleted file mode 120000 index 96653bbc..00000000 --- a/java-mvn/src/main/java/ReceiveLogHeader.java +++ /dev/null @@ -1 +0,0 @@ -../../../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java/.idea/.name b/java/.idea/.name deleted file mode 100644 index 85863977..00000000 --- a/java/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -java \ No newline at end of file diff --git a/java/.idea/compiler.xml b/java/.idea/compiler.xml deleted file mode 100644 index 96cc43ef..00000000 --- a/java/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/java/.idea/misc.xml b/java/.idea/misc.xml deleted file mode 100644 index de08bfa2..00000000 --- a/java/.idea/misc.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - 1.8 - - - - - - - - \ No newline at end of file diff --git a/java/.idea/modules.xml b/java/.idea/modules.xml deleted file mode 100644 index a127731f..00000000 --- a/java/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/java/.idea/vcs.xml b/java/.idea/vcs.xml deleted file mode 100644 index 6c0b8635..00000000 --- a/java/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/java/.idea/workspace.xml b/java/.idea/workspace.xml deleted file mode 100644 index 7883c086..00000000 --- a/java/.idea/workspace.xml +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/java/EmitLog.java b/java/EmitLog.java index 748355c6..26d57b3c 100644 --- a/java/EmitLog.java +++ b/java/EmitLog.java @@ -1,43 +1,25 @@ -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; public class EmitLog { - private static final String EXCHANGE_NAME = "logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); + private static final String EXCHANGE_NAME = "logs"; - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); - String message = getMessage(argv); + String message = argv.length < 1 ? "info: Hello World!" : + String.join(" ", argv); - channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - - channel.close(); - connection.close(); - } - - private static String getMessage(String[] strings){ - if (strings.length < 1) - return "info: Hello World!"; - return joinStrings(strings, " "); - } - - private static String joinStrings(String[] strings, String delimiter) { - int length = strings.length; - if (length == 0) return ""; - StringBuilder words = new StringBuilder(strings[0]); - for (int i = 1; i < length; i++) { - words.append(delimiter).append(strings[i]); + channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } } - return words.toString(); - } + } diff --git a/java/EmitLogDirect.java b/java/EmitLogDirect.java index 7edce177..91943910 100644 --- a/java/EmitLogDirect.java +++ b/java/EmitLogDirect.java @@ -1,52 +1,48 @@ import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; public class EmitLogDirect { - private static final String EXCHANGE_NAME = "direct_logs"; - - public static void main(String[] argv) throws Exception { + private static final String EXCHANGE_NAME = "direct_logs"; - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); + String severity = getSeverity(argv); + String message = getMessage(argv); - String severity = getSeverity(argv); - String message = getMessage(argv); - - channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + severity + "':'" + message + "'"); - - channel.close(); - connection.close(); - } + channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + severity + "':'" + message + "'"); + } + } - private static String getSeverity(String[] strings){ - if (strings.length < 1) - return "info"; - return strings[0]; - } + private static String getSeverity(String[] strings) { + if (strings.length < 1) + return "info"; + return strings[0]; + } - private static String getMessage(String[] strings){ - if (strings.length < 2) - return "Hello World!"; - return joinStrings(strings, " ", 1); - } + private static String getMessage(String[] strings) { + if (strings.length < 2) + return "Hello World!"; + return joinStrings(strings, " ", 1); + } - private static String joinStrings(String[] strings, String delimiter, int startIndex) { - int length = strings.length; - if (length == 0 ) return ""; - if (length < startIndex ) return ""; - StringBuilder words = new StringBuilder(strings[startIndex]); - for (int i = startIndex + 1; i < length; i++) { - words.append(delimiter).append(strings[i]); + private static String joinStrings(String[] strings, String delimiter, int startIndex) { + int length = strings.length; + if (length == 0) return ""; + if (length < startIndex) return ""; + StringBuilder words = new StringBuilder(strings[startIndex]); + for (int i = startIndex + 1; i < length; i++) { + words.append(delimiter).append(strings[i]); + } + return words.toString(); } - return words.toString(); - } } diff --git a/java/EmitLogHeader.java b/java/EmitLogHeader.java index ca181003..b96cfa3c 100644 --- a/java/EmitLogHeader.java +++ b/java/EmitLogHeader.java @@ -5,57 +5,57 @@ public class EmitLogHeader { - private static final String EXCHANGE_NAME = "header_test"; - - public static void main(String[] argv) throws Exception { - if (argv.length < 1) { - System.err.println("Usage: EmitLogHeader message queueName [headers]..."); - System.exit(1); + private static final String EXCHANGE_NAME = "header_test"; + + public static void main(String[] argv) throws Exception { + if (argv.length < 1) { + System.err.println("Usage: EmitLogHeader message queueName [headers]..."); + System.exit(1); + } + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can store information + // for the receiver here as the routing key is still available in the received message. + String routingKey = "ourTestRoutingKey"; + + // Argument processing: the first arg is the message, the rest are + // key value pairs for headers. + String message = argv[0]; + + // The map for the headers. + Map headers = new HashMap(); + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + for (int i = 1; i < argv.length; i++) { + System.out.println("Adding header " + argv[i] + " with value " + argv[i + 1] + " to Map"); + headers.put(argv[i], argv[i + 1]); + i++; + } + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); + + AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); + + // MessageProperties.PERSISTENT_TEXT_PLAIN is a static instance of AMQP.BasicProperties + // that contains a delivery mode and a priority. So we pass them to the builder. + builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.getDeliveryMode()); + builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.getPriority()); + + // Add the headers to the builder. + builder.headers(headers); + + // Use the builder to create the BasicProperties object. + AMQP.BasicProperties theProps = builder.build(); + + // Now we add the headers. This example only uses string headers, but they can also be integers + channel.basicPublish(EXCHANGE_NAME, routingKey, theProps, message.getBytes("UTF-8")); + System.out.println(" [x] Sent message: '" + message + "'"); + } } - - // The API requires a routing key, but in fact if you are using a header exchange the - // value of the routing key is not used in the routing. You can store information - // for the receiver here as the routing key is still available in the received message. - String routingKey = "ourTestRoutingKey"; - - // Argument processing: the first arg is the message, the rest are - // key value pairs for headers. - String message = argv[0]; - - // The map for the headers. - Map headers = new HashMap(); - - // The rest of the arguments are key value header pairs. For the purpose of this - // example, we are assuming they are all strings, but that is not required by RabbitMQ - for (int i = 1; i < argv.length; i++) { - System.out.println("Adding header " + argv[i] + " with value " + argv[i + 1] + " to Map"); - headers.put(argv[i], argv[i + 1]); - i++; - } - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); - - AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); - - // MessageProperties.PERSISTENT_TEXT_PLAIN is a static instance of AMQP.BasicProperties - // that contains a delivery mode and a priority. So we pass them to the builder. - builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.getDeliveryMode()); - builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.getPriority()); - - // Add the headers to the builder. - builder.headers(headers); - - // Use the builder to create the BasicProperties object. - AMQP.BasicProperties theProps = builder.build(); - - // Now we add the headers. This example only uses string headers, but they can also be integers - channel.basicPublish(EXCHANGE_NAME, routingKey, theProps, message.getBytes("UTF-8")); - System.out.println(" [x] Sent message: '" + message + "'"); - } } diff --git a/java/EmitLogTopic.java b/java/EmitLogTopic.java index 646652e3..62544ab6 100644 --- a/java/EmitLogTopic.java +++ b/java/EmitLogTopic.java @@ -1,65 +1,48 @@ -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; public class EmitLogTopic { - private static final String EXCHANGE_NAME = "topic_logs"; - - public static void main(String[] argv) { - Connection connection = null; - Channel channel = null; - try { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - - connection = factory.newConnection(); - channel = connection.createChannel(); + private static final String EXCHANGE_NAME = "topic_logs"; - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { - String routingKey = getRouting(argv); - String message = getMessage(argv); + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); - channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'"); + String routingKey = getRouting(argv); + String message = getMessage(argv); - } - catch (Exception e) { - e.printStackTrace(); - } - finally { - if (connection != null) { - try { - connection.close(); + channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'"); } - catch (Exception ignore) {} - } } - } - private static String getRouting(String[] strings){ - if (strings.length < 1) - return "anonymous.info"; - return strings[0]; - } + private static String getRouting(String[] strings) { + if (strings.length < 1) + return "anonymous.info"; + return strings[0]; + } - private static String getMessage(String[] strings){ - if (strings.length < 2) - return "Hello World!"; - return joinStrings(strings, " ", 1); - } + private static String getMessage(String[] strings) { + if (strings.length < 2) + return "Hello World!"; + return joinStrings(strings, " ", 1); + } - private static String joinStrings(String[] strings, String delimiter, int startIndex) { - int length = strings.length; - if (length == 0 ) return ""; - if (length < startIndex ) return ""; - StringBuilder words = new StringBuilder(strings[startIndex]); - for (int i = startIndex + 1; i < length; i++) { - words.append(delimiter).append(strings[i]); + private static String joinStrings(String[] strings, String delimiter, int startIndex) { + int length = strings.length; + if (length == 0) return ""; + if (length < startIndex) return ""; + StringBuilder words = new StringBuilder(strings[startIndex]); + for (int i = startIndex + 1; i < length; i++) { + words.append(delimiter).append(strings[i]); + } + return words.toString(); } - return words.toString(); - } } diff --git a/java/NewTask.java b/java/NewTask.java index 7e5f68be..0efbeab6 100644 --- a/java/NewTask.java +++ b/java/NewTask.java @@ -5,40 +5,22 @@ public class NewTask { - private static final String TASK_QUEUE_NAME = "task_queue"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); - - String message = getMessage(argv); - - channel.basicPublish("", TASK_QUEUE_NAME, - MessageProperties.PERSISTENT_TEXT_PLAIN, - message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - - channel.close(); - connection.close(); - } - - private static String getMessage(String[] strings) { - if (strings.length < 1) - return "Hello World!"; - return joinStrings(strings, " "); - } - - private static String joinStrings(String[] strings, String delimiter) { - int length = strings.length; - if (length == 0) return ""; - StringBuilder words = new StringBuilder(strings[0]); - for (int i = 1; i < length; i++) { - words.append(delimiter).append(strings[i]); + private static final String TASK_QUEUE_NAME = "task_queue"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); + + String message = String.join(" ", argv); + + channel.basicPublish("", TASK_QUEUE_NAME, + MessageProperties.PERSISTENT_TEXT_PLAIN, + message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } } - return words.toString(); - } + } diff --git a/java/RPCClient.java b/java/RPCClient.java index e7d2802c..623ca429 100644 --- a/java/RPCClient.java +++ b/java/RPCClient.java @@ -1,9 +1,7 @@ -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.AMQP; -import com.rabbitmq.client.Envelope; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; import java.util.UUID; @@ -11,76 +9,61 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeoutException; -public class RPCClient { - - private Connection connection; - private Channel channel; - private String requestQueueName = "rpc_queue"; - - public RPCClient() throws IOException, TimeoutException { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); +public class RPCClient implements AutoCloseable { - connection = factory.newConnection(); - channel = connection.createChannel(); - } + private Connection connection; + private Channel channel; + private String requestQueueName = "rpc_queue"; - public String call(String message) throws IOException, InterruptedException { - final String corrId = UUID.randomUUID().toString(); + public RPCClient() throws IOException, TimeoutException { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); - String replyQueueName = channel.queueDeclare().getQueue(); - AMQP.BasicProperties props = new AMQP.BasicProperties - .Builder() - .correlationId(corrId) - .replyTo(replyQueueName) - .build(); + connection = factory.newConnection(); + channel = connection.createChannel(); + } - channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")); + public static void main(String[] argv) { + try (RPCClient fibonacciRpc = new RPCClient()) { + for (int i = 0; i < 32; i++) { + String i_str = Integer.toString(i); + System.out.println(" [x] Requesting fib(" + i_str + ")"); + String response = fibonacciRpc.call(i_str); + System.out.println(" [.] Got '" + response + "'"); + } + } catch (IOException | TimeoutException | InterruptedException e) { + e.printStackTrace(); + } + } - final BlockingQueue response = new ArrayBlockingQueue(1); + public String call(String message) throws IOException, InterruptedException { + final String corrId = UUID.randomUUID().toString(); - String ctag = channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - if (properties.getCorrelationId().equals(corrId)) { - response.offer(new String(body, "UTF-8")); - } - } - }); + String replyQueueName = channel.queueDeclare().getQueue(); + AMQP.BasicProperties props = new AMQP.BasicProperties + .Builder() + .correlationId(corrId) + .replyTo(replyQueueName) + .build(); - String result = response.take(); - channel.basicCancel(ctag); - return result; - } + channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")); - public void close() throws IOException { - connection.close(); - } + final BlockingQueue response = new ArrayBlockingQueue<>(1); - public static void main(String[] argv) { - RPCClient fibonacciRpc = null; - String response = null; - try { - fibonacciRpc = new RPCClient(); + String ctag = channel.basicConsume(replyQueueName, true, (consumerTag, delivery) -> { + if (delivery.getProperties().getCorrelationId().equals(corrId)) { + response.offer(new String(delivery.getBody(), "UTF-8")); + } + }, consumerTag -> { + }); - for (int i = 0; i < 32; i++) { - String i_str = Integer.toString(i); - System.out.println(" [x] Requesting fib(" + i_str + ")"); - response = fibonacciRpc.call(i_str); - System.out.println(" [.] Got '" + response + "'"); - } + String result = response.take(); + channel.basicCancel(ctag); + return result; } - catch (IOException | TimeoutException | InterruptedException e) { - e.printStackTrace(); - } - finally { - if (fibonacciRpc!= null) { - try { - fibonacciRpc.close(); - } - catch (IOException _ignore) {} - } + + public void close() throws IOException { + connection.close(); } - } } diff --git a/java/RPCServer.java b/java/RPCServer.java index 0575e601..26591c33 100644 --- a/java/RPCServer.java +++ b/java/RPCServer.java @@ -1,90 +1,66 @@ -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Consumer; -import com.rabbitmq.client.DefaultConsumer; -import com.rabbitmq.client.AMQP; -import com.rabbitmq.client.Envelope; - -import java.io.IOException; -import java.util.concurrent.TimeoutException; +import com.rabbitmq.client.*; public class RPCServer { - private static final String RPC_QUEUE_NAME = "rpc_queue"; + private static final String RPC_QUEUE_NAME = "rpc_queue"; - private static int fib(int n) { - if (n ==0) return 0; - if (n == 1) return 1; - return fib(n-1) + fib(n-2); - } + private static int fib(int n) { + if (n == 0) return 0; + if (n == 1) return 1; + return fib(n - 1) + fib(n - 2); + } - public static void main(String[] argv) { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); - Connection connection = null; - try { - connection = factory.newConnection(); - final Channel channel = connection.createChannel(); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); + channel.queuePurge(RPC_QUEUE_NAME); - channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); - channel.queuePurge(RPC_QUEUE_NAME); + channel.basicQos(1); - channel.basicQos(1); + System.out.println(" [x] Awaiting RPC requests"); - System.out.println(" [x] Awaiting RPC requests"); + Object monitor = new Object(); + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + AMQP.BasicProperties replyProps = new AMQP.BasicProperties + .Builder() + .correlationId(delivery.getProperties().getCorrelationId()) + .build(); - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - AMQP.BasicProperties replyProps = new AMQP.BasicProperties - .Builder() - .correlationId(properties.getCorrelationId()) - .build(); + String response = ""; - String response = ""; + try { + String message = new String(delivery.getBody(), "UTF-8"); + int n = Integer.parseInt(message); - try { - String message = new String(body,"UTF-8"); - int n = Integer.parseInt(message); + System.out.println(" [.] fib(" + message + ")"); + response += fib(n); + } catch (RuntimeException e) { + System.out.println(" [.] " + e.toString()); + } finally { + channel.basicPublish("", delivery.getProperties().getReplyTo(), replyProps, response.getBytes("UTF-8")); + channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); + // RabbitMq consumer worker thread notifies the RPC server owner thread + synchronized (monitor) { + monitor.notify(); + } + } + }; - System.out.println(" [.] fib(" + message + ")"); - response += fib(n); - } - catch (RuntimeException e){ - System.out.println(" [.] " + e.toString()); - } - finally { - channel.basicPublish( "", properties.getReplyTo(), replyProps, response.getBytes("UTF-8")); - channel.basicAck(envelope.getDeliveryTag(), false); - // RabbitMq consumer worker thread notifies the RPC server owner thread - synchronized(this) { - this.notify(); + channel.basicConsume(RPC_QUEUE_NAME, false, deliverCallback, (consumerTag -> { })); + // Wait and be prepared to consume the message from RPC client. + while (true) { + synchronized (monitor) { + try { + monitor.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } - } } - }; - - channel.basicConsume(RPC_QUEUE_NAME, false, consumer); - // Wait and be prepared to consume the message from RPC client. - while (true) { - synchronized(consumer) { - try { - consumer.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } catch (IOException | TimeoutException e) { - e.printStackTrace(); - } - finally { - if (connection != null) - try { - connection.close(); - } catch (IOException _ignore) {} } - } } \ No newline at end of file diff --git a/java/ReceiveLogHeader.java b/java/ReceiveLogHeader.java index b6a4eda5..96c9d17a 100644 --- a/java/ReceiveLogHeader.java +++ b/java/ReceiveLogHeader.java @@ -1,62 +1,57 @@ import com.rabbitmq.client.*; -import java.io.IOException; import java.util.HashMap; import java.util.Map; public class ReceiveLogHeader { - private static final String EXCHANGE_NAME = "header_test"; - - public static void main(String[] argv) throws Exception { - if (argv.length < 1) { - System.err.println("Usage: ReceiveLogsHeader queueName [headers]..."); - System.exit(1); - } - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); - - // The API requires a routing key, but in fact if you are using a header exchange the - // value of the routing key is not used in the routing. You can receive information - // from the sender here as the routing key is still available in the received message. - String routingKeyFromUser = "ourTestRoutingKey"; - - // Argument processing: the first arg is the local queue name, the rest are - // key value pairs for headers. - String queueInputName = argv[0]; - - // The map for the headers. - Map headers = new HashMap(); - - // The rest of the arguments are key value header pairs. For the purpose of this - // example, we are assuming they are all strings, but that is not required by RabbitMQ - // Note that when you run this code you should include the x-match header on the command - // line. Example: - // java -cp $CP ReceiveLogsHeader testQueue1 x-match any header1 value1 - for (int i = 1; i < argv.length; i++) { - headers.put(argv[i], argv[i + 1]); - System.out.println("Binding header " + argv[i] + " and value " + argv[i + 1] + " to queue " + queueInputName); - i++; + private static final String EXCHANGE_NAME = "header_test"; + + public static void main(String[] argv) throws Exception { + if (argv.length < 1) { + System.err.println("Usage: ReceiveLogsHeader queueName [headers]..."); + System.exit(1); + } + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); + + // The API requires a routing key, but in fact if you are using a header exchange the + // value of the routing key is not used in the routing. You can receive information + // from the sender here as the routing key is still available in the received message. + String routingKeyFromUser = "ourTestRoutingKey"; + + // Argument processing: the first arg is the local queue name, the rest are + // key value pairs for headers. + String queueInputName = argv[0]; + + // The map for the headers. + Map headers = new HashMap<>(); + + // The rest of the arguments are key value header pairs. For the purpose of this + // example, we are assuming they are all strings, but that is not required by RabbitMQ + // Note that when you run this code you should include the x-match header on the command + // line. Example: + // java -cp $CP ReceiveLogsHeader testQueue1 x-match any header1 value1 + for (int i = 1; i < argv.length; i++) { + headers.put(argv[i], argv[i + 1]); + System.out.println("Binding header " + argv[i] + " and value " + argv[i + 1] + " to queue " + queueInputName); + i++; + } + + String queueName = channel.queueDeclare(queueInputName, true, false, false, null).getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, routingKeyFromUser, headers); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + delivery.getEnvelope().getRoutingKey() + "':'" + message + "'"); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { }); } - - String queueName = channel.queueDeclare(queueInputName, true, false, false, null).getQueue(); - channel.queueBind(queueName, EXCHANGE_NAME, routingKeyFromUser, headers); - - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } } diff --git a/java/ReceiveLogs.java b/java/ReceiveLogs.java index fd807a6b..14515479 100644 --- a/java/ReceiveLogs.java +++ b/java/ReceiveLogs.java @@ -1,31 +1,28 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; public class ReceiveLogs { - private static final String EXCHANGE_NAME = "logs"; + private static final String EXCHANGE_NAME = "logs"; - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); - String queueName = channel.queueDeclare().getQueue(); - channel.queueBind(queueName, EXCHANGE_NAME, ""); + channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + String queueName = channel.queueDeclare().getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, ""); - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + message + "'"); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { }); + } } diff --git a/java/ReceiveLogsDirect.java b/java/ReceiveLogsDirect.java index 0a13f8d1..b505165f 100644 --- a/java/ReceiveLogsDirect.java +++ b/java/ReceiveLogsDirect.java @@ -1,39 +1,34 @@ import com.rabbitmq.client.*; -import java.io.IOException; - public class ReceiveLogsDirect { - private static final String EXCHANGE_NAME = "direct_logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); - String queueName = channel.queueDeclare().getQueue(); - - if (argv.length < 1){ - System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]"); - System.exit(1); - } - - for(String severity : argv){ - channel.queueBind(queueName, EXCHANGE_NAME, severity); + private static final String EXCHANGE_NAME = "direct_logs"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); + String queueName = channel.queueDeclare().getQueue(); + + if (argv.length < 1) { + System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]"); + System.exit(1); + } + + for (String severity : argv) { + channel.queueBind(queueName, EXCHANGE_NAME, severity); + } + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + delivery.getEnvelope().getRoutingKey() + "':'" + message + "'"); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { + }); } - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } } diff --git a/java/ReceiveLogsTopic.java b/java/ReceiveLogsTopic.java index f100d34f..6edaed30 100644 --- a/java/ReceiveLogsTopic.java +++ b/java/ReceiveLogsTopic.java @@ -1,40 +1,37 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; public class ReceiveLogsTopic { - private static final String EXCHANGE_NAME = "topic_logs"; + private static final String EXCHANGE_NAME = "topic_logs"; - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); - String queueName = channel.queueDeclare().getQueue(); + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + String queueName = channel.queueDeclare().getQueue(); - if (argv.length < 1) { - System.err.println("Usage: ReceiveLogsTopic [binding_key]..."); - System.exit(1); - } + if (argv.length < 1) { + System.err.println("Usage: ReceiveLogsTopic [binding_key]..."); + System.exit(1); + } - for (String bindingKey : argv) { - channel.queueBind(queueName, EXCHANGE_NAME, bindingKey); - } + for (String bindingKey : argv) { + channel.queueBind(queueName, EXCHANGE_NAME, bindingKey); + } - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + delivery.getEnvelope().getRoutingKey() + "':'" + message + "'"); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { }); + } } diff --git a/java/Recv.java b/java/Recv.java index 355397c5..509823be 100644 --- a/java/Recv.java +++ b/java/Recv.java @@ -1,28 +1,25 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; public class Recv { - private final static String QUEUE_NAME = "hello"; + private final static String QUEUE_NAME = "hello"; - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); - channel.queueDeclare(QUEUE_NAME, false, false, false, null); - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + channel.queueDeclare(QUEUE_NAME, false, false, false, null); + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) - throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + message + "'"); - } - }; - channel.basicConsume(QUEUE_NAME, true, consumer); - } + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + message + "'"); + }; + channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); + } } diff --git a/java/Send.java b/java/Send.java index 111f78a3..f0e67199 100644 --- a/java/Send.java +++ b/java/Send.java @@ -4,20 +4,17 @@ public class Send { - private final static String QUEUE_NAME = "hello"; + private final static String QUEUE_NAME = "hello"; - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.queueDeclare(QUEUE_NAME, false, false, false, null); - String message = "Hello World!"; - channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - - channel.close(); - connection.close(); - } + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + try (Connection connection = factory.newConnection(); + Channel channel = connection.createChannel()) { + channel.queueDeclare(QUEUE_NAME, false, false, false, null); + String message = "Hello World!"; + channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); + } + } } diff --git a/java/Worker.java b/java/Worker.java index ca679d93..bbf5525f 100644 --- a/java/Worker.java +++ b/java/Worker.java @@ -1,49 +1,47 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; public class Worker { - private static final String TASK_QUEUE_NAME = "task_queue"; + private static final String TASK_QUEUE_NAME = "task_queue"; - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - final Connection connection = factory.newConnection(); - final Channel channel = connection.createChannel(); + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + final Connection connection = factory.newConnection(); + final Channel channel = connection.createChannel(); - channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - channel.basicQos(1); + channel.basicQos(1); - final Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); - System.out.println(" [x] Received '" + message + "'"); - try { - doWork(message); - } finally { - System.out.println(" [x] Done"); - channel.basicAck(envelope.getDeliveryTag(), false); - } - } - }; - channel.basicConsume(TASK_QUEUE_NAME, false, consumer); - } - - private static void doWork(String task) { - for (char ch : task.toCharArray()) { - if (ch == '.') { - try { - Thread.sleep(1000); - } catch (InterruptedException _ignored) { - Thread.currentThread().interrupt(); + System.out.println(" [x] Received '" + message + "'"); + try { + doWork(message); + } finally { + System.out.println(" [x] Done"); + channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); + } + }; + channel.basicConsume(TASK_QUEUE_NAME, false, deliverCallback, consumerTag -> { }); + } + + private static void doWork(String task) { + for (char ch : task.toCharArray()) { + if (ch == '.') { + try { + Thread.sleep(1000); + } catch (InterruptedException _ignored) { + Thread.currentThread().interrupt(); + } + } } - } } - } } diff --git a/java/recompile.sh b/java/recompile.sh index 504548fa..3e117ab9 100755 --- a/java/recompile.sh +++ b/java/recompile.sh @@ -1,3 +1,3 @@ #!/bin/sh -javac -cp .:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar *.java +javac -cp .:amqp-client-5.5.1.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar *.java diff --git a/java8-maven/pom.xml b/java8-maven/pom.xml deleted file mode 100644 index 6cbdcd97..00000000 --- a/java8-maven/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - - com.rabbitmq - rabbitmq-tutorial - 1.0-SNAPSHOT - jar - - rabbitmq-tutorial - https://github.com/rabbitmq/rabbitmq-tutorials - - - UTF-8 - 1.8 - 1.8 - - - - - com.rabbitmq - amqp-client - LATEST - - - diff --git a/java8-maven/src/main/java/EmitLog.java b/java8-maven/src/main/java/EmitLog.java deleted file mode 100644 index 301d6918..00000000 --- a/java8-maven/src/main/java/EmitLog.java +++ /dev/null @@ -1,35 +0,0 @@ -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; - -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class EmitLog { - - private static final String EXCHANGE_NAME = "logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); - - String message = getMessage(argv); - - channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - } - } - - private static String getMessage(String[] strings) { - if (strings.length < 1) - return "info: Hello World!"; - return String.join(" ", strings); - } - -} - diff --git a/java8-maven/src/main/java/EmitLogDirect.java b/java8-maven/src/main/java/EmitLogDirect.java deleted file mode 100644 index cb3418a4..00000000 --- a/java8-maven/src/main/java/EmitLogDirect.java +++ /dev/null @@ -1,44 +0,0 @@ -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; - -import java.util.Arrays; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class EmitLogDirect { - - private static final String EXCHANGE_NAME = "direct_logs"; - - public static void main(String[] argv) throws Exception { - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); - - String severity = getSeverity(argv); - String message = getMessage(argv); - - channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + severity + "':'" + message + "'"); - } - } - - private static String getSeverity(String[] strings) { - if (strings.length < 1) - return "info"; - return strings[0]; - } - - private static String getMessage(String[] strings) { - if (strings.length < 2) - return "Hello World!"; - return String.join(" ",Arrays.copyOfRange(strings, 1, strings.length)); - } - -} - diff --git a/java8-maven/src/main/java/EmitLogHeader.java b/java8-maven/src/main/java/EmitLogHeader.java deleted file mode 100644 index ca181003..00000000 --- a/java8-maven/src/main/java/EmitLogHeader.java +++ /dev/null @@ -1,61 +0,0 @@ -import com.rabbitmq.client.*; - -import java.util.HashMap; -import java.util.Map; - -public class EmitLogHeader { - - private static final String EXCHANGE_NAME = "header_test"; - - public static void main(String[] argv) throws Exception { - if (argv.length < 1) { - System.err.println("Usage: EmitLogHeader message queueName [headers]..."); - System.exit(1); - } - - // The API requires a routing key, but in fact if you are using a header exchange the - // value of the routing key is not used in the routing. You can store information - // for the receiver here as the routing key is still available in the received message. - String routingKey = "ourTestRoutingKey"; - - // Argument processing: the first arg is the message, the rest are - // key value pairs for headers. - String message = argv[0]; - - // The map for the headers. - Map headers = new HashMap(); - - // The rest of the arguments are key value header pairs. For the purpose of this - // example, we are assuming they are all strings, but that is not required by RabbitMQ - for (int i = 1; i < argv.length; i++) { - System.out.println("Adding header " + argv[i] + " with value " + argv[i + 1] + " to Map"); - headers.put(argv[i], argv[i + 1]); - i++; - } - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); - - AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); - - // MessageProperties.PERSISTENT_TEXT_PLAIN is a static instance of AMQP.BasicProperties - // that contains a delivery mode and a priority. So we pass them to the builder. - builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.getDeliveryMode()); - builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.getPriority()); - - // Add the headers to the builder. - builder.headers(headers); - - // Use the builder to create the BasicProperties object. - AMQP.BasicProperties theProps = builder.build(); - - // Now we add the headers. This example only uses string headers, but they can also be integers - channel.basicPublish(EXCHANGE_NAME, routingKey, theProps, message.getBytes("UTF-8")); - System.out.println(" [x] Sent message: '" + message + "'"); - } -} - diff --git a/java8-maven/src/main/java/EmitLogTopic.java b/java8-maven/src/main/java/EmitLogTopic.java deleted file mode 100644 index cf5f2697..00000000 --- a/java8-maven/src/main/java/EmitLogTopic.java +++ /dev/null @@ -1,47 +0,0 @@ -import com.rabbitmq.client.BuiltinExchangeType; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; - -import java.util.Arrays; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class EmitLogTopic { - - private static final String EXCHANGE_NAME = "topic_logs"; - - public static void main(String[] argv) { - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); - - String routingKey = getRouting(argv); - String message = getMessage(argv); - - channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'"); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - private static String getRouting(String[] strings) { - if (strings.length < 1) - return "anonymous.info"; - return strings[0]; - } - - private static String getMessage(String[] strings) { - if (strings.length < 2) - return "Hello World!"; - return String.join(" ", Arrays.copyOfRange(strings, 1, strings.length)); - } -} - diff --git a/java8-maven/src/main/java/NewTask.java b/java8-maven/src/main/java/NewTask.java deleted file mode 100644 index 868067ea..00000000 --- a/java8-maven/src/main/java/NewTask.java +++ /dev/null @@ -1,36 +0,0 @@ -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.MessageProperties; - -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class NewTask { - - private static final String TASK_QUEUE_NAME = "task_queue"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); - - String message = getMessage(argv); - - channel.basicPublish("", TASK_QUEUE_NAME, - MessageProperties.PERSISTENT_TEXT_PLAIN, - message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - } - } - - private static String getMessage(String[] strings) { - if (strings.length < 1) - return "Hello World!"; - return String.join(" ", strings); - } - -} diff --git a/java8-maven/src/main/java/RPCClient.java b/java8-maven/src/main/java/RPCClient.java deleted file mode 100644 index 1eafea05..00000000 --- a/java8-maven/src/main/java/RPCClient.java +++ /dev/null @@ -1,72 +0,0 @@ -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.DefaultConsumer; -import com.rabbitmq.client.AMQP; -import com.rabbitmq.client.Envelope; - -import java.io.IOException; -import java.util.UUID; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.TimeoutException; - -public class RPCClient implements AutoCloseable { - - private Connection connection; - private Channel channel; - private String requestQueueName = "rpc_queue"; - private String replyQueueName; - - public RPCClient() throws IOException, TimeoutException { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - - connection = factory.newConnection(); - channel = connection.createChannel(); - - replyQueueName = channel.queueDeclare().getQueue(); - } - - public String call(String message) throws IOException, InterruptedException { - final String corrId = UUID.randomUUID().toString(); - - AMQP.BasicProperties props = new AMQP.BasicProperties - .Builder() - .correlationId(corrId) - .replyTo(replyQueueName) - .build(); - - channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")); - - final BlockingQueue response = new ArrayBlockingQueue(1); - - channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - if (properties.getCorrelationId().equals(corrId)) { - response.offer(new String(body, "UTF-8")); - } - } - }); - - return response.take(); - } - - public void close() throws IOException { - connection.close(); - } - - public static void main(String[] argv) { - try (RPCClient fibonacciRpc = new RPCClient()) { - System.out.println(" [x] Requesting fib(30)"); - - final String response = fibonacciRpc.call("30"); - System.out.println(" [.] Got '" + response + "'"); - - } catch (IOException | TimeoutException | InterruptedException e) { - e.printStackTrace(); - } - } -} - diff --git a/java8-maven/src/main/java/RPCServer.java b/java8-maven/src/main/java/RPCServer.java deleted file mode 100644 index a9a76bd1..00000000 --- a/java8-maven/src/main/java/RPCServer.java +++ /dev/null @@ -1,80 +0,0 @@ -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Consumer; -import com.rabbitmq.client.DefaultConsumer; -import com.rabbitmq.client.AMQP; -import com.rabbitmq.client.Envelope; - -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -public class RPCServer { - - private static final String RPC_QUEUE_NAME = "rpc_queue"; - - private static int fib(int n) { - if (n == 0) return 0; - if (n == 1) return 1; - return fib(n - 1) + fib(n - 2); - } - - public static void main(String[] argv) { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - - - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); - - channel.basicQos(1); - - System.out.println(" [x] Awaiting RPC requests"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - AMQP.BasicProperties replyProps = new AMQP.BasicProperties - .Builder() - .correlationId(properties.getCorrelationId()) - .build(); - - String response = ""; - - try { - String message = new String(body, "UTF-8"); - int n = Integer.parseInt(message); - - System.out.println(" [.] fib(" + message + ")"); - response += fib(n); - } catch (RuntimeException e) { - System.out.println(" [.] " + e.toString()); - } finally { - channel.basicPublish("", properties.getReplyTo(), replyProps, response.getBytes("UTF-8")); - channel.basicAck(envelope.getDeliveryTag(), false); - // RabbitMq consumer worker thread notifies the RPC server owner thread - synchronized (this) { - this.notify(); - } - } - } - }; - - channel.basicConsume(RPC_QUEUE_NAME, false, consumer); - // Wait and be prepared to consume the message from RPC client. - while (true) { - synchronized (consumer) { - try { - consumer.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } catch (IOException | TimeoutException e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/java8-maven/src/main/java/ReceiveLogHeader.java b/java8-maven/src/main/java/ReceiveLogHeader.java deleted file mode 100644 index b6a4eda5..00000000 --- a/java8-maven/src/main/java/ReceiveLogHeader.java +++ /dev/null @@ -1,62 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class ReceiveLogHeader { - private static final String EXCHANGE_NAME = "header_test"; - - public static void main(String[] argv) throws Exception { - if (argv.length < 1) { - System.err.println("Usage: ReceiveLogsHeader queueName [headers]..."); - System.exit(1); - } - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.HEADERS); - - // The API requires a routing key, but in fact if you are using a header exchange the - // value of the routing key is not used in the routing. You can receive information - // from the sender here as the routing key is still available in the received message. - String routingKeyFromUser = "ourTestRoutingKey"; - - // Argument processing: the first arg is the local queue name, the rest are - // key value pairs for headers. - String queueInputName = argv[0]; - - // The map for the headers. - Map headers = new HashMap(); - - // The rest of the arguments are key value header pairs. For the purpose of this - // example, we are assuming they are all strings, but that is not required by RabbitMQ - // Note that when you run this code you should include the x-match header on the command - // line. Example: - // java -cp $CP ReceiveLogsHeader testQueue1 x-match any header1 value1 - for (int i = 1; i < argv.length; i++) { - headers.put(argv[i], argv[i + 1]); - System.out.println("Binding header " + argv[i] + " and value " + argv[i + 1] + " to queue " + queueInputName); - i++; - } - - String queueName = channel.queueDeclare(queueInputName, true, false, false, null).getQueue(); - channel.queueBind(queueName, EXCHANGE_NAME, routingKeyFromUser, headers); - - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } -} - diff --git a/java8-maven/src/main/java/ReceiveLogs.java b/java8-maven/src/main/java/ReceiveLogs.java deleted file mode 100644 index fd807a6b..00000000 --- a/java8-maven/src/main/java/ReceiveLogs.java +++ /dev/null @@ -1,31 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; - -public class ReceiveLogs { - private static final String EXCHANGE_NAME = "logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); - String queueName = channel.queueDeclare().getQueue(); - channel.queueBind(queueName, EXCHANGE_NAME, ""); - - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } -} - diff --git a/java8-maven/src/main/java/ReceiveLogsDirect.java b/java8-maven/src/main/java/ReceiveLogsDirect.java deleted file mode 100644 index 0a13f8d1..00000000 --- a/java8-maven/src/main/java/ReceiveLogsDirect.java +++ /dev/null @@ -1,39 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; - -public class ReceiveLogsDirect { - - private static final String EXCHANGE_NAME = "direct_logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); - String queueName = channel.queueDeclare().getQueue(); - - if (argv.length < 1){ - System.err.println("Usage: ReceiveLogsDirect [info] [warning] [error]"); - System.exit(1); - } - - for(String severity : argv){ - channel.queueBind(queueName, EXCHANGE_NAME, severity); - } - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } -} - diff --git a/java8-maven/src/main/java/ReceiveLogsTopic.java b/java8-maven/src/main/java/ReceiveLogsTopic.java deleted file mode 100644 index f100d34f..00000000 --- a/java8-maven/src/main/java/ReceiveLogsTopic.java +++ /dev/null @@ -1,40 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; - -public class ReceiveLogsTopic { - - private static final String EXCHANGE_NAME = "topic_logs"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); - String queueName = channel.queueDeclare().getQueue(); - - if (argv.length < 1) { - System.err.println("Usage: ReceiveLogsTopic [binding_key]..."); - System.exit(1); - } - - for (String bindingKey : argv) { - channel.queueBind(queueName, EXCHANGE_NAME, bindingKey); - } - - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, - AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'"); - } - }; - channel.basicConsume(queueName, true, consumer); - } -} - diff --git a/java8-maven/src/main/java/Recv.java b/java8-maven/src/main/java/Recv.java deleted file mode 100644 index 355397c5..00000000 --- a/java8-maven/src/main/java/Recv.java +++ /dev/null @@ -1,28 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; - -public class Recv { - - private final static String QUEUE_NAME = "hello"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - Connection connection = factory.newConnection(); - Channel channel = connection.createChannel(); - - channel.queueDeclare(QUEUE_NAME, false, false, false, null); - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) - throws IOException { - String message = new String(body, "UTF-8"); - System.out.println(" [x] Received '" + message + "'"); - } - }; - channel.basicConsume(QUEUE_NAME, true, consumer); - } -} diff --git a/java8-maven/src/main/java/Send.java b/java8-maven/src/main/java/Send.java deleted file mode 100644 index e0d470c5..00000000 --- a/java8-maven/src/main/java/Send.java +++ /dev/null @@ -1,21 +0,0 @@ -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; - -public class Send { - - private final static String QUEUE_NAME = "hello"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - - channel.queueDeclare(QUEUE_NAME, false, false, false, null); - String message = "Hello World!"; - channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); - } - } -} diff --git a/java8-maven/src/main/java/Worker.java b/java8-maven/src/main/java/Worker.java deleted file mode 100644 index ca679d93..00000000 --- a/java8-maven/src/main/java/Worker.java +++ /dev/null @@ -1,49 +0,0 @@ -import com.rabbitmq.client.*; - -import java.io.IOException; - -public class Worker { - - private static final String TASK_QUEUE_NAME = "task_queue"; - - public static void main(String[] argv) throws Exception { - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost("localhost"); - final Connection connection = factory.newConnection(); - final Channel channel = connection.createChannel(); - - channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null); - System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); - - channel.basicQos(1); - - final Consumer consumer = new DefaultConsumer(channel) { - @Override - public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { - String message = new String(body, "UTF-8"); - - System.out.println(" [x] Received '" + message + "'"); - try { - doWork(message); - } finally { - System.out.println(" [x] Done"); - channel.basicAck(envelope.getDeliveryTag(), false); - } - } - }; - channel.basicConsume(TASK_QUEUE_NAME, false, consumer); - } - - private static void doWork(String task) { - for (char ch : task.toCharArray()) { - if (ch == '.') { - try { - Thread.sleep(1000); - } catch (InterruptedException _ignored) { - Thread.currentThread().interrupt(); - } - } - } - } -} - From 61bdb175a619766d58643d18bbf3b0b9ce28316a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 4 Dec 2018 16:31:20 +0100 Subject: [PATCH 099/659] Upgrade Scala tutorials Scala, Maven plugins, Maven Wrapper. --- .../.mvn/wrapper/MavenWrapperDownloader.java | 110 +++++++ scala/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes scala/.mvn/wrapper/maven-wrapper.properties | 1 + scala/README.md | 41 ++- scala/mvnw | 286 ++++++++++++++++++ scala/mvnw.cmd | 161 ++++++++++ scala/pom.xml | 149 ++++----- scala/src/main/scala/EmitLog.scala | 16 +- scala/src/main/scala/EmitLogHeader.scala | 2 + scala/src/main/scala/EmitLogTopic.scala | 36 +-- scala/src/main/scala/NewTask.scala | 17 +- scala/src/main/scala/RPCClient.scala | 16 +- scala/src/main/scala/RPCServer.scala | 43 +-- scala/src/main/scala/ReceiveLogHeader.scala | 16 +- scala/src/main/scala/ReceiveLogs.scala | 14 +- scala/src/main/scala/ReceiveLogsDirect.scala | 16 +- scala/src/main/scala/ReceiveLogsTopic.scala | 16 +- scala/src/main/scala/Recv.scala | 14 +- scala/src/main/scala/Worker.scala | 24 +- 19 files changed, 730 insertions(+), 248 deletions(-) create mode 100755 scala/.mvn/wrapper/MavenWrapperDownloader.java create mode 100755 scala/.mvn/wrapper/maven-wrapper.jar create mode 100755 scala/.mvn/wrapper/maven-wrapper.properties create mode 100755 scala/mvnw create mode 100755 scala/mvnw.cmd diff --git a/scala/.mvn/wrapper/MavenWrapperDownloader.java b/scala/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100755 index 00000000..fa4f7b49 --- /dev/null +++ b/scala/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/scala/.mvn/wrapper/maven-wrapper.jar b/scala/.mvn/wrapper/maven-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/scala/mvnw.cmd b/scala/mvnw.cmd new file mode 100755 index 00000000..48363fa6 --- /dev/null +++ b/scala/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/scala/pom.xml b/scala/pom.xml index ce7b5264..b75678ce 100644 --- a/scala/pom.xml +++ b/scala/pom.xml @@ -1,91 +1,68 @@ - - 4.0.0 - explore - rabbitmq - 0.1-SNAPSHOT - - 2.11.8 - + + 4.0.0 + com.rabbitmq + rabbitmq-tutorial-scala + 0.1-SNAPSHOT + + UTF-8 + 2.12.7 + (5.5.0,) + 1.7.25 + 3.4.4 + 3.8.0 + - - - scala-tools.org - Scala-Tools Maven2 Repository - http://scala-tools.org/repo-releases - - - - - scala-tools.org - Scala-Tools Maven2 Repository - http://scala-tools.org/repo-releases - - + + + org.scala-lang + scala-library + ${scala.version} + + + com.rabbitmq + amqp-client + ${amqp-client.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + + - - - org.scala-lang - scala-library - ${scala.version} - - - com.rabbitmq - amqp-client - (5.5.0,) - - + + src/main/scala + + + net.alchim31.maven + scala-maven-plugin + ${scala-maven-plugin.version} + + + + compile + + + + -dependencyfile + ${project.build.directory}/.scala_dependencies + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + - - src/main/scala - src/test/scala - - - org.scala-tools - maven-scala-plugin - - - - compile - testCompile - - - - - ${scala.version} - - -target:jvm-1.5 - - - - - org.apache.maven.plugins - maven-eclipse-plugin - - true - - ch.epfl.lamp.sdt.core.scalabuilder - - - ch.epfl.lamp.sdt.core.scalanature - - - org.eclipse.jdt.launching.JRE_CONTAINER - ch.epfl.lamp.sdt.launching.SCALA_CONTAINER - - - - - - - - - org.scala-tools - maven-scala-plugin - - ${scala.version} - - - - diff --git a/scala/src/main/scala/EmitLog.scala b/scala/src/main/scala/EmitLog.scala index 0628f71a..a0c38f8b 100644 --- a/scala/src/main/scala/EmitLog.scala +++ b/scala/src/main/scala/EmitLog.scala @@ -10,25 +10,11 @@ object EmitLog { val connection = factory.newConnection() val channel = connection.createChannel() channel.exchangeDeclare(EXCHANGE_NAME, "fanout") - val message = getMessage(argv) + val message = if (argv.length < 1) "Hello World!" else argv.mkString(" ") channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")) println(" [x] Sent '" + message + "'") channel.close() connection.close() } - private def getMessage(strings: Array[String]): String = { - if (strings.length < 1) return "info: Hello World!" - joinStrings(strings, " ") - } - - private def joinStrings(strings: Array[String], delimiter: String): String = { - val length = strings.length - if (length == 0) return "" - val words = new StringBuilder(strings(0)) - for (i <- 1 until length) { - words.append(delimiter).append(strings(i)) - } - words.toString - } } diff --git a/scala/src/main/scala/EmitLogHeader.scala b/scala/src/main/scala/EmitLogHeader.scala index 7bc4da58..242b62a7 100644 --- a/scala/src/main/scala/EmitLogHeader.scala +++ b/scala/src/main/scala/EmitLogHeader.scala @@ -33,5 +33,7 @@ object EmitLogHeader { val theProps = builder.build() channel.basicPublish(EXCHANGE_NAME, routingKey, theProps, message.getBytes("UTF-8")) println(" [x] Sent message: '" + message + "'") + channel.close() + connection.close() } } diff --git a/scala/src/main/scala/EmitLogTopic.scala b/scala/src/main/scala/EmitLogTopic.scala index e4a770b8..7b35e379 100644 --- a/scala/src/main/scala/EmitLogTopic.scala +++ b/scala/src/main/scala/EmitLogTopic.scala @@ -1,33 +1,21 @@ -import com.rabbitmq.client.{Channel, Connection, ConnectionFactory} +import com.rabbitmq.client.ConnectionFactory object EmitLogTopic { private val EXCHANGE_NAME = "topic_logs" def main(argv: Array[String]) { - var connection: Connection = null - var channel: Channel = null - try { - val factory = new ConnectionFactory() - factory.setHost("localhost") - connection = factory.newConnection() - channel = connection.createChannel() - channel.exchangeDeclare(EXCHANGE_NAME, "topic") - val routingKey = getRouting(argv) - val message = getMessage(argv) - channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")) - println(" [x] Sent '" + routingKey + "':'" + message + "'") - } catch { - case e: Exception => e.printStackTrace() - } finally { - if (connection != null) { - try { - connection.close() - } catch { - case ignore: Exception => - } - } - } + val factory = new ConnectionFactory() + factory.setHost("localhost") + val connection = factory.newConnection() + val channel = connection.createChannel() + channel.exchangeDeclare(EXCHANGE_NAME, "topic") + val routingKey = getRouting(argv) + val message = getMessage(argv) + channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8")) + println(" [x] Sent '" + routingKey + "':'" + message + "'") + channel.close() + connection.close() } private def getRouting(strings: Array[String]): String = { diff --git a/scala/src/main/scala/NewTask.scala b/scala/src/main/scala/NewTask.scala index bfed1fcf..b6d39db1 100644 --- a/scala/src/main/scala/NewTask.scala +++ b/scala/src/main/scala/NewTask.scala @@ -11,25 +11,10 @@ object NewTask { val connection = factory.newConnection() val channel = connection.createChannel() channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null) - val message = getMessage(argv) + val message = if (argv.length < 1) "Hello World!" else argv.mkString(" ") channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes("UTF-8")) println(" [x] Sent '" + message + "'") channel.close() connection.close() } - - private def getMessage(strings: Array[String]): String = { - if (strings.length < 1) return "Hello World!" - joinStrings(strings, " ") - } - - private def joinStrings(strings: Array[String], delimiter: String): String = { - val length = strings.length - if (length == 0) return "" - val words = new StringBuilder(strings(0)) - for (i <- 1 until length) { - words.append(delimiter).append(strings(i)) - } - words.toString - } } diff --git a/scala/src/main/scala/RPCClient.scala b/scala/src/main/scala/RPCClient.scala index 4e30f584..357ac319 100644 --- a/scala/src/main/scala/RPCClient.scala +++ b/scala/src/main/scala/RPCClient.scala @@ -4,13 +4,13 @@ import java.util.concurrent.{ArrayBlockingQueue, BlockingQueue} import com.rabbitmq.client.AMQP.BasicProperties import com.rabbitmq.client._ -class ResponseConsumer(val ch: Channel, val corrId: String) extends DefaultConsumer(ch) { +class ResponseCallback(val corrId: String) extends DeliverCallback { val response: BlockingQueue[String] = new ArrayBlockingQueue[String](1) - override def handleDelivery(consumerTag: String, envelope: Envelope, properties: BasicProperties, body: Array[Byte]): Unit = { - if (properties.getCorrelationId.equals(corrId)) { - response.offer(new String(body, "UTF-8")) - } + override def handle(consumerTag: String, message: Delivery): Unit = { + if (message.getProperties.getCorrelationId.equals(corrId)) { + response.offer(new String(message.getBody, "UTF-8")) + } } def take(): String = { @@ -35,10 +35,10 @@ class RPCClient(host: String) { .build() channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")) - val consumer = new ResponseConsumer(channel, corrId) - channel.basicConsume(replyQueueName, true, consumer) + val responseCallback = new ResponseCallback(corrId) + channel.basicConsume(replyQueueName, true, responseCallback, _ => { }) - consumer.take() + responseCallback.take() } def close() { diff --git a/scala/src/main/scala/RPCServer.scala b/scala/src/main/scala/RPCServer.scala index 8bc6b0dd..487a9690 100644 --- a/scala/src/main/scala/RPCServer.scala +++ b/scala/src/main/scala/RPCServer.scala @@ -3,29 +3,32 @@ import java.util.concurrent.CountDownLatch import com.rabbitmq.client.AMQP.BasicProperties import com.rabbitmq.client._ -class ServerConsumer(val ch: Channel, val latch: CountDownLatch) extends DefaultConsumer(ch) { - override def handleDelivery(consumerTag: String, envelope: Envelope, properties: BasicProperties, body: Array[Byte]): Unit = { +class ServerCallback(val ch: Channel, val latch: CountDownLatch) extends DeliverCallback { + + override def handle(consumerTag: String, delivery: Delivery): Unit = { var response: String = null val replyProps = new BasicProperties.Builder() - .correlationId(properties.getCorrelationId) - .build + .correlationId(delivery.getProperties.getCorrelationId) + .build try { - val message = new String(body, "UTF-8") - val n = java.lang.Integer.parseInt(message) - println(" [.] fib(" + message + ")") - response = "" + Fibonacci.fib(n) - } catch { - case e: Exception => { - println(" [.] " + e.toString) - response = "" - } - } finally { - ch.basicPublish("", properties.getReplyTo, replyProps, response.getBytes("UTF-8")) - ch.basicAck(envelope.getDeliveryTag, false) - latch.countDown() - } + val message = new String(delivery.getBody, "UTF-8") + val n = java.lang.Integer.parseInt(message) + println(" [.] fib(" + message + ")") + response = "" + Fibonacci.fib(n) + } catch { + case e: Exception => { + println(" [.] " + e.toString) + response = "" + } + } finally { + ch.basicPublish("", delivery.getProperties.getReplyTo, replyProps, response.getBytes("UTF-8")) + ch.basicAck(delivery.getEnvelope.getDeliveryTag, false) + latch.countDown() + } + } + } object Fibonacci { @@ -51,8 +54,8 @@ object RPCServer { channel.basicQos(1) // stop after one consumed message since this is example code val latch = new CountDownLatch(1) - val consumer = new ServerConsumer(channel, latch) - channel.basicConsume(RPC_QUEUE_NAME, false, consumer) + val serverCallback = new ServerCallback(channel, latch) + channel.basicConsume(RPC_QUEUE_NAME, false, serverCallback, _ => { }) println(" [x] Awaiting RPC requests") latch.await() } catch { diff --git a/scala/src/main/scala/ReceiveLogHeader.scala b/scala/src/main/scala/ReceiveLogHeader.scala index 54ff6606..7252cbf2 100644 --- a/scala/src/main/scala/ReceiveLogHeader.scala +++ b/scala/src/main/scala/ReceiveLogHeader.scala @@ -30,17 +30,11 @@ object ReceiveLogHeader { .getQueue channel.queueBind(queueName, EXCHANGE_NAME, routingKeyFromUser, headers) println(" [*] Waiting for messages. To exit press CTRL+C") - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - val message = new String(body, "UTF-8") - println(" [x] Received '" + envelope.getRoutingKey + "':'" + message + - "'") - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + + delivery.getEnvelope.getRoutingKey + "':'" + message + "'") } - channel.basicConsume(queueName, true, consumer) + channel.basicConsume(queueName, true, deliverCallback, _ => { }) } } diff --git a/scala/src/main/scala/ReceiveLogs.scala b/scala/src/main/scala/ReceiveLogs.scala index 508ad0bf..839b205d 100644 --- a/scala/src/main/scala/ReceiveLogs.scala +++ b/scala/src/main/scala/ReceiveLogs.scala @@ -14,16 +14,10 @@ object ReceiveLogs { val queueName = channel.queueDeclare().getQueue channel.queueBind(queueName, EXCHANGE_NAME, "") println(" [*] Waiting for messages. To exit press CTRL+C") - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - val message = new String(body, "UTF-8") - println(" [x] Received '" + message + "'") - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + message + "'") } - channel.basicConsume(queueName, true, consumer) + channel.basicConsume(queueName, true, deliverCallback, _ => {}) } } diff --git a/scala/src/main/scala/ReceiveLogsDirect.scala b/scala/src/main/scala/ReceiveLogsDirect.scala index 5157bf35..10acbc13 100644 --- a/scala/src/main/scala/ReceiveLogsDirect.scala +++ b/scala/src/main/scala/ReceiveLogsDirect.scala @@ -19,17 +19,11 @@ object ReceiveLogsDirect { channel.queueBind(queueName, EXCHANGE_NAME, severity) } println(" [*] Waiting for messages. To exit press CTRL+C") - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - val message = new String(body, "UTF-8") - println(" [x] Received '" + envelope.getRoutingKey + "':'" + message + - "'") - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + + delivery.getEnvelope.getRoutingKey + "':'" + message + "'") } - channel.basicConsume(queueName, true, consumer) + channel.basicConsume(queueName, true, deliverCallback, _ => { }) } } diff --git a/scala/src/main/scala/ReceiveLogsTopic.scala b/scala/src/main/scala/ReceiveLogsTopic.scala index 23105b24..54a79b82 100644 --- a/scala/src/main/scala/ReceiveLogsTopic.scala +++ b/scala/src/main/scala/ReceiveLogsTopic.scala @@ -19,17 +19,11 @@ object ReceiveLogsTopic { channel.queueBind(queueName, EXCHANGE_NAME, bindingKey) } println(" [*] Waiting for messages. To exit press CTRL+C") - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - val message = new String(body, "UTF-8") - println(" [x] Received '" + envelope.getRoutingKey + "':'" + message + - "'") - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + + delivery.getEnvelope.getRoutingKey + "':'" + message + "'") } - channel.basicConsume(queueName, true, consumer) + channel.basicConsume(queueName, true, deliverCallback, _ => {}) } } diff --git a/scala/src/main/scala/Recv.scala b/scala/src/main/scala/Recv.scala index 7d6fa6d2..8ee3649d 100644 --- a/scala/src/main/scala/Recv.scala +++ b/scala/src/main/scala/Recv.scala @@ -12,16 +12,10 @@ object Recv { val channel = connection.createChannel() channel.queueDeclare(QUEUE_NAME, false, false, false, null) println(" [*] Waiting for messages. To exit press CTRL+C") - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - var message = new String(body, "UTF-8") - println(" [x] Received '" + message + "'") - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + message + "'") } - channel.basicConsume(QUEUE_NAME, true, consumer) + channel.basicConsume(QUEUE_NAME, true, deliverCallback, _ => { }) } } diff --git a/scala/src/main/scala/Worker.scala b/scala/src/main/scala/Worker.scala index 2f54b7d1..004b3293 100644 --- a/scala/src/main/scala/Worker.scala +++ b/scala/src/main/scala/Worker.scala @@ -12,23 +12,17 @@ object Worker { channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null) println(" [*] Waiting for messages. To exit press CTRL+C") channel.basicQos(1) - val consumer = new DefaultConsumer(channel) { - - override def handleDelivery(consumerTag: String, - envelope: Envelope, - properties: AMQP.BasicProperties, - body: Array[Byte]) { - val message = new String(body, "UTF-8") - println(" [x] Received '" + message + "'") - try { - doWork(message) - } finally { - println(" Done") - channel.basicAck(envelope.getDeliveryTag, false) - } + val deliverCallback: DeliverCallback = (_, delivery) => { + val message = new String(delivery.getBody, "UTF-8") + println(" [x] Received '" + message + "'") + try { + doWork(message) + } finally { + println(" Done") + channel.basicAck(delivery.getEnvelope.getDeliveryTag, false) } } - channel.basicConsume(TASK_QUEUE_NAME, false, consumer) + channel.basicConsume(TASK_QUEUE_NAME, false, deliverCallback, _ => {}) } private def doWork(task: String) { From cde21163c3f8ee58bf02e2fde427ce031fec4378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 4 Dec 2018 16:53:31 +0100 Subject: [PATCH 100/659] Symlink 2 Java files to Maven project directory --- java-mvn/src/main/java/RPCServer.java | 1 + java-mvn/src/main/java/ReceiveLogHeader.java | 1 + 2 files changed, 2 insertions(+) create mode 120000 java-mvn/src/main/java/RPCServer.java create mode 120000 java-mvn/src/main/java/ReceiveLogHeader.java diff --git a/java-mvn/src/main/java/RPCServer.java b/java-mvn/src/main/java/RPCServer.java new file mode 120000 index 00000000..40dd9654 --- /dev/null +++ b/java-mvn/src/main/java/RPCServer.java @@ -0,0 +1 @@ +../../../../java/RPCServer.java \ No newline at end of file diff --git a/java-mvn/src/main/java/ReceiveLogHeader.java b/java-mvn/src/main/java/ReceiveLogHeader.java new file mode 120000 index 00000000..96653bbc --- /dev/null +++ b/java-mvn/src/main/java/ReceiveLogHeader.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogHeader.java \ No newline at end of file From 3fc2793f2532bfa17ecf45d8d10206847f1d1aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 6 Dec 2018 10:53:04 +0100 Subject: [PATCH 101/659] Upgrade Spring AMQP tutorials to Spring Boot 2.1.1 --- .../.mvn/wrapper/MavenWrapperDownloader.java | 110 +++++++ spring-amqp/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-amqp/README.md | 6 +- spring-amqp/mvnw | 157 ++++++--- spring-amqp/mvnw.cmd | 306 +++++++++--------- spring-amqp/pom.xml | 118 +++---- spring-amqp/scripts.txt | 18 -- .../RabbitAmqpTutorialsApplication.java | 42 ++- .../amqp/tutorials/tut1/Tut1Config.java | 2 +- .../amqp/tutorials/tut2/Tut2Config.java | 2 +- .../amqp/tutorials/tut2/Tut2Sender.java | 17 +- .../amqp/tutorials/tut3/Tut3Sender.java | 17 +- .../amqp/tutorials/tut4/Tut4Sender.java | 17 +- .../amqp/tutorials/tut5/Tut5Sender.java | 18 +- .../src/main/resources/application.yml | 2 +- 16 files changed, 485 insertions(+), 348 deletions(-) create mode 100755 spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java create mode 100755 spring-amqp/.mvn/wrapper/maven-wrapper.jar create mode 100755 spring-amqp/.mvn/wrapper/maven-wrapper.properties mode change 100644 => 100755 spring-amqp/mvnw.cmd delete mode 100644 spring-amqp/scripts.txt diff --git a/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java b/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100755 index 00000000..fa4f7b49 --- /dev/null +++ b/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/spring-amqp/.mvn/wrapper/maven-wrapper.jar b/spring-amqp/.mvn/wrapper/maven-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain @@ -230,4 +283,4 @@ exec "$JAVACMD" \ $MAVEN_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-amqp/mvnw.cmd b/spring-amqp/mvnw.cmd old mode 100644 new mode 100755 index 2b934e89..48363fa6 --- a/spring-amqp/mvnw.cmd +++ b/spring-amqp/mvnw.cmd @@ -1,145 +1,161 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 84d0c7f9..848b833d 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -1,78 +1,48 @@ - 4.0.0 - - org.springframework.amqp - rabbit-tutorials - 1.7.1.RELEASE - jar - - rabbitmq-tutorials - Spring AMQP Implementations for RabbitMQ Tutorials - - - org.springframework.boot - spring-boot-starter-parent - 1.5.2.RELEASE - - - - - UTF-8 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-amqp - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - org.springframework.amqp.tutorials.RabbitAmqpTutorialsApplication - ZIP - - - - - - - - spring-all - Spring Snapshots - https://repo.spring.io/repo - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.amqp + rabbitmq-tutorials + 2.0.0.RELEASE + jar + + rabbitmq-tutorials + Spring AMQP Implementations for RabbitMQ Tutorials + + + org.springframework.boot + spring-boot-starter-parent + 2.1.1.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + org.springframework.amqp.tutorials.RabbitAmqpTutorialsApplication + rabbitmq-tutorials + ZIP + + + + diff --git a/spring-amqp/scripts.txt b/spring-amqp/scripts.txt deleted file mode 100644 index 4da91af9..00000000 --- a/spring-amqp/scripts.txt +++ /dev/null @@ -1,18 +0,0 @@ -#{tut1|hello-world},{sender|receiver} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=hello-world,receiver -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=hello-world,sender -#{tut2|work-queues},{sender|receiver} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=work-queues,receiver -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=work-queues,sender -#{tut3|pub-sub|publish-subscribe},{sender|receiver} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=pub-sub,receiver -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=pub-sub,sender -#{tut4|routing},{sender|receiver} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=routing,receiver -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=routing,sender -#{tut5|topics},{sender|receiver} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=topics,receiver -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=topics,sender -#{tut6|rpc},{client|server} -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=rpc,server -java -jar target/rabbit-tutorials-1.6.6.RELEASE.jar --spring.profiles.active=rpc,client diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java index 861229ca..95da0dce 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ /** * @author Gary Russell * @author Scott Deeg - * + * @author Arnaud Cogoluègnes */ @SpringBootApplication @EnableScheduling @@ -34,27 +34,21 @@ public class RabbitAmqpTutorialsApplication { @Profile("usage_message") @Bean public CommandLineRunner usage() { - return new CommandLineRunner() { - - @Override - public void run(String... arg0) throws Exception { - System.out.println("This app uses Spring Profiles to control its behavior.\n"); - System.out.println("Options are: "); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,client"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,server"); - - } - + return args -> { + System.out.println("This app uses Spring Profiles to control its behavior.\n"); + System.out.println("Options are: "); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,receiver"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,sender"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,client"); + System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,server"); }; } @@ -64,7 +58,7 @@ public CommandLineRunner tutorial() { return new RabbitAmqpTutorialsRunner(); } - public static void main(String[] args) throws Exception { + public static void main(String[] args) { SpringApplication.run(RabbitAmqpTutorialsApplication.class, args); } diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java index 09b87f89..bbf17095 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java index 68e47b36..9a950c09 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java index 100d113d..548a044d 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import java.util.concurrent.atomic.AtomicInteger; + /** * @author Gary Russell * @author Scott Deeg + * @author Arnaud Cogoluègnes */ public class Tut2Sender { @@ -32,20 +35,20 @@ public class Tut2Sender { @Autowired private Queue queue; - int dots = 0; + AtomicInteger dots = new AtomicInteger(0); - int count = 0; + AtomicInteger count = new AtomicInteger(0); @Scheduled(fixedDelay = 1000, initialDelay = 500) public void send() { StringBuilder builder = new StringBuilder("Hello"); - if (dots++ == 3) { - dots = 1; + if (dots.getAndIncrement() == 3) { + dots.set(1); } - for (int i = 0; i < dots; i++) { + for (int i = 0; i < dots.get(); i++) { builder.append('.'); } - builder.append(Integer.toString(++count)); + builder.append(count.incrementAndGet()); String message = builder.toString(); template.convertAndSend(queue.getName(), message); System.out.println(" [x] Sent '" + message + "'"); diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java index 126bbfdd..9b30ad14 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import java.util.concurrent.atomic.AtomicInteger; + /** * @author Gary Russell * @author Scott Deeg + * @author Arnaud Cogoluègnes */ public class Tut3Sender { @@ -32,20 +35,20 @@ public class Tut3Sender { @Autowired private FanoutExchange fanout; - int dots = 0; + AtomicInteger dots = new AtomicInteger(0); - int count = 0; + AtomicInteger count = new AtomicInteger(0); @Scheduled(fixedDelay = 1000, initialDelay = 500) public void send() { StringBuilder builder = new StringBuilder("Hello"); - if (dots++ == 3) { - dots = 1; + if (dots.getAndIncrement() == 3) { + dots.set(1); } - for (int i = 0; i < dots; i++) { + for (int i = 0; i < dots.get(); i++) { builder.append('.'); } - builder.append(Integer.toString(++count)); + builder.append(count.incrementAndGet()); String message = builder.toString(); template.convertAndSend(fanout.getName(), "", message); System.out.println(" [x] Sent '" + message + "'"); diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java index 9d60374a..4afd2b2f 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import java.util.concurrent.atomic.AtomicInteger; + /** * @author Gary Russell * @author Scott Deeg + * @author Arnaud Cogoluègnes */ public class Tut4Sender { @@ -32,21 +35,21 @@ public class Tut4Sender { @Autowired private DirectExchange direct; - private int index; + AtomicInteger index = new AtomicInteger(0); - private int count; + AtomicInteger count = new AtomicInteger(0); private final String[] keys = {"orange", "black", "green"}; @Scheduled(fixedDelay = 1000, initialDelay = 500) public void send() { StringBuilder builder = new StringBuilder("Hello to "); - if (++this.index == 3) { - this.index = 0; + if (this.index.incrementAndGet() == 3) { + this.index.set(0); } - String key = keys[this.index]; + String key = keys[this.index.get()]; builder.append(key).append(' '); - builder.append(Integer.toString(++this.count)); + builder.append(this.count.incrementAndGet()); String message = builder.toString(); template.convertAndSend(direct.getName(), key, message); System.out.println(" [x] Sent '" + message + "'"); diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java index 48a20aa7..255d0105 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,9 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import java.util.concurrent.atomic.AtomicInteger; + /** * @author Gary Russell * @author Scott Deeg + * @author Arnaud Cogoluègnes */ public class Tut5Sender { @@ -32,10 +35,9 @@ public class Tut5Sender { @Autowired private TopicExchange topic; + AtomicInteger index = new AtomicInteger(0); - private int index; - - private int count; + AtomicInteger count = new AtomicInteger(0); private final String[] keys = {"quick.orange.rabbit", "lazy.orange.elephant", "quick.orange.fox", "lazy.brown.fox", "lazy.pink.rabbit", "quick.brown.fox"}; @@ -43,12 +45,12 @@ public class Tut5Sender { @Scheduled(fixedDelay = 1000, initialDelay = 500) public void send() { StringBuilder builder = new StringBuilder("Hello to "); - if (++this.index == keys.length) { - this.index = 0; + if (this.index.incrementAndGet() == keys.length) { + this.index.set(0); } - String key = keys[this.index]; + String key = keys[this.index.get()]; builder.append(key).append(' '); - builder.append(Integer.toString(++this.count)); + builder.append(this.count.incrementAndGet()); String message = builder.toString(); template.convertAndSend(topic.getName(), key, message); System.out.println(" [x] Sent '" + message + "'"); diff --git a/spring-amqp/src/main/resources/application.yml b/spring-amqp/src/main/resources/application.yml index fce427c5..452d6169 100644 --- a/spring-amqp/src/main/resources/application.yml +++ b/spring-amqp/src/main/resources/application.yml @@ -8,4 +8,4 @@ logging: tutorial: client: - duration: 600000 + duration: 10000 From 960a3c2d7a590e612cac1ed2af47cbdd483b5397 Mon Sep 17 00:00:00 2001 From: Max Kovpak Date: Tue, 11 Dec 2018 18:06:19 +0200 Subject: [PATCH 102/659] Added require example Added require example and the full name of the package. --- php/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/php/README.md b/php/README.md index 0bdd70e2..b66946fb 100644 --- a/php/README.md +++ b/php/README.md @@ -28,6 +28,10 @@ To do that install Composer and add it to your path, then run the following comm inside this project folder: composer.phar install + +Or you can require it to the existing project using a command: + + composer.phar require php-amqplib/php-amqplib ## Code From 9173656321890cc21af861971ef6eb4ab0e195c3 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 24 Dec 2018 10:32:02 +0300 Subject: [PATCH 103/659] A different take on #192 by @mengmanzbh --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 5aa9fd1e..940e3dc5 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,19 @@ their ports to various languages. This repository only contains runnable code. Please consult [tutorials on the site](http://www.rabbitmq.com/getstarted.html) to learn more about [the concepts](http://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. +## Prerequisites + All tutorials **require a RabbitMQ node running on localhost** with stock (default) settings. +Please refer to [RabbitMQ documentation](https://www.rabbitmq.com/download.html) to learn +more about various installation options: + + * A [Windows installer](https://www.rabbitmq.com/install-windows.html) + * A [Docker image](https://hub.docker.com/_/rabbitmq/) + * [Homebrew](https://www.rabbitmq.com/install-homebrew.html) on MacOS + * Packages for [Ubuntu and Debian](https://www.rabbitmq.com/install-debian.html) as well as [RPM-based distributions](https://www.rabbitmq.com/install-rpm.html) + * A generic [binary build](http://www.rabbitmq.com/install-generic-unix.html) for Linux, *BSD and other UNIX-like systems + ## Languages The following ports are available: From 9cdf2edc112a21ea33c965e81995a9c46a2b3791 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 24 Dec 2018 10:34:10 +0300 Subject: [PATCH 104/659] Link to the main docs page, too --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 940e3dc5..f916357f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ their ports to various languages. This repository only contains runnable code. Please consult [tutorials on the site](http://www.rabbitmq.com/getstarted.html) to learn more about [the concepts](http://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. +A please check out the rest of [RabbitMQ documentation](https://www.rabbitmq.com/documentation.html)! + ## Prerequisites All tutorials **require a RabbitMQ node running on localhost** with stock (default) settings. From 589e5e91c5d2295833c71ff58803ea7d3148e6a7 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 24 Dec 2018 10:36:32 +0300 Subject: [PATCH 105/659] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f916357f..1f92f88a 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,14 @@ A please check out the rest of [RabbitMQ documentation](https://www.rabbitmq.com All tutorials **require a RabbitMQ node running on localhost** with stock (default) settings. -Please refer to [RabbitMQ documentation](https://www.rabbitmq.com/download.html) to learn -more about various installation options: +Please refer to RabbitMQ documentation to learn +more about various [installation options](https://www.rabbitmq.com/download.html): * A [Windows installer](https://www.rabbitmq.com/install-windows.html) * A [Docker image](https://hub.docker.com/_/rabbitmq/) * [Homebrew](https://www.rabbitmq.com/install-homebrew.html) on MacOS * Packages for [Ubuntu and Debian](https://www.rabbitmq.com/install-debian.html) as well as [RPM-based distributions](https://www.rabbitmq.com/install-rpm.html) - * A generic [binary build](http://www.rabbitmq.com/install-generic-unix.html) for Linux, *BSD and other UNIX-like systems + * A generic [binary build](https://www.rabbitmq.com/install-generic-unix.html) for Linux, *BSD and other UNIX-like systems ## Languages From 13b8d028ed35244dc2f85b1184f184f246bf5d89 Mon Sep 17 00:00:00 2001 From: matrixbirds Date: Wed, 26 Dec 2018 23:58:41 +0800 Subject: [PATCH 106/659] add dart --- .gitignore | 1 + dart/emit_log.dart | 21 +++++++++ dart/emit_log_direct.dart | 23 ++++++++++ dart/emit_log_topic.dart | 23 ++++++++++ dart/new_task.dart | 24 +++++++++++ dart/pubspec.lock | 19 +++++++++ dart/pubspec.yaml | 3 ++ dart/receive.dart | 34 +++++++++++++++ dart/receive_logs.dart | 34 +++++++++++++++ dart/receive_logs_direct.dart | 40 ++++++++++++++++++ dart/receive_logs_topic.dart | 40 ++++++++++++++++++ dart/rpc_client.dart | 80 +++++++++++++++++++++++++++++++++++ dart/rpc_server.dart | 36 ++++++++++++++++ dart/send.dart | 23 ++++++++++ dart/worker.dart | 37 ++++++++++++++++ 15 files changed, 438 insertions(+) create mode 100644 dart/emit_log.dart create mode 100644 dart/emit_log_direct.dart create mode 100644 dart/emit_log_topic.dart create mode 100644 dart/new_task.dart create mode 100644 dart/pubspec.lock create mode 100644 dart/pubspec.yaml create mode 100644 dart/receive.dart create mode 100644 dart/receive_logs.dart create mode 100644 dart/receive_logs_direct.dart create mode 100644 dart/receive_logs_topic.dart create mode 100644 dart/rpc_client.dart create mode 100644 dart/rpc_server.dart create mode 100644 dart/send.dart create mode 100644 dart/worker.dart diff --git a/.gitignore b/.gitignore index bde152e1..2b448449 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ target/ .vs/ *.log +.packages diff --git a/dart/emit_log.dart b/dart/emit_log.dart new file mode 100644 index 00000000..e8e06d55 --- /dev/null +++ b/dart/emit_log.dart @@ -0,0 +1,21 @@ +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + String msg = arguments.isEmpty ? "Hello World!" : arguments[0]; + + client + .channel() + .then((Channel channel) => + channel.exchange("logs", ExchangeType.FANOUT, durable: false)) + .then((Exchange exchange) { + exchange.publish(msg, null); + print(" [x] Sent ${msg}"); + return client.close(); + }); +} diff --git a/dart/emit_log_direct.dart b/dart/emit_log_direct.dart new file mode 100644 index 00000000..9ebf39f7 --- /dev/null +++ b/dart/emit_log_direct.dart @@ -0,0 +1,23 @@ +import "package:dart_amqp/dart_amqp.dart"; + +void main(List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + String routingKey = arguments.length < 1 ? "info" : arguments[0]; + String msg = arguments.length < 2 ? "Hello World!" : arguments[1]; + + client + .channel() + .then((Channel channel) => + channel.exchange("direct_logs", ExchangeType.DIRECT, + durable: false)) + .then((Exchange exchange) { + exchange.publish(msg, routingKey); + print(" [x] Sent ${routingKey}: ${msg}"); + return client.close(); + }); +} diff --git a/dart/emit_log_topic.dart b/dart/emit_log_topic.dart new file mode 100644 index 00000000..8014a329 --- /dev/null +++ b/dart/emit_log_topic.dart @@ -0,0 +1,23 @@ +import "package:dart_amqp/dart_amqp.dart"; + +void main(List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + String routingKey = arguments.length < 1 ? "anonymous.info" : arguments[0]; + String msg = arguments.length < 2 ? "Hello World!" : arguments[1]; + + client + .channel() + .then((Channel channel) => + channel.exchange("topic_logs", ExchangeType.TOPIC, + durable: false)) + .then((Exchange exchange) { + exchange.publish(msg, routingKey); + print(" [x] Sent ${routingKey}: ${msg}"); + return client.close(); + }); +} diff --git a/dart/new_task.dart b/dart/new_task.dart new file mode 100644 index 00000000..1baf3492 --- /dev/null +++ b/dart/new_task.dart @@ -0,0 +1,24 @@ +import "package:dart_amqp/dart_amqp.dart"; + +void main(List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + String consumeTag = "task_queue"; + String msg = arguments.isEmpty ? "Hello World!" : arguments[0]; + + MessageProperties properties = new MessageProperties.persistentMessage(); + + client + .channel() + .then((Channel channel) => + channel.queue(consumeTag, durable: true)) + .then((Queue queue) { + queue.publish(msg, properties: properties); + print(" [x] Sent ${msg}"); + return client.close(); + }); +} diff --git a/dart/pubspec.lock b/dart/pubspec.lock new file mode 100644 index 00000000..6cdc0680 --- /dev/null +++ b/dart/pubspec.lock @@ -0,0 +1,19 @@ +# Generated by pub +# See https://www.dartlang.org/tools/pub/glossary#lockfile +packages: + dart_amqp: + dependency: "direct main" + description: + name: dart_amqp + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.3+2" +sdks: + dart: ">=2.0.0-dev <3.0.0" diff --git a/dart/pubspec.yaml b/dart/pubspec.yaml new file mode 100644 index 00000000..34c3f053 --- /dev/null +++ b/dart/pubspec.yaml @@ -0,0 +1,3 @@ +name: dart_rabbitmq_example +dependencies: + dart_amqp: 0.1.1 diff --git a/dart/receive.dart b/dart/receive.dart new file mode 100644 index 00000000..ce40a4e9 --- /dev/null +++ b/dart/receive.dart @@ -0,0 +1,34 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + print("close client"); + exit(0); + }); + }); + + String msg = arguments.isEmpty ? "Hello World!": arguments[0]; + + String queueTag = "hello"; + + client + .channel() + .then((Channel channel) => channel.queue(queueTag, durable: false)) + .then((Queue queue) { + print(" [*] Waiting for messages in ${queueTag}. To Exit press CTRL+C"); + return queue.consume(consumerTag: queueTag, noAck: true); + }) + .then((Consumer consumer) { + consumer.listen((AmqpMessage event) { + print(" [x] Received ${event.payloadAsString}"); + }); + }); +} diff --git a/dart/receive_logs.dart b/dart/receive_logs.dart new file mode 100644 index 00000000..703d8252 --- /dev/null +++ b/dart/receive_logs.dart @@ -0,0 +1,34 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + print("close client"); + exit(0); + }); + }); + + String msg = arguments.isEmpty ? "Hello World!": arguments[0]; + + client + .channel() + .then((Channel channel) { + return channel.exchange("logs", ExchangeType.FANOUT, durable: false); + }) + .then((Exchange exchange) { + print(" [*] Waiting for messages in logs. To Exit press CTRL+C"); + return exchange.bindPrivateQueueConsumer(null); + }) + .then((Consumer consumer) { + consumer.listen((AmqpMessage event) { + print(" [x] Received ${event.payloadAsString}"); + }); + }); +} diff --git a/dart/receive_logs_direct.dart b/dart/receive_logs_direct.dart new file mode 100644 index 00000000..26b8b892 --- /dev/null +++ b/dart/receive_logs_direct.dart @@ -0,0 +1,40 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + if (arguments.isEmpty) { + print("Usage: receive_logs_direct.dart [info] [warning] [error]"); + return; + } + + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + print("close client"); + exit(0); + }); + }); + + List routingKeys = arguments.sublist(0, 1); + client + .channel() + .then((Channel channel) { + return channel.exchange("direct_logs", ExchangeType.DIRECT, durable: false); + }) + .then((Exchange exchange) { + print(" [*] Waiting for messages in logs. To Exit press CTRL+C"); + return exchange.bindPrivateQueueConsumer(routingKeys, + consumerTag: "direct_logs", noAck: true + ); + }) + .then((Consumer consumer) { + consumer.listen((AmqpMessage event) { + print(" [x] ${event.routingKey}:'${event.payloadAsString}'"); + }); + }); +} diff --git a/dart/receive_logs_topic.dart b/dart/receive_logs_topic.dart new file mode 100644 index 00000000..d60ec59e --- /dev/null +++ b/dart/receive_logs_topic.dart @@ -0,0 +1,40 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + if (arguments.isEmpty) { + print("Usage: receive_logs_direct.dart ."); + return; + } + + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + print("close client"); + exit(0); + }); + }); + + List routingKeys = arguments.sublist(0, 1); + client + .channel() + .then((Channel channel) { + return channel.exchange("topic_logs", ExchangeType.TOPIC, durable: false); + }) + .then((Exchange exchange) { + print(" [*] Waiting for messages in logs. To Exit press CTRL+C"); + return exchange.bindPrivateQueueConsumer(routingKeys, + consumerTag: "topic_logs", noAck: true + ); + }) + .then((Consumer consumer) { + consumer.listen((AmqpMessage event) { + print(" [x] ${event.routingKey}:'${event.payloadAsString}'"); + }); + }); +} diff --git a/dart/rpc_client.dart b/dart/rpc_client.dart new file mode 100644 index 00000000..4def3669 --- /dev/null +++ b/dart/rpc_client.dart @@ -0,0 +1,80 @@ +import "dart:io"; +import "dart:async"; +import "dart:math"; +import "package:dart_amqp/dart_amqp.dart"; + +var UUID = () => "${(new Random()).nextDouble()}"; + +class RPCClient { + Client client; + String queueTag; + String _replyQueueTag; + Completer contextChannel; + Map _channels = new Map(); + Queue _queue; + RPCClient() : client = new Client(), + queueTag = "rpc_queue" { + contextChannel = new Completer(); + client + .channel() + .then((Channel channel) => channel.queue(queueTag)) + .then((Queue rpcQueue) { + _queue = rpcQueue; + return rpcQueue.channel.privateQueue(); + }) + .then((Queue rpcQueue) { + rpcQueue.consume(noAck: true) + .then((Consumer consumer) { + _replyQueueTag = consumer.queue.name; + consumer.listen(handler); + contextChannel.complete(); + }); + }); + } + + void handler (AmqpMessage event) { + if (!_channels + .containsKey( + event.properties.corellationId)) return; + print(" [.] Got ${event.payloadAsString}"); + _channels + .remove(event.properties.corellationId) + .complete(event.payloadAsString); + } + + Future call(int n) { + return contextChannel.future + .then((_) { + String uuid = UUID(); + Completer channel = new Completer(); + MessageProperties properties = new MessageProperties() + ..replyTo = _replyQueueTag + ..corellationId = uuid; + _channels[uuid] = channel; + print(" [x] Requesting ${n}"); + _queue.publish({"n": n}, properties: properties); + return channel.future; + }); + } + + Future close() { + _channels.forEach((_, var next) => next.complete("RPC client closed")); + _channels.clear(); + client.close(); + } +} + +void main(List arguments) { + if (arguments.isEmpty) { + print("Usage: rpc_client.dart num"); + return; + } + RPCClient client = new RPCClient(); + int n = arguments.isEmpty ? 30 : num.parse(arguments[0]); + client.call(n) + .then((String res) { + print(" [x] fib(${n}) = ${res}"); + }) + .then((_) => client.close()) + .then((_) => null); +} \ No newline at end of file diff --git a/dart/rpc_server.dart b/dart/rpc_server.dart new file mode 100644 index 00000000..e6432fc2 --- /dev/null +++ b/dart/rpc_server.dart @@ -0,0 +1,36 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +// Slow implementation of fib +int fib(int n) { + if (n >= 0 && n <= 1) { + return n; + } else + return fib(n - 1) + fib(n - 2); +} + +void main(List args) { + + Client client = new Client(); + + // Setup a signal handler to cleanly exit if CTRL+C is pressed + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + exit(0); + }); + }); + + client + .channel() + .then((Channel channel) => channel.qos(0, 1)) + .then((Channel channel) => channel.queue("rpc_queue")) + .then((Queue queue) => queue.consume()) + .then((Consumer consumer) { + print(" [x] Awaiting RPC request"); + consumer.listen((AmqpMessage message) { + var n = message.payloadAsJson["n"]; + print(" [.] fib(${n})"); + message.reply(fib(n).toString()); + }); + }); +} diff --git a/dart/send.dart b/dart/send.dart new file mode 100644 index 00000000..3e5d8252 --- /dev/null +++ b/dart/send.dart @@ -0,0 +1,23 @@ +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + String consumeTag = "hello"; + String msg = "hello"; + + client + .channel() + .then((Channel channel) { + return channel.queue(consumeTag, durable: false); + }) + .then((Queue queue) { + queue.publish(msg); + print(" [x] Sent ${msg}"); + client.close(); + }); +} diff --git a/dart/worker.dart b/dart/worker.dart new file mode 100644 index 00000000..bf91258f --- /dev/null +++ b/dart/worker.dart @@ -0,0 +1,37 @@ +import "dart:io"; +import "package:dart_amqp/dart_amqp.dart"; + +void main (List arguments) { + ConnectionSettings settings = new ConnectionSettings( + host: "localhost" + ); + + Client client = new Client(settings: settings); + + ProcessSignal.sigint.watch().listen((_) { + client.close().then((_) { + print("close client"); + exit(0); + }); + }); + + String consumeTag = "task_queue"; + + client + .channel() + .then((Channel channel) { + return channel.qos(0, 1) + .then((Channel channel) => + channel.queue(consumeTag, durable: true)); + }) + .then((Queue queue) => queue.consume(noAck: false)) + .then((Consumer consumer) { + consumer.listen((AmqpMessage event) { + String payload = event.payloadAsString; + print(" [x] Received ${payload}"); + sleep(new Duration(seconds : payload.split(".").length)); + print(" [x] Done"); + event.ack(); + }); + }); +} From 48e2c0ac7335698afb8f924211d4d242db55e90c Mon Sep 17 00:00:00 2001 From: matrixbirds Date: Thu, 27 Dec 2018 16:58:14 +0800 Subject: [PATCH 107/659] add doc --- dart/README.md | 53 +++++++++++++++++++++++++++++++++++ dart/receive_logs_direct.dart | 2 +- dart/receive_logs_topic.dart | 2 +- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 dart/README.md diff --git a/dart/README.md b/dart/README.md new file mode 100644 index 00000000..48c4aa29 --- /dev/null +++ b/dart/README.md @@ -0,0 +1,53 @@ +# Dart code for RabbitMQ tutorials + +Here you can find an [Dart](https://www.dartlang.org/) port of +[RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). + + +## Requirements + +To run this code you need a [Dart 2 server platform installed](https://www.dartlang.org/tools/sdk#install) + +### Dart 2.0+ + +These tutorials use [dart_amqp](https://github.com/achilleasa/dart_amqp). + +To install dependencies with pub, run: + + pub get + +## Code + +To run the examples, use `dart source_file.dart`. + +Tutorial one: "Hello World!": + + dart receive.dart + dart send.dart + +Tutorial two: Work Queues + + dart worker.dart + dart new_task.dart + +Tutorial three: Publish/Subscribe + + dart receive_logs.dart + dart emit_log.dart + +Tutorial four: Routing + + dart receive_logs_direct.dart info warning + dart emit_log_direct.dart info "A message" + dart emit_log_direct.dart warning "A message" + +Tutorial five: Topics + + dart receive_logs_topic.dart "info.*" "warn.*" + dart emit_log_topic.dart "info.connections" "Connected" + dart emit_log_topic.dart "info.connections" "Connected" + +Tutorial six: RPC (Request/Response) + + dart rpc_server.dart + dart rpc_client.dart diff --git a/dart/receive_logs_direct.dart b/dart/receive_logs_direct.dart index 26b8b892..6041a07e 100644 --- a/dart/receive_logs_direct.dart +++ b/dart/receive_logs_direct.dart @@ -20,7 +20,7 @@ void main (List arguments) { }); }); - List routingKeys = arguments.sublist(0, 1); + List routingKeys = arguments.sublist(0, 2); client .channel() .then((Channel channel) { diff --git a/dart/receive_logs_topic.dart b/dart/receive_logs_topic.dart index d60ec59e..94da14a4 100644 --- a/dart/receive_logs_topic.dart +++ b/dart/receive_logs_topic.dart @@ -20,7 +20,7 @@ void main (List arguments) { }); }); - List routingKeys = arguments.sublist(0, 1); + List routingKeys = arguments.sublist(0, 2); client .channel() .then((Channel channel) { From 4629f41b0549fe27cfe7297ea4321744c81be7e8 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 28 Dec 2018 21:31:30 +0300 Subject: [PATCH 108/659] Dart: minor tutorial 5 corrections --- dart/README.md | 2 +- dart/receive_logs_topic.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dart/README.md b/dart/README.md index 48c4aa29..d82da0df 100644 --- a/dart/README.md +++ b/dart/README.md @@ -45,7 +45,7 @@ Tutorial five: Topics dart receive_logs_topic.dart "info.*" "warn.*" dart emit_log_topic.dart "info.connections" "Connected" - dart emit_log_topic.dart "info.connections" "Connected" + dart emit_log_topic.dart "warn.connecctions" "A warning" Tutorial six: RPC (Request/Response) diff --git a/dart/receive_logs_topic.dart b/dart/receive_logs_topic.dart index 94da14a4..486393c1 100644 --- a/dart/receive_logs_topic.dart +++ b/dart/receive_logs_topic.dart @@ -3,7 +3,7 @@ import "package:dart_amqp/dart_amqp.dart"; void main (List arguments) { if (arguments.isEmpty) { - print("Usage: receive_logs_direct.dart ."); + print("Usage: receive_logs_direct.dart [, ...]"); return; } @@ -20,7 +20,7 @@ void main (List arguments) { }); }); - List routingKeys = arguments.sublist(0, 2); + List routingKeys = arguments.sublist(0); client .channel() .then((Channel channel) { From 17198d043064810dd321f247f27fadb92eb5a6cb Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 28 Dec 2018 21:34:06 +0300 Subject: [PATCH 109/659] Dart: make it easier to distinguish different published messages --- dart/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dart/README.md b/dart/README.md index d82da0df..8c90fa46 100644 --- a/dart/README.md +++ b/dart/README.md @@ -39,7 +39,7 @@ Tutorial four: Routing dart receive_logs_direct.dart info warning dart emit_log_direct.dart info "A message" - dart emit_log_direct.dart warning "A message" + dart emit_log_direct.dart warning "A warning" Tutorial five: Topics From 62cf628ad59472a20860a3369d2a695846f5405d Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 28 Dec 2018 21:56:07 +0300 Subject: [PATCH 110/659] README: mention the newly contributed Dart port --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1f92f88a..9dfe9bb5 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ The following ports are available: * [C# (with Visual Studio)](./dotnet-visual-studio) * [Clojure](./clojure) * [Common Lisp](./common-lisp) + * [Dart](./dart) * [Elixir](./elixir) * [Erlang](./erlang) * [Go](./go) From 7e766f55b2a2f73032ba214679b36ccfcb50a177 Mon Sep 17 00:00:00 2001 From: Jason Marquette <1342427+jasonmarquette@users.noreply.github.com> Date: Thu, 3 Jan 2019 09:13:22 -0600 Subject: [PATCH 111/659] Update receive.php Adding close tag. --- php/receive.php | 1 + 1 file changed, 1 insertion(+) diff --git a/php/receive.php b/php/receive.php index 047617ea..98ea0552 100644 --- a/php/receive.php +++ b/php/receive.php @@ -22,3 +22,4 @@ $channel->close(); $connection->close(); +?> From e1322a05712f3c9750d089347ea57a33e14efc3c Mon Sep 17 00:00:00 2001 From: Jason Marquette <1342427+jasonmarquette@users.noreply.github.com> Date: Thu, 3 Jan 2019 09:17:33 -0600 Subject: [PATCH 112/659] update send.php Adding close tag. --- php/send.php | 1 + 1 file changed, 1 insertion(+) diff --git a/php/send.php b/php/send.php index 00c42b3a..2de98a15 100644 --- a/php/send.php +++ b/php/send.php @@ -16,3 +16,4 @@ $channel->close(); $connection->close(); +?> From af72570d58c4fd0a77b2a58b48fcfbaba81c9d09 Mon Sep 17 00:00:00 2001 From: Jason Marquette <1342427+jasonmarquette@users.noreply.github.com> Date: Fri, 4 Jan 2019 11:28:32 -0600 Subject: [PATCH 113/659] adding close tag just adding close tag --- php/emit_log_topic.php | 1 + 1 file changed, 1 insertion(+) diff --git a/php/emit_log_topic.php b/php/emit_log_topic.php index c39e2ff2..14899466 100644 --- a/php/emit_log_topic.php +++ b/php/emit_log_topic.php @@ -23,3 +23,4 @@ $channel->close(); $connection->close(); +?> From 816cf60f35410bfe234cf1292382ee7f8aba5aac Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 4 Jan 2019 21:19:31 +0300 Subject: [PATCH 114/659] Add more missing closing tags, references #198 --- php/emit_log.php | 1 + php/emit_log_direct.php | 1 + php/new_task.php | 1 + php/receive_logs.php | 1 + php/receive_logs_direct.php | 1 + php/receive_logs_topic.php | 1 + php/rpc_client.php | 1 + php/rpc_server.php | 1 + php/worker.php | 1 + 9 files changed, 9 insertions(+) diff --git a/php/emit_log.php b/php/emit_log.php index aafcd2d5..30002ccd 100644 --- a/php/emit_log.php +++ b/php/emit_log.php @@ -21,3 +21,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/emit_log_direct.php b/php/emit_log_direct.php index e68d662f..0288d7e8 100644 --- a/php/emit_log_direct.php +++ b/php/emit_log_direct.php @@ -24,3 +24,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/new_task.php b/php/new_task.php index 7be98db3..06f5f5cc 100644 --- a/php/new_task.php +++ b/php/new_task.php @@ -24,3 +24,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/receive_logs.php b/php/receive_logs.php index 34e3a257..8a5c8cb6 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -26,3 +26,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index a93547bf..bbd59d9e 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -34,3 +34,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index 22266270..104cae12 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -34,3 +34,4 @@ $channel->close(); $connection->close(); +?> diff --git a/php/rpc_client.php b/php/rpc_client.php index 8799c4f2..08f0b85c 100644 --- a/php/rpc_client.php +++ b/php/rpc_client.php @@ -72,3 +72,4 @@ public function call($n) $fibonacci_rpc = new FibonacciRpcClient(); $response = $fibonacci_rpc->call(30); echo ' [.] Got ', $response, "\n"; +?> diff --git a/php/rpc_server.php b/php/rpc_server.php index c8a5b0f8..613a3908 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -49,3 +49,4 @@ function fib($n) $channel->close(); $connection->close(); +?> diff --git a/php/worker.php b/php/worker.php index 7f425a23..3dac06b8 100644 --- a/php/worker.php +++ b/php/worker.php @@ -26,3 +26,4 @@ $channel->close(); $connection->close(); +?> From 4fd299ea4259c545756d1868d27bb46b09664261 Mon Sep 17 00:00:00 2001 From: "Mathew P. Jones" Date: Mon, 7 Jan 2019 11:59:18 +0900 Subject: [PATCH 115/659] Update README.md Fix a command error, missing a `ruby` keyword. --- ruby/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/README.md b/ruby/README.md index 92192d83..2b926d7e 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -19,7 +19,7 @@ bundle install To run [tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-ruby.html): ``` sh -bundle exec send.rb +bundle exec ruby send.rb bundle exec ruby receive.rb ``` From 8d47623f52de459ac4ea0155ba207e397b005ad7 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 7 Feb 2019 14:56:43 +0100 Subject: [PATCH 116/659] Auto-ack for rpc-client in PHP Auto-ack for rpc-client in PHP as for other tutorials in other languages. --- php/rpc_client.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/rpc_client.php b/php/rpc_client.php index 08f0b85c..857c836b 100644 --- a/php/rpc_client.php +++ b/php/rpc_client.php @@ -32,7 +32,7 @@ public function __construct() $this->callback_queue, '', false, - false, + true, false, false, array( From 8d392f4772ee0dc439d5d32473ca817bc0723a74 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Mon, 11 Feb 2019 09:11:43 -0800 Subject: [PATCH 117/659] Update for Pika 1.0.0, yapf formatting --- .gitignore | 1 + python/README.md | 4 ++-- python/emit_log.py | 11 ++++------- python/emit_log_direct.py | 12 +++++------- python/emit_log_topic.py | 12 +++++------- python/new_task.py | 17 +++++++++-------- python/receive.py | 12 ++++++------ python/receive_logs.py | 19 +++++++++---------- python/receive_logs_direct.py | 21 ++++++++++----------- python/receive_logs_topic.py | 21 ++++++++++----------- python/rpc_client.py | 30 ++++++++++++++++++------------ python/rpc_server.py | 13 ++++++++----- python/send.py | 9 +++------ python/worker.py | 11 ++++++----- 14 files changed, 96 insertions(+), 97 deletions(-) diff --git a/.gitignore b/.gitignore index 2b448449..3a5fb830 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ target/ *.log .packages +.python-version diff --git a/python/README.md b/python/README.md index a607520a..c60cc35c 100644 --- a/python/README.md +++ b/python/README.md @@ -7,9 +7,9 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -To run this code you need to install the `pika` package version 0.10.0 or later. To install it, run +To run this code you need to install the `pika` package version `1.0.0` or later. To install it, run - pip install pika==0.11.0 + pip install pika You may first need to run diff --git a/python/emit_log.py b/python/emit_log.py index 1d7a1c85..4cb66d85 100755 --- a/python/emit_log.py +++ b/python/emit_log.py @@ -2,16 +2,13 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='logs', - exchange_type='fanout') +channel.exchange_declare(exchange='logs', exchange_type='fanout') message = ' '.join(sys.argv[1:]) or "info: Hello World!" -channel.basic_publish(exchange='logs', - routing_key='', - body=message) +channel.basic_publish(exchange='logs', routing_key='', body=message) print(" [x] Sent %r" % message) connection.close() diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index 32b474b3..802ef09a 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -2,17 +2,15 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='direct_logs', - exchange_type='direct') +channel.exchange_declare(exchange='direct_logs', exchange_type='direct') severity = sys.argv[1] if len(sys.argv) > 1 else 'info' message = ' '.join(sys.argv[2:]) or 'Hello World!' -channel.basic_publish(exchange='direct_logs', - routing_key=severity, - body=message) +channel.basic_publish( + exchange='direct_logs', routing_key=severity, body=message) print(" [x] Sent %r:%r" % (severity, message)) connection.close() diff --git a/python/emit_log_topic.py b/python/emit_log_topic.py index 5161053f..e6c4b929 100755 --- a/python/emit_log_topic.py +++ b/python/emit_log_topic.py @@ -2,17 +2,15 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='topic_logs', - exchange_type='topic') +channel.exchange_declare(exchange='topic_logs', exchange_type='topic') routing_key = sys.argv[1] if len(sys.argv) > 2 else 'anonymous.info' message = ' '.join(sys.argv[2:]) or 'Hello World!' -channel.basic_publish(exchange='topic_logs', - routing_key=routing_key, - body=message) +channel.basic_publish( + exchange='topic_logs', routing_key=routing_key, body=message) print(" [x] Sent %r:%r" % (routing_key, message)) connection.close() diff --git a/python/new_task.py b/python/new_task.py index 2193d63a..d1e4fe0e 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -2,18 +2,19 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='task_queue', durable=True) message = ' '.join(sys.argv[1:]) or "Hello World!" -channel.basic_publish(exchange='', - routing_key='task_queue', - body=message, - properties=pika.BasicProperties( - delivery_mode = 2, # make message persistent - )) +channel.basic_publish( + exchange='', + routing_key='task_queue', + body=message, + properties=pika.BasicProperties( + delivery_mode=2, # make message persistent + )) print(" [x] Sent %r" % message) connection.close() diff --git a/python/receive.py b/python/receive.py index f7d1d2dd..56754462 100755 --- a/python/receive.py +++ b/python/receive.py @@ -1,19 +1,19 @@ #!/usr/bin/env python import pika -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() - channel.queue_declare(queue='hello') + def callback(ch, method, properties, body): print(" [x] Received %r" % body) -channel.basic_consume(callback, - queue='hello', - no_ack=True) + +channel.basic_consume( + queue='hello', on_message_callback=callback, auto_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() diff --git a/python/receive_logs.py b/python/receive_logs.py index 41808021..fd92f358 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -1,26 +1,25 @@ #!/usr/bin/env python import pika -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='logs', - exchange_type='fanout') +channel.exchange_declare(exchange='logs', exchange_type='fanout') -result = channel.queue_declare(exclusive=True) +result = channel.queue_declare('', exclusive=True) queue_name = result.method.queue -channel.queue_bind(exchange='logs', - queue=queue_name) +channel.queue_bind(exchange='logs', queue=queue_name) print(' [*] Waiting for logs. To exit press CTRL+C') + def callback(ch, method, properties, body): print(" [x] %r" % body) -channel.basic_consume(callback, - queue=queue_name, - no_ack=True) + +channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) channel.start_consuming() diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index cec68d4b..25a30649 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -2,14 +2,13 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='direct_logs', - exchange_type='direct') +channel.exchange_declare(exchange='direct_logs', exchange_type='direct') -result = channel.queue_declare(exclusive=True) +result = channel.queue_declare('', exclusive=True) queue_name = result.method.queue severities = sys.argv[1:] @@ -18,17 +17,17 @@ sys.exit(1) for severity in severities: - channel.queue_bind(exchange='direct_logs', - queue=queue_name, - routing_key=severity) + channel.queue_bind( + exchange='direct_logs', queue=queue_name, routing_key=severity) print(' [*] Waiting for logs. To exit press CTRL+C') + def callback(ch, method, properties, body): print(" [x] %r:%r" % (method.routing_key, body)) -channel.basic_consume(callback, - queue=queue_name, - no_ack=True) + +channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) channel.start_consuming() diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index 05abcefe..bb474201 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -2,14 +2,13 @@ import pika import sys -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() -channel.exchange_declare(exchange='topic_logs', - exchange_type='topic') +channel.exchange_declare(exchange='topic_logs', exchange_type='topic') -result = channel.queue_declare(exclusive=True) +result = channel.queue_declare('', exclusive=True) queue_name = result.method.queue binding_keys = sys.argv[1:] @@ -18,17 +17,17 @@ sys.exit(1) for binding_key in binding_keys: - channel.queue_bind(exchange='topic_logs', - queue=queue_name, - routing_key=binding_key) + channel.queue_bind( + exchange='topic_logs', queue=queue_name, routing_key=binding_key) print(' [*] Waiting for logs. To exit press CTRL+C') + def callback(ch, method, properties, body): print(" [x] %r:%r" % (method.routing_key, body)) -channel.basic_consume(callback, - queue=queue_name, - no_ack=True) + +channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) channel.start_consuming() diff --git a/python/rpc_client.py b/python/rpc_client.py index bf8e1e75..4b47c409 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -2,18 +2,22 @@ import pika import uuid + class FibonacciRpcClient(object): + def __init__(self): - self.connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) + self.connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) self.channel = self.connection.channel() - result = self.channel.queue_declare(exclusive=True) + result = self.channel.queue_declare('', exclusive=True) self.callback_queue = result.method.queue - self.channel.basic_consume(self.on_response, no_ack=True, - queue=self.callback_queue) + self.channel.basic_consume( + queue=self.callback_queue, + on_message_callback=self.on_response, + auto_ack=True) def on_response(self, ch, method, props, body): if self.corr_id == props.correlation_id: @@ -22,17 +26,19 @@ def on_response(self, ch, method, props, body): def call(self, n): self.response = None self.corr_id = str(uuid.uuid4()) - self.channel.basic_publish(exchange='', - routing_key='rpc_queue', - properties=pika.BasicProperties( - reply_to = self.callback_queue, - correlation_id = self.corr_id, - ), - body=str(n)) + self.channel.basic_publish( + exchange='', + routing_key='rpc_queue', + properties=pika.BasicProperties( + reply_to=self.callback_queue, + correlation_id=self.corr_id, + ), + body=str(n)) while self.response is None: self.connection.process_data_events() return int(self.response) + fibonacci_rpc = FibonacciRpcClient() print(" [x] Requesting fib(30)") diff --git a/python/rpc_server.py b/python/rpc_server.py index bff5ab91..d5eb4ec3 100755 --- a/python/rpc_server.py +++ b/python/rpc_server.py @@ -1,20 +1,22 @@ #!/usr/bin/env python import pika -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='rpc_queue') + def fib(n): if n == 0: return 0 elif n == 1: return 1 else: - return fib(n-1) + fib(n-2) + return fib(n - 1) + fib(n - 2) + def on_request(ch, method, props, body): n = int(body) @@ -27,10 +29,11 @@ def on_request(ch, method, props, body): properties=pika.BasicProperties(correlation_id = \ props.correlation_id), body=str(response)) - ch.basic_ack(delivery_tag = method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) + channel.basic_qos(prefetch_count=1) -channel.basic_consume(on_request, queue='rpc_queue') +channel.basic_consume(queue='rpc_queue', on_message_callback=on_request) print(" [x] Awaiting RPC requests") channel.start_consuming() diff --git a/python/send.py b/python/send.py index 24332406..0ebbf696 100755 --- a/python/send.py +++ b/python/send.py @@ -1,15 +1,12 @@ #!/usr/bin/env python import pika -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() - channel.queue_declare(queue='hello') -channel.basic_publish(exchange='', - routing_key='hello', - body='Hello World!') +channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") connection.close() diff --git a/python/worker.py b/python/worker.py index 5b26e214..55f6adac 100755 --- a/python/worker.py +++ b/python/worker.py @@ -2,21 +2,22 @@ import pika import time -connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost')) +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='task_queue', durable=True) print(' [*] Waiting for messages. To exit press CTRL+C') + def callback(ch, method, properties, body): print(" [x] Received %r" % body) time.sleep(body.count(b'.')) print(" [x] Done") - ch.basic_ack(delivery_tag = method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) + channel.basic_qos(prefetch_count=1) -channel.basic_consume(callback, - queue='task_queue') +channel.basic_consume(queue='task_queue', on_message_callback=callback) channel.start_consuming() From 6be7cfebf9c7af378286e75bbe7ca15cf664793d Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 27 Feb 2019 04:38:02 +0300 Subject: [PATCH 118/659] Bunny: warn against subscribe(block: true) It was never meant to be used outside of tutorials but unfortunately some do just that. --- ruby/receive.rb | 2 ++ ruby/receive_logs.rb | 2 ++ ruby/receive_logs_direct.rb | 2 ++ ruby/receive_logs_topic.rb | 2 ++ ruby/rpc_server.rb | 2 ++ ruby/worker.rb | 2 ++ 6 files changed, 12 insertions(+) diff --git a/ruby/receive.rb b/ruby/receive.rb index 684c2c2b..fa24e62a 100644 --- a/ruby/receive.rb +++ b/ruby/receive.rb @@ -9,6 +9,8 @@ begin puts ' [*] Waiting for messages. To exit press CTRL+C' + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(block: true) do |_delivery_info, _properties, body| puts " [x] Received #{body}" end diff --git a/ruby/receive_logs.rb b/ruby/receive_logs.rb index 4290020e..34062704 100644 --- a/ruby/receive_logs.rb +++ b/ruby/receive_logs.rb @@ -14,6 +14,8 @@ puts ' [*] Waiting for logs. To exit press CTRL+C' begin + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(block: true) do |_delivery_info, _properties, body| puts " [x] #{body}" end diff --git a/ruby/receive_logs_direct.rb b/ruby/receive_logs_direct.rb index da2ebbce..913b5fbf 100644 --- a/ruby/receive_logs_direct.rb +++ b/ruby/receive_logs_direct.rb @@ -17,6 +17,8 @@ puts ' [*] Waiting for logs. To exit press CTRL+C' begin + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(block: true) do |delivery_info, _properties, body| puts " [x] #{delivery_info.routing_key}:#{body}" end diff --git a/ruby/receive_logs_topic.rb b/ruby/receive_logs_topic.rb index 1028624d..ea8496a8 100644 --- a/ruby/receive_logs_topic.rb +++ b/ruby/receive_logs_topic.rb @@ -17,6 +17,8 @@ puts ' [*] Waiting for logs. To exit press CTRL+C' begin + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(block: true) do |delivery_info, _properties, body| puts " [x] #{delivery_info.routing_key}:#{body}" end diff --git a/ruby/rpc_server.rb b/ruby/rpc_server.rb index 0f957084..99f1610e 100644 --- a/ruby/rpc_server.rb +++ b/ruby/rpc_server.rb @@ -24,6 +24,8 @@ def stop attr_reader :channel, :exchange, :queue, :connection def subscribe_to_queue + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(block: true) do |_delivery_info, properties, payload| result = fibonacci(payload.to_i) diff --git a/ruby/worker.rb b/ruby/worker.rb index fc3748f7..7911bd34 100644 --- a/ruby/worker.rb +++ b/ruby/worker.rb @@ -11,6 +11,8 @@ puts ' [*] Waiting for messages. To exit press CTRL+C' begin + # block: true is only used to keep the main thread + # alive. Please avoid using it in real world applications. queue.subscribe(manual_ack: true, block: true) do |delivery_info, _properties, body| puts " [x] Received '#{body}'" # imitate some work From bd37209d16f9c39132d400e8c606af771afca01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Chavarr=C3=ADa?= Date: Fri, 1 Mar 2019 11:08:46 +0100 Subject: [PATCH 119/659] Update Elixir dependency version: AMQP --- elixir/mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elixir/mix.exs b/elixir/mix.exs index e6ac1b0f..e3b725c7 100644 --- a/elixir/mix.exs +++ b/elixir/mix.exs @@ -28,7 +28,7 @@ defmodule RabbitmqTutorials.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:amqp, "~> 1.0"}, + {:amqp, "~> 1.1"}, ] end end From bd7ae7f25acf4ef7384209d4b0a374a267597bca Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 8 Mar 2019 16:02:05 -0800 Subject: [PATCH 120/659] Add Makefile and update code to make Erlang samples easier to run --- erlang/.gitignore | 2 + erlang/Makefile | 5 + erlang/README.md | 13 +- erlang/emit_log.erl | 2 +- erlang/emit_log_direct.erl | 2 +- erlang/emit_log_topic.erl | 2 +- erlang/erlang.mk | 7575 ++++++++++++++++++++++++++++++++ erlang/new_task.erl | 2 +- erlang/receive.erl | 15 +- erlang/receive_logs.erl | 2 +- erlang/receive_logs_direct.erl | 2 +- erlang/receive_logs_topic.erl | 2 +- erlang/send.erl | 2 +- erlang/worker.erl | 2 +- 14 files changed, 7599 insertions(+), 29 deletions(-) create mode 100644 erlang/.gitignore create mode 100644 erlang/Makefile create mode 100644 erlang/erlang.mk diff --git a/erlang/.gitignore b/erlang/.gitignore new file mode 100644 index 00000000..1148a695 --- /dev/null +++ b/erlang/.gitignore @@ -0,0 +1,2 @@ +.erlang.mk/ +deps/ diff --git a/erlang/Makefile b/erlang/Makefile new file mode 100644 index 00000000..ca516084 --- /dev/null +++ b/erlang/Makefile @@ -0,0 +1,5 @@ +DEPS = amqp_client + +dep_amqp_client = hex 3.7.13 + +include erlang.mk diff --git a/erlang/README.md b/erlang/README.md index 666a4121..da5bf681 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -17,18 +17,7 @@ using apt: You need Erlang Client binaries: - wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/rabbit_common-3.6.14.ez - unzip rabbit_common-3.6.14.ez - ln -s rabbit_common-3.6.14 rabbit_common - - wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/amqp_client-3.6.14.ez - unzip amqp_client-3.6.14.ez - ln -s amqp_client-3.6.14 amqp_client - - wget https://www.rabbitmq.com/releases/rabbitmq-erlang-client/v3.6.14/recon-2.3.2.ez - unzip recon-2.3.2.ez - ln -s recon-2.3.2 recon - + make deps ## Code diff --git a/erlang/emit_log.erl b/erlang/emit_log.erl index 2c29e00d..2b41495c 100755 --- a/erlang/emit_log.erl +++ b/erlang/emit_log.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_direct.erl b/erlang/emit_log_direct.erl index 721e984f..c1a24ba9 100755 --- a/erlang/emit_log_direct.erl +++ b/erlang/emit_log_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_topic.erl b/erlang/emit_log_topic.erl index 4fcdd15a..1edc0fe0 100755 --- a/erlang/emit_log_topic.erl +++ b/erlang/emit_log_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/erlang.mk b/erlang/erlang.mk new file mode 100644 index 00000000..227477b1 --- /dev/null +++ b/erlang/erlang.mk @@ -0,0 +1,7575 @@ +# Copyright (c) 2013-2016, Loïc Hoguin +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +.PHONY: all app apps deps search rel relup docs install-docs check tests clean distclean help erlang-mk + +ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) +export ERLANG_MK_FILENAME + +ERLANG_MK_VERSION = fb87e18 +ERLANG_MK_WITHOUT = + +# Make 3.81 and 3.82 are deprecated. + +ifeq ($(MAKELEVEL)$(MAKE_VERSION),03.81) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +ifeq ($(MAKELEVEL)$(MAKE_VERSION),03.82) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +# Core configuration. + +PROJECT ?= $(notdir $(CURDIR)) +PROJECT := $(strip $(PROJECT)) + +PROJECT_VERSION ?= rolling +PROJECT_MOD ?= $(PROJECT)_app +PROJECT_ENV ?= [] + +# Verbosity. + +V ?= 0 + +verbose_0 = @ +verbose_2 = set -x; +verbose = $(verbose_$(V)) + +ifeq ($(V),3) +SHELL := $(SHELL) -x +endif + +gen_verbose_0 = @echo " GEN " $@; +gen_verbose_2 = set -x; +gen_verbose = $(gen_verbose_$(V)) + +gen_verbose_esc_0 = @echo " GEN " $$@; +gen_verbose_esc_2 = set -x; +gen_verbose_esc = $(gen_verbose_esc_$(V)) + +# Temporary files directory. + +ERLANG_MK_TMP ?= $(CURDIR)/.erlang.mk +export ERLANG_MK_TMP + +# "erl" command. + +ERL = erl +A0 -noinput -boot start_clean + +# Platform detection. + +ifeq ($(PLATFORM),) +UNAME_S := $(shell uname -s) + +ifeq ($(UNAME_S),Linux) +PLATFORM = linux +else ifeq ($(UNAME_S),Darwin) +PLATFORM = darwin +else ifeq ($(UNAME_S),SunOS) +PLATFORM = solaris +else ifeq ($(UNAME_S),GNU) +PLATFORM = gnu +else ifeq ($(UNAME_S),FreeBSD) +PLATFORM = freebsd +else ifeq ($(UNAME_S),NetBSD) +PLATFORM = netbsd +else ifeq ($(UNAME_S),OpenBSD) +PLATFORM = openbsd +else ifeq ($(UNAME_S),DragonFly) +PLATFORM = dragonfly +else ifeq ($(shell uname -o),Msys) +PLATFORM = msys2 +else +$(error Unable to detect platform. Please open a ticket with the output of uname -a.) +endif + +export PLATFORM +endif + +# Core targets. + +all:: deps app rel + +# Noop to avoid a Make warning when there's nothing to do. +rel:: + $(verbose) : + +relup:: deps app + +check:: tests + +clean:: clean-crashdump + +clean-crashdump: +ifneq ($(wildcard erl_crash.dump),) + $(gen_verbose) rm -f erl_crash.dump +endif + +distclean:: clean distclean-tmp + +$(ERLANG_MK_TMP): + $(verbose) mkdir -p $(ERLANG_MK_TMP) + +distclean-tmp: + $(gen_verbose) rm -rf $(ERLANG_MK_TMP) + +help:: + $(verbose) printf "%s\n" \ + "erlang.mk (version $(ERLANG_MK_VERSION)) is distributed under the terms of the ISC License." \ + "Copyright (c) 2013-2016 Loïc Hoguin " \ + "" \ + "Usage: [V=1] $(MAKE) [target]..." \ + "" \ + "Core targets:" \ + " all Run deps, app and rel targets in that order" \ + " app Compile the project" \ + " deps Fetch dependencies (if needed) and compile them" \ + " fetch-deps Fetch dependencies recursively (if needed) without compiling them" \ + " list-deps List dependencies recursively on stdout" \ + " search q=... Search for a package in the built-in index" \ + " rel Build a release for this project, if applicable" \ + " docs Build the documentation for this project" \ + " install-docs Install the man pages for this project" \ + " check Compile and run all tests and analysis for this project" \ + " tests Run the tests for this project" \ + " clean Delete temporary and output files from most targets" \ + " distclean Delete all temporary and output files" \ + " help Display this help and exit" \ + " erlang-mk Update erlang.mk to the latest version" + +# Core functions. + +empty := +space := $(empty) $(empty) +tab := $(empty) $(empty) +comma := , + +define newline + + +endef + +define comma_list +$(subst $(space),$(comma),$(strip $(1))) +endef + +define escape_dquotes +$(subst ",\",$1) +endef + +# Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy. +define erlang +$(ERL) $2 -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(call escape_dquotes,$1))" -- erlang.mk +endef + +ifeq ($(PLATFORM),msys2) +core_native_path = $(subst \,\\\\,$(shell cygpath -w $1)) +else +core_native_path = $1 +endif + +core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$1) $2 + +core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) + +# We skip files that contain spaces because they end up causing issues. +core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2) | grep -v " ")) + +core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) + +core_ls = $(filter-out $(1),$(shell echo $(1))) + +# @todo Use a solution that does not require using perl. +core_relpath = $(shell perl -e 'use File::Spec; print File::Spec->abs2rel(@ARGV) . "\n"' $1 $2) + +define core_render + printf -- '$(subst $(newline),\n,$(subst %,%%,$(subst ','\'',$(subst $(tab),$(WS),$(call $(1))))))\n' > $(2) +endef + +# Automated update. + +ERLANG_MK_REPO ?= https://github.com/ninenines/erlang.mk +ERLANG_MK_COMMIT ?= +ERLANG_MK_BUILD_CONFIG ?= build.config +ERLANG_MK_BUILD_DIR ?= .erlang.mk.build + +erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT) +erlang-mk: +ifdef ERLANG_MK_COMMIT + $(verbose) git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) + $(verbose) cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT) +else + $(verbose) git clone --depth 1 $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) +endif + $(verbose) if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi + $(gen_verbose) $(MAKE) --no-print-directory -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))' UPGRADE=1 + $(verbose) cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk + $(verbose) rm -rf $(ERLANG_MK_BUILD_DIR) + $(verbose) rm -rf $(ERLANG_MK_TMP) + +# The erlang.mk package index is bundled in the default erlang.mk build. +# Search for the string "copyright" to skip to the rest of the code. + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-kerl + +KERL_INSTALL_DIR ?= $(HOME)/erlang + +ifeq ($(strip $(KERL)),) +KERL := $(ERLANG_MK_TMP)/kerl/kerl +endif + +KERL_DIR = $(ERLANG_MK_TMP)/kerl + +export KERL + +KERL_GIT ?= https://github.com/kerl/kerl +KERL_COMMIT ?= master + +KERL_MAKEFLAGS ?= + +OTP_GIT ?= https://github.com/erlang/otp + +define kerl_otp_target +$(KERL_INSTALL_DIR)/$(1): $(KERL) + $(verbose) if [ ! -d $$@ ]; then \ + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1); \ + $(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1); \ + fi +endef + +define kerl_hipe_target +$(KERL_INSTALL_DIR)/$1-native: $(KERL) + $(verbose) if [ ! -d $$@ ]; then \ + KERL_CONFIGURE_OPTIONS=--enable-native-libs \ + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native; \ + $(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native; \ + fi +endef + +$(KERL): $(KERL_DIR) + +$(KERL_DIR): | $(ERLANG_MK_TMP) + $(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl + $(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT) + $(verbose) chmod +x $(KERL) + +distclean:: distclean-kerl + +distclean-kerl: + $(gen_verbose) rm -rf $(KERL_DIR) + +# Allow users to select which version of Erlang/OTP to use for a project. + +ifneq ($(strip $(LATEST_ERLANG_OTP)),) +ERLANG_OTP := $(notdir $(lastword $(sort $(filter-out $(KERL_INSTALL_DIR)/OTP_R%,\ + $(filter-out %-rc1 %-rc2 %-rc3,$(wildcard $(KERL_INSTALL_DIR)/*[^-native])))))) +endif + +ERLANG_OTP ?= +ERLANG_HIPE ?= + +# Use kerl to enforce a specific Erlang/OTP version for a project. +ifneq ($(strip $(ERLANG_OTP)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_otp_target,$(ERLANG_OTP))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),) +$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2) +endif + +else +# Same for a HiPE enabled VM. +ifneq ($(strip $(ERLANG_HIPE)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_hipe_target,$(ERLANG_HIPE))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native)$(BUILD_ERLANG_OTP),) +$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2) +endif + +endif +endif + +PACKAGES += aberth +pkg_aberth_name = aberth +pkg_aberth_description = Generic BERT-RPC server in Erlang +pkg_aberth_homepage = https://github.com/a13x/aberth +pkg_aberth_fetch = git +pkg_aberth_repo = https://github.com/a13x/aberth +pkg_aberth_commit = master + +PACKAGES += active +pkg_active_name = active +pkg_active_description = Active development for Erlang: rebuild and reload source/binary files while the VM is running +pkg_active_homepage = https://github.com/proger/active +pkg_active_fetch = git +pkg_active_repo = https://github.com/proger/active +pkg_active_commit = master + +PACKAGES += actordb_core +pkg_actordb_core_name = actordb_core +pkg_actordb_core_description = ActorDB main source +pkg_actordb_core_homepage = http://www.actordb.com/ +pkg_actordb_core_fetch = git +pkg_actordb_core_repo = https://github.com/biokoda/actordb_core +pkg_actordb_core_commit = master + +PACKAGES += actordb_thrift +pkg_actordb_thrift_name = actordb_thrift +pkg_actordb_thrift_description = Thrift API for ActorDB +pkg_actordb_thrift_homepage = http://www.actordb.com/ +pkg_actordb_thrift_fetch = git +pkg_actordb_thrift_repo = https://github.com/biokoda/actordb_thrift +pkg_actordb_thrift_commit = master + +PACKAGES += aleppo +pkg_aleppo_name = aleppo +pkg_aleppo_description = Alternative Erlang Pre-Processor +pkg_aleppo_homepage = https://github.com/ErlyORM/aleppo +pkg_aleppo_fetch = git +pkg_aleppo_repo = https://github.com/ErlyORM/aleppo +pkg_aleppo_commit = master + +PACKAGES += alog +pkg_alog_name = alog +pkg_alog_description = Simply the best logging framework for Erlang +pkg_alog_homepage = https://github.com/siberian-fast-food/alogger +pkg_alog_fetch = git +pkg_alog_repo = https://github.com/siberian-fast-food/alogger +pkg_alog_commit = master + +PACKAGES += amqp_client +pkg_amqp_client_name = amqp_client +pkg_amqp_client_description = RabbitMQ Erlang AMQP client +pkg_amqp_client_homepage = https://www.rabbitmq.com/erlang-client-user-guide.html +pkg_amqp_client_fetch = git +pkg_amqp_client_repo = https://github.com/rabbitmq/rabbitmq-erlang-client.git +pkg_amqp_client_commit = master + +PACKAGES += annotations +pkg_annotations_name = annotations +pkg_annotations_description = Simple code instrumentation utilities +pkg_annotations_homepage = https://github.com/hyperthunk/annotations +pkg_annotations_fetch = git +pkg_annotations_repo = https://github.com/hyperthunk/annotations +pkg_annotations_commit = master + +PACKAGES += antidote +pkg_antidote_name = antidote +pkg_antidote_description = Large-scale computation without synchronisation +pkg_antidote_homepage = https://syncfree.lip6.fr/ +pkg_antidote_fetch = git +pkg_antidote_repo = https://github.com/SyncFree/antidote +pkg_antidote_commit = master + +PACKAGES += apns +pkg_apns_name = apns +pkg_apns_description = Apple Push Notification Server for Erlang +pkg_apns_homepage = http://inaka.github.com/apns4erl +pkg_apns_fetch = git +pkg_apns_repo = https://github.com/inaka/apns4erl +pkg_apns_commit = master + +PACKAGES += asciideck +pkg_asciideck_name = asciideck +pkg_asciideck_description = Asciidoc for Erlang. +pkg_asciideck_homepage = https://ninenines.eu +pkg_asciideck_fetch = git +pkg_asciideck_repo = https://github.com/ninenines/asciideck +pkg_asciideck_commit = master + +PACKAGES += azdht +pkg_azdht_name = azdht +pkg_azdht_description = Azureus Distributed Hash Table (DHT) in Erlang +pkg_azdht_homepage = https://github.com/arcusfelis/azdht +pkg_azdht_fetch = git +pkg_azdht_repo = https://github.com/arcusfelis/azdht +pkg_azdht_commit = master + +PACKAGES += backoff +pkg_backoff_name = backoff +pkg_backoff_description = Simple exponential backoffs in Erlang +pkg_backoff_homepage = https://github.com/ferd/backoff +pkg_backoff_fetch = git +pkg_backoff_repo = https://github.com/ferd/backoff +pkg_backoff_commit = master + +PACKAGES += barrel_tcp +pkg_barrel_tcp_name = barrel_tcp +pkg_barrel_tcp_description = barrel is a generic TCP acceptor pool with low latency in Erlang. +pkg_barrel_tcp_homepage = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_fetch = git +pkg_barrel_tcp_repo = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_commit = master + +PACKAGES += basho_bench +pkg_basho_bench_name = basho_bench +pkg_basho_bench_description = A load-generation and testing tool for basically whatever you can write a returning Erlang function for. +pkg_basho_bench_homepage = https://github.com/basho/basho_bench +pkg_basho_bench_fetch = git +pkg_basho_bench_repo = https://github.com/basho/basho_bench +pkg_basho_bench_commit = master + +PACKAGES += bcrypt +pkg_bcrypt_name = bcrypt +pkg_bcrypt_description = Bcrypt Erlang / C library +pkg_bcrypt_homepage = https://github.com/erlangpack/bcrypt +pkg_bcrypt_fetch = git +pkg_bcrypt_repo = https://github.com/erlangpack/bcrypt.git +pkg_bcrypt_commit = master + +PACKAGES += beam +pkg_beam_name = beam +pkg_beam_description = BEAM emulator written in Erlang +pkg_beam_homepage = https://github.com/tonyrog/beam +pkg_beam_fetch = git +pkg_beam_repo = https://github.com/tonyrog/beam +pkg_beam_commit = master + +PACKAGES += beanstalk +pkg_beanstalk_name = beanstalk +pkg_beanstalk_description = An Erlang client for beanstalkd +pkg_beanstalk_homepage = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_fetch = git +pkg_beanstalk_repo = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_commit = master + +PACKAGES += bear +pkg_bear_name = bear +pkg_bear_description = a set of statistics functions for erlang +pkg_bear_homepage = https://github.com/boundary/bear +pkg_bear_fetch = git +pkg_bear_repo = https://github.com/boundary/bear +pkg_bear_commit = master + +PACKAGES += bertconf +pkg_bertconf_name = bertconf +pkg_bertconf_description = Make ETS tables out of statc BERT files that are auto-reloaded +pkg_bertconf_homepage = https://github.com/ferd/bertconf +pkg_bertconf_fetch = git +pkg_bertconf_repo = https://github.com/ferd/bertconf +pkg_bertconf_commit = master + +PACKAGES += bifrost +pkg_bifrost_name = bifrost +pkg_bifrost_description = Erlang FTP Server Framework +pkg_bifrost_homepage = https://github.com/thorstadt/bifrost +pkg_bifrost_fetch = git +pkg_bifrost_repo = https://github.com/thorstadt/bifrost +pkg_bifrost_commit = master + +PACKAGES += binpp +pkg_binpp_name = binpp +pkg_binpp_description = Erlang Binary Pretty Printer +pkg_binpp_homepage = https://github.com/jtendo/binpp +pkg_binpp_fetch = git +pkg_binpp_repo = https://github.com/jtendo/binpp +pkg_binpp_commit = master + +PACKAGES += bisect +pkg_bisect_name = bisect +pkg_bisect_description = Ordered fixed-size binary dictionary in Erlang +pkg_bisect_homepage = https://github.com/knutin/bisect +pkg_bisect_fetch = git +pkg_bisect_repo = https://github.com/knutin/bisect +pkg_bisect_commit = master + +PACKAGES += bitcask +pkg_bitcask_name = bitcask +pkg_bitcask_description = because you need another a key/value storage engine +pkg_bitcask_homepage = https://github.com/basho/bitcask +pkg_bitcask_fetch = git +pkg_bitcask_repo = https://github.com/basho/bitcask +pkg_bitcask_commit = develop + +PACKAGES += bitstore +pkg_bitstore_name = bitstore +pkg_bitstore_description = A document based ontology development environment +pkg_bitstore_homepage = https://github.com/bdionne/bitstore +pkg_bitstore_fetch = git +pkg_bitstore_repo = https://github.com/bdionne/bitstore +pkg_bitstore_commit = master + +PACKAGES += bootstrap +pkg_bootstrap_name = bootstrap +pkg_bootstrap_description = A simple, yet powerful Erlang cluster bootstrapping application. +pkg_bootstrap_homepage = https://github.com/schlagert/bootstrap +pkg_bootstrap_fetch = git +pkg_bootstrap_repo = https://github.com/schlagert/bootstrap +pkg_bootstrap_commit = master + +PACKAGES += boss +pkg_boss_name = boss +pkg_boss_description = Erlang web MVC, now featuring Comet +pkg_boss_homepage = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_fetch = git +pkg_boss_repo = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_commit = master + +PACKAGES += boss_db +pkg_boss_db_name = boss_db +pkg_boss_db_description = BossDB: a sharded, caching, pooling, evented ORM for Erlang +pkg_boss_db_homepage = https://github.com/ErlyORM/boss_db +pkg_boss_db_fetch = git +pkg_boss_db_repo = https://github.com/ErlyORM/boss_db +pkg_boss_db_commit = master + +PACKAGES += brod +pkg_brod_name = brod +pkg_brod_description = Kafka client in Erlang +pkg_brod_homepage = https://github.com/klarna/brod +pkg_brod_fetch = git +pkg_brod_repo = https://github.com/klarna/brod.git +pkg_brod_commit = master + +PACKAGES += bson +pkg_bson_name = bson +pkg_bson_description = BSON documents in Erlang, see bsonspec.org +pkg_bson_homepage = https://github.com/comtihon/bson-erlang +pkg_bson_fetch = git +pkg_bson_repo = https://github.com/comtihon/bson-erlang +pkg_bson_commit = master + +PACKAGES += bullet +pkg_bullet_name = bullet +pkg_bullet_description = Simple, reliable, efficient streaming for Cowboy. +pkg_bullet_homepage = http://ninenines.eu +pkg_bullet_fetch = git +pkg_bullet_repo = https://github.com/ninenines/bullet +pkg_bullet_commit = master + +PACKAGES += cache +pkg_cache_name = cache +pkg_cache_description = Erlang in-memory cache +pkg_cache_homepage = https://github.com/fogfish/cache +pkg_cache_fetch = git +pkg_cache_repo = https://github.com/fogfish/cache +pkg_cache_commit = master + +PACKAGES += cake +pkg_cake_name = cake +pkg_cake_description = Really simple terminal colorization +pkg_cake_homepage = https://github.com/darach/cake-erl +pkg_cake_fetch = git +pkg_cake_repo = https://github.com/darach/cake-erl +pkg_cake_commit = master + +PACKAGES += carotene +pkg_carotene_name = carotene +pkg_carotene_description = Real-time server +pkg_carotene_homepage = https://github.com/carotene/carotene +pkg_carotene_fetch = git +pkg_carotene_repo = https://github.com/carotene/carotene +pkg_carotene_commit = master + +PACKAGES += cberl +pkg_cberl_name = cberl +pkg_cberl_description = NIF based Erlang bindings for Couchbase +pkg_cberl_homepage = https://github.com/chitika/cberl +pkg_cberl_fetch = git +pkg_cberl_repo = https://github.com/chitika/cberl +pkg_cberl_commit = master + +PACKAGES += cecho +pkg_cecho_name = cecho +pkg_cecho_description = An ncurses library for Erlang +pkg_cecho_homepage = https://github.com/mazenharake/cecho +pkg_cecho_fetch = git +pkg_cecho_repo = https://github.com/mazenharake/cecho +pkg_cecho_commit = master + +PACKAGES += cferl +pkg_cferl_name = cferl +pkg_cferl_description = Rackspace / Open Stack Cloud Files Erlang Client +pkg_cferl_homepage = https://github.com/ddossot/cferl +pkg_cferl_fetch = git +pkg_cferl_repo = https://github.com/ddossot/cferl +pkg_cferl_commit = master + +PACKAGES += chaos_monkey +pkg_chaos_monkey_name = chaos_monkey +pkg_chaos_monkey_description = This is The CHAOS MONKEY. It will kill your processes. +pkg_chaos_monkey_homepage = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_fetch = git +pkg_chaos_monkey_repo = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_commit = master + +PACKAGES += check_node +pkg_check_node_name = check_node +pkg_check_node_description = Nagios Scripts for monitoring Riak +pkg_check_node_homepage = https://github.com/basho-labs/riak_nagios +pkg_check_node_fetch = git +pkg_check_node_repo = https://github.com/basho-labs/riak_nagios +pkg_check_node_commit = master + +PACKAGES += chronos +pkg_chronos_name = chronos +pkg_chronos_description = Timer module for Erlang that makes it easy to abstact time out of the tests. +pkg_chronos_homepage = https://github.com/lehoff/chronos +pkg_chronos_fetch = git +pkg_chronos_repo = https://github.com/lehoff/chronos +pkg_chronos_commit = master + +PACKAGES += chumak +pkg_chumak_name = chumak +pkg_chumak_description = Pure Erlang implementation of ZeroMQ Message Transport Protocol. +pkg_chumak_homepage = http://choven.ca +pkg_chumak_fetch = git +pkg_chumak_repo = https://github.com/chovencorp/chumak +pkg_chumak_commit = master + +PACKAGES += cl +pkg_cl_name = cl +pkg_cl_description = OpenCL binding for Erlang +pkg_cl_homepage = https://github.com/tonyrog/cl +pkg_cl_fetch = git +pkg_cl_repo = https://github.com/tonyrog/cl +pkg_cl_commit = master + +PACKAGES += clique +pkg_clique_name = clique +pkg_clique_description = CLI Framework for Erlang +pkg_clique_homepage = https://github.com/basho/clique +pkg_clique_fetch = git +pkg_clique_repo = https://github.com/basho/clique +pkg_clique_commit = develop + +PACKAGES += cloudi_core +pkg_cloudi_core_name = cloudi_core +pkg_cloudi_core_description = CloudI internal service runtime +pkg_cloudi_core_homepage = http://cloudi.org/ +pkg_cloudi_core_fetch = git +pkg_cloudi_core_repo = https://github.com/CloudI/cloudi_core +pkg_cloudi_core_commit = master + +PACKAGES += cloudi_service_api_requests +pkg_cloudi_service_api_requests_name = cloudi_service_api_requests +pkg_cloudi_service_api_requests_description = CloudI Service API requests (JSON-RPC/Erlang-term support) +pkg_cloudi_service_api_requests_homepage = http://cloudi.org/ +pkg_cloudi_service_api_requests_fetch = git +pkg_cloudi_service_api_requests_repo = https://github.com/CloudI/cloudi_service_api_requests +pkg_cloudi_service_api_requests_commit = master + +PACKAGES += cloudi_service_db +pkg_cloudi_service_db_name = cloudi_service_db +pkg_cloudi_service_db_description = CloudI Database (in-memory/testing/generic) +pkg_cloudi_service_db_homepage = http://cloudi.org/ +pkg_cloudi_service_db_fetch = git +pkg_cloudi_service_db_repo = https://github.com/CloudI/cloudi_service_db +pkg_cloudi_service_db_commit = master + +PACKAGES += cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_name = cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_description = Cassandra CloudI Service +pkg_cloudi_service_db_cassandra_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_fetch = git +pkg_cloudi_service_db_cassandra_repo = https://github.com/CloudI/cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_commit = master + +PACKAGES += cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_name = cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_description = Cassandra CQL CloudI Service +pkg_cloudi_service_db_cassandra_cql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_cql_fetch = git +pkg_cloudi_service_db_cassandra_cql_repo = https://github.com/CloudI/cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_commit = master + +PACKAGES += cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_name = cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_description = CouchDB CloudI Service +pkg_cloudi_service_db_couchdb_homepage = http://cloudi.org/ +pkg_cloudi_service_db_couchdb_fetch = git +pkg_cloudi_service_db_couchdb_repo = https://github.com/CloudI/cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_commit = master + +PACKAGES += cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_name = cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_description = elasticsearch CloudI Service +pkg_cloudi_service_db_elasticsearch_homepage = http://cloudi.org/ +pkg_cloudi_service_db_elasticsearch_fetch = git +pkg_cloudi_service_db_elasticsearch_repo = https://github.com/CloudI/cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_commit = master + +PACKAGES += cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_name = cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_description = memcached CloudI Service +pkg_cloudi_service_db_memcached_homepage = http://cloudi.org/ +pkg_cloudi_service_db_memcached_fetch = git +pkg_cloudi_service_db_memcached_repo = https://github.com/CloudI/cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_commit = master + +PACKAGES += cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_name = cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_description = MySQL CloudI Service +pkg_cloudi_service_db_mysql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_mysql_fetch = git +pkg_cloudi_service_db_mysql_repo = https://github.com/CloudI/cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_commit = master + +PACKAGES += cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_name = cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_description = PostgreSQL CloudI Service +pkg_cloudi_service_db_pgsql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_pgsql_fetch = git +pkg_cloudi_service_db_pgsql_repo = https://github.com/CloudI/cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_commit = master + +PACKAGES += cloudi_service_db_riak +pkg_cloudi_service_db_riak_name = cloudi_service_db_riak +pkg_cloudi_service_db_riak_description = Riak CloudI Service +pkg_cloudi_service_db_riak_homepage = http://cloudi.org/ +pkg_cloudi_service_db_riak_fetch = git +pkg_cloudi_service_db_riak_repo = https://github.com/CloudI/cloudi_service_db_riak +pkg_cloudi_service_db_riak_commit = master + +PACKAGES += cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_name = cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_description = Tokyo Tyrant CloudI Service +pkg_cloudi_service_db_tokyotyrant_homepage = http://cloudi.org/ +pkg_cloudi_service_db_tokyotyrant_fetch = git +pkg_cloudi_service_db_tokyotyrant_repo = https://github.com/CloudI/cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_commit = master + +PACKAGES += cloudi_service_filesystem +pkg_cloudi_service_filesystem_name = cloudi_service_filesystem +pkg_cloudi_service_filesystem_description = Filesystem CloudI Service +pkg_cloudi_service_filesystem_homepage = http://cloudi.org/ +pkg_cloudi_service_filesystem_fetch = git +pkg_cloudi_service_filesystem_repo = https://github.com/CloudI/cloudi_service_filesystem +pkg_cloudi_service_filesystem_commit = master + +PACKAGES += cloudi_service_http_client +pkg_cloudi_service_http_client_name = cloudi_service_http_client +pkg_cloudi_service_http_client_description = HTTP client CloudI Service +pkg_cloudi_service_http_client_homepage = http://cloudi.org/ +pkg_cloudi_service_http_client_fetch = git +pkg_cloudi_service_http_client_repo = https://github.com/CloudI/cloudi_service_http_client +pkg_cloudi_service_http_client_commit = master + +PACKAGES += cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_name = cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_description = cowboy HTTP/HTTPS CloudI Service +pkg_cloudi_service_http_cowboy_homepage = http://cloudi.org/ +pkg_cloudi_service_http_cowboy_fetch = git +pkg_cloudi_service_http_cowboy_repo = https://github.com/CloudI/cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_commit = master + +PACKAGES += cloudi_service_http_elli +pkg_cloudi_service_http_elli_name = cloudi_service_http_elli +pkg_cloudi_service_http_elli_description = elli HTTP CloudI Service +pkg_cloudi_service_http_elli_homepage = http://cloudi.org/ +pkg_cloudi_service_http_elli_fetch = git +pkg_cloudi_service_http_elli_repo = https://github.com/CloudI/cloudi_service_http_elli +pkg_cloudi_service_http_elli_commit = master + +PACKAGES += cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_name = cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_description = Map/Reduce CloudI Service +pkg_cloudi_service_map_reduce_homepage = http://cloudi.org/ +pkg_cloudi_service_map_reduce_fetch = git +pkg_cloudi_service_map_reduce_repo = https://github.com/CloudI/cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_commit = master + +PACKAGES += cloudi_service_oauth1 +pkg_cloudi_service_oauth1_name = cloudi_service_oauth1 +pkg_cloudi_service_oauth1_description = OAuth v1.0 CloudI Service +pkg_cloudi_service_oauth1_homepage = http://cloudi.org/ +pkg_cloudi_service_oauth1_fetch = git +pkg_cloudi_service_oauth1_repo = https://github.com/CloudI/cloudi_service_oauth1 +pkg_cloudi_service_oauth1_commit = master + +PACKAGES += cloudi_service_queue +pkg_cloudi_service_queue_name = cloudi_service_queue +pkg_cloudi_service_queue_description = Persistent Queue Service +pkg_cloudi_service_queue_homepage = http://cloudi.org/ +pkg_cloudi_service_queue_fetch = git +pkg_cloudi_service_queue_repo = https://github.com/CloudI/cloudi_service_queue +pkg_cloudi_service_queue_commit = master + +PACKAGES += cloudi_service_quorum +pkg_cloudi_service_quorum_name = cloudi_service_quorum +pkg_cloudi_service_quorum_description = CloudI Quorum Service +pkg_cloudi_service_quorum_homepage = http://cloudi.org/ +pkg_cloudi_service_quorum_fetch = git +pkg_cloudi_service_quorum_repo = https://github.com/CloudI/cloudi_service_quorum +pkg_cloudi_service_quorum_commit = master + +PACKAGES += cloudi_service_router +pkg_cloudi_service_router_name = cloudi_service_router +pkg_cloudi_service_router_description = CloudI Router Service +pkg_cloudi_service_router_homepage = http://cloudi.org/ +pkg_cloudi_service_router_fetch = git +pkg_cloudi_service_router_repo = https://github.com/CloudI/cloudi_service_router +pkg_cloudi_service_router_commit = master + +PACKAGES += cloudi_service_tcp +pkg_cloudi_service_tcp_name = cloudi_service_tcp +pkg_cloudi_service_tcp_description = TCP CloudI Service +pkg_cloudi_service_tcp_homepage = http://cloudi.org/ +pkg_cloudi_service_tcp_fetch = git +pkg_cloudi_service_tcp_repo = https://github.com/CloudI/cloudi_service_tcp +pkg_cloudi_service_tcp_commit = master + +PACKAGES += cloudi_service_timers +pkg_cloudi_service_timers_name = cloudi_service_timers +pkg_cloudi_service_timers_description = Timers CloudI Service +pkg_cloudi_service_timers_homepage = http://cloudi.org/ +pkg_cloudi_service_timers_fetch = git +pkg_cloudi_service_timers_repo = https://github.com/CloudI/cloudi_service_timers +pkg_cloudi_service_timers_commit = master + +PACKAGES += cloudi_service_udp +pkg_cloudi_service_udp_name = cloudi_service_udp +pkg_cloudi_service_udp_description = UDP CloudI Service +pkg_cloudi_service_udp_homepage = http://cloudi.org/ +pkg_cloudi_service_udp_fetch = git +pkg_cloudi_service_udp_repo = https://github.com/CloudI/cloudi_service_udp +pkg_cloudi_service_udp_commit = master + +PACKAGES += cloudi_service_validate +pkg_cloudi_service_validate_name = cloudi_service_validate +pkg_cloudi_service_validate_description = CloudI Validate Service +pkg_cloudi_service_validate_homepage = http://cloudi.org/ +pkg_cloudi_service_validate_fetch = git +pkg_cloudi_service_validate_repo = https://github.com/CloudI/cloudi_service_validate +pkg_cloudi_service_validate_commit = master + +PACKAGES += cloudi_service_zeromq +pkg_cloudi_service_zeromq_name = cloudi_service_zeromq +pkg_cloudi_service_zeromq_description = ZeroMQ CloudI Service +pkg_cloudi_service_zeromq_homepage = http://cloudi.org/ +pkg_cloudi_service_zeromq_fetch = git +pkg_cloudi_service_zeromq_repo = https://github.com/CloudI/cloudi_service_zeromq +pkg_cloudi_service_zeromq_commit = master + +PACKAGES += cluster_info +pkg_cluster_info_name = cluster_info +pkg_cluster_info_description = Fork of Hibari's nifty cluster_info OTP app +pkg_cluster_info_homepage = https://github.com/basho/cluster_info +pkg_cluster_info_fetch = git +pkg_cluster_info_repo = https://github.com/basho/cluster_info +pkg_cluster_info_commit = master + +PACKAGES += color +pkg_color_name = color +pkg_color_description = ANSI colors for your Erlang +pkg_color_homepage = https://github.com/julianduque/erlang-color +pkg_color_fetch = git +pkg_color_repo = https://github.com/julianduque/erlang-color +pkg_color_commit = master + +PACKAGES += confetti +pkg_confetti_name = confetti +pkg_confetti_description = Erlang configuration provider / application:get_env/2 on steroids +pkg_confetti_homepage = https://github.com/jtendo/confetti +pkg_confetti_fetch = git +pkg_confetti_repo = https://github.com/jtendo/confetti +pkg_confetti_commit = master + +PACKAGES += couchbeam +pkg_couchbeam_name = couchbeam +pkg_couchbeam_description = Apache CouchDB client in Erlang +pkg_couchbeam_homepage = https://github.com/benoitc/couchbeam +pkg_couchbeam_fetch = git +pkg_couchbeam_repo = https://github.com/benoitc/couchbeam +pkg_couchbeam_commit = master + +PACKAGES += covertool +pkg_covertool_name = covertool +pkg_covertool_description = Tool to convert Erlang cover data files into Cobertura XML reports +pkg_covertool_homepage = https://github.com/idubrov/covertool +pkg_covertool_fetch = git +pkg_covertool_repo = https://github.com/idubrov/covertool +pkg_covertool_commit = master + +PACKAGES += cowboy +pkg_cowboy_name = cowboy +pkg_cowboy_description = Small, fast and modular HTTP server. +pkg_cowboy_homepage = http://ninenines.eu +pkg_cowboy_fetch = git +pkg_cowboy_repo = https://github.com/ninenines/cowboy +pkg_cowboy_commit = 1.0.4 + +PACKAGES += cowdb +pkg_cowdb_name = cowdb +pkg_cowdb_description = Pure Key/Value database library for Erlang Applications +pkg_cowdb_homepage = https://github.com/refuge/cowdb +pkg_cowdb_fetch = git +pkg_cowdb_repo = https://github.com/refuge/cowdb +pkg_cowdb_commit = master + +PACKAGES += cowlib +pkg_cowlib_name = cowlib +pkg_cowlib_description = Support library for manipulating Web protocols. +pkg_cowlib_homepage = http://ninenines.eu +pkg_cowlib_fetch = git +pkg_cowlib_repo = https://github.com/ninenines/cowlib +pkg_cowlib_commit = 1.0.2 + +PACKAGES += cpg +pkg_cpg_name = cpg +pkg_cpg_description = CloudI Process Groups +pkg_cpg_homepage = https://github.com/okeuday/cpg +pkg_cpg_fetch = git +pkg_cpg_repo = https://github.com/okeuday/cpg +pkg_cpg_commit = master + +PACKAGES += cqerl +pkg_cqerl_name = cqerl +pkg_cqerl_description = Native Erlang CQL client for Cassandra +pkg_cqerl_homepage = https://matehat.github.io/cqerl/ +pkg_cqerl_fetch = git +pkg_cqerl_repo = https://github.com/matehat/cqerl +pkg_cqerl_commit = master + +PACKAGES += cr +pkg_cr_name = cr +pkg_cr_description = Chain Replication +pkg_cr_homepage = https://synrc.com/apps/cr/doc/cr.htm +pkg_cr_fetch = git +pkg_cr_repo = https://github.com/spawnproc/cr +pkg_cr_commit = master + +PACKAGES += cuttlefish +pkg_cuttlefish_name = cuttlefish +pkg_cuttlefish_description = never lose your childlike sense of wonder baby cuttlefish, promise me? +pkg_cuttlefish_homepage = https://github.com/basho/cuttlefish +pkg_cuttlefish_fetch = git +pkg_cuttlefish_repo = https://github.com/basho/cuttlefish +pkg_cuttlefish_commit = master + +PACKAGES += damocles +pkg_damocles_name = damocles +pkg_damocles_description = Erlang library for generating adversarial network conditions for QAing distributed applications/systems on a single Linux box. +pkg_damocles_homepage = https://github.com/lostcolony/damocles +pkg_damocles_fetch = git +pkg_damocles_repo = https://github.com/lostcolony/damocles +pkg_damocles_commit = master + +PACKAGES += debbie +pkg_debbie_name = debbie +pkg_debbie_description = .DEB Built In Erlang +pkg_debbie_homepage = https://github.com/crownedgrouse/debbie +pkg_debbie_fetch = git +pkg_debbie_repo = https://github.com/crownedgrouse/debbie +pkg_debbie_commit = master + +PACKAGES += decimal +pkg_decimal_name = decimal +pkg_decimal_description = An Erlang decimal arithmetic library +pkg_decimal_homepage = https://github.com/tim/erlang-decimal +pkg_decimal_fetch = git +pkg_decimal_repo = https://github.com/tim/erlang-decimal +pkg_decimal_commit = master + +PACKAGES += detergent +pkg_detergent_name = detergent +pkg_detergent_description = An emulsifying Erlang SOAP library +pkg_detergent_homepage = https://github.com/devinus/detergent +pkg_detergent_fetch = git +pkg_detergent_repo = https://github.com/devinus/detergent +pkg_detergent_commit = master + +PACKAGES += detest +pkg_detest_name = detest +pkg_detest_description = Tool for running tests on a cluster of erlang nodes +pkg_detest_homepage = https://github.com/biokoda/detest +pkg_detest_fetch = git +pkg_detest_repo = https://github.com/biokoda/detest +pkg_detest_commit = master + +PACKAGES += dh_date +pkg_dh_date_name = dh_date +pkg_dh_date_description = Date formatting / parsing library for erlang +pkg_dh_date_homepage = https://github.com/daleharvey/dh_date +pkg_dh_date_fetch = git +pkg_dh_date_repo = https://github.com/daleharvey/dh_date +pkg_dh_date_commit = master + +PACKAGES += dirbusterl +pkg_dirbusterl_name = dirbusterl +pkg_dirbusterl_description = DirBuster successor in Erlang +pkg_dirbusterl_homepage = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_fetch = git +pkg_dirbusterl_repo = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_commit = master + +PACKAGES += dispcount +pkg_dispcount_name = dispcount +pkg_dispcount_description = Erlang task dispatcher based on ETS counters. +pkg_dispcount_homepage = https://github.com/ferd/dispcount +pkg_dispcount_fetch = git +pkg_dispcount_repo = https://github.com/ferd/dispcount +pkg_dispcount_commit = master + +PACKAGES += dlhttpc +pkg_dlhttpc_name = dlhttpc +pkg_dlhttpc_description = dispcount-based lhttpc fork for massive amounts of requests to limited endpoints +pkg_dlhttpc_homepage = https://github.com/ferd/dlhttpc +pkg_dlhttpc_fetch = git +pkg_dlhttpc_repo = https://github.com/ferd/dlhttpc +pkg_dlhttpc_commit = master + +PACKAGES += dns +pkg_dns_name = dns +pkg_dns_description = Erlang DNS library +pkg_dns_homepage = https://github.com/aetrion/dns_erlang +pkg_dns_fetch = git +pkg_dns_repo = https://github.com/aetrion/dns_erlang +pkg_dns_commit = master + +PACKAGES += dnssd +pkg_dnssd_name = dnssd +pkg_dnssd_description = Erlang interface to Apple's Bonjour D NS Service Discovery implementation +pkg_dnssd_homepage = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_fetch = git +pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_commit = master + +PACKAGES += dynamic_compile +pkg_dynamic_compile_name = dynamic_compile +pkg_dynamic_compile_description = compile and load erlang modules from string input +pkg_dynamic_compile_homepage = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_fetch = git +pkg_dynamic_compile_repo = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_commit = master + +PACKAGES += e2 +pkg_e2_name = e2 +pkg_e2_description = Library to simply writing correct OTP applications. +pkg_e2_homepage = http://e2project.org +pkg_e2_fetch = git +pkg_e2_repo = https://github.com/gar1t/e2 +pkg_e2_commit = master + +PACKAGES += eamf +pkg_eamf_name = eamf +pkg_eamf_description = eAMF provides Action Message Format (AMF) support for Erlang +pkg_eamf_homepage = https://github.com/mrinalwadhwa/eamf +pkg_eamf_fetch = git +pkg_eamf_repo = https://github.com/mrinalwadhwa/eamf +pkg_eamf_commit = master + +PACKAGES += eavro +pkg_eavro_name = eavro +pkg_eavro_description = Apache Avro encoder/decoder +pkg_eavro_homepage = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_fetch = git +pkg_eavro_repo = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_commit = master + +PACKAGES += ecapnp +pkg_ecapnp_name = ecapnp +pkg_ecapnp_description = Cap'n Proto library for Erlang +pkg_ecapnp_homepage = https://github.com/kaos/ecapnp +pkg_ecapnp_fetch = git +pkg_ecapnp_repo = https://github.com/kaos/ecapnp +pkg_ecapnp_commit = master + +PACKAGES += econfig +pkg_econfig_name = econfig +pkg_econfig_description = simple Erlang config handler using INI files +pkg_econfig_homepage = https://github.com/benoitc/econfig +pkg_econfig_fetch = git +pkg_econfig_repo = https://github.com/benoitc/econfig +pkg_econfig_commit = master + +PACKAGES += edate +pkg_edate_name = edate +pkg_edate_description = date manipulation library for erlang +pkg_edate_homepage = https://github.com/dweldon/edate +pkg_edate_fetch = git +pkg_edate_repo = https://github.com/dweldon/edate +pkg_edate_commit = master + +PACKAGES += edgar +pkg_edgar_name = edgar +pkg_edgar_description = Erlang Does GNU AR +pkg_edgar_homepage = https://github.com/crownedgrouse/edgar +pkg_edgar_fetch = git +pkg_edgar_repo = https://github.com/crownedgrouse/edgar +pkg_edgar_commit = master + +PACKAGES += edis +pkg_edis_name = edis +pkg_edis_description = An Erlang implementation of Redis KV Store +pkg_edis_homepage = http://inaka.github.com/edis/ +pkg_edis_fetch = git +pkg_edis_repo = https://github.com/inaka/edis +pkg_edis_commit = master + +PACKAGES += edns +pkg_edns_name = edns +pkg_edns_description = Erlang/OTP DNS server +pkg_edns_homepage = https://github.com/hcvst/erlang-dns +pkg_edns_fetch = git +pkg_edns_repo = https://github.com/hcvst/erlang-dns +pkg_edns_commit = master + +PACKAGES += edown +pkg_edown_name = edown +pkg_edown_description = EDoc extension for generating Github-flavored Markdown +pkg_edown_homepage = https://github.com/uwiger/edown +pkg_edown_fetch = git +pkg_edown_repo = https://github.com/uwiger/edown +pkg_edown_commit = master + +PACKAGES += eep +pkg_eep_name = eep +pkg_eep_description = Erlang Easy Profiling (eep) application provides a way to analyze application performance and call hierarchy +pkg_eep_homepage = https://github.com/virtan/eep +pkg_eep_fetch = git +pkg_eep_repo = https://github.com/virtan/eep +pkg_eep_commit = master + +PACKAGES += eep_app +pkg_eep_app_name = eep_app +pkg_eep_app_description = Embedded Event Processing +pkg_eep_app_homepage = https://github.com/darach/eep-erl +pkg_eep_app_fetch = git +pkg_eep_app_repo = https://github.com/darach/eep-erl +pkg_eep_app_commit = master + +PACKAGES += efene +pkg_efene_name = efene +pkg_efene_description = Alternative syntax for the Erlang Programming Language focusing on simplicity, ease of use and programmer UX +pkg_efene_homepage = https://github.com/efene/efene +pkg_efene_fetch = git +pkg_efene_repo = https://github.com/efene/efene +pkg_efene_commit = master + +PACKAGES += egeoip +pkg_egeoip_name = egeoip +pkg_egeoip_description = Erlang IP Geolocation module, currently supporting the MaxMind GeoLite City Database. +pkg_egeoip_homepage = https://github.com/mochi/egeoip +pkg_egeoip_fetch = git +pkg_egeoip_repo = https://github.com/mochi/egeoip +pkg_egeoip_commit = master + +PACKAGES += ehsa +pkg_ehsa_name = ehsa +pkg_ehsa_description = Erlang HTTP server basic and digest authentication modules +pkg_ehsa_homepage = https://bitbucket.org/a12n/ehsa +pkg_ehsa_fetch = hg +pkg_ehsa_repo = https://bitbucket.org/a12n/ehsa +pkg_ehsa_commit = default + +PACKAGES += ej +pkg_ej_name = ej +pkg_ej_description = Helper module for working with Erlang terms representing JSON +pkg_ej_homepage = https://github.com/seth/ej +pkg_ej_fetch = git +pkg_ej_repo = https://github.com/seth/ej +pkg_ej_commit = master + +PACKAGES += ejabberd +pkg_ejabberd_name = ejabberd +pkg_ejabberd_description = Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform +pkg_ejabberd_homepage = https://github.com/processone/ejabberd +pkg_ejabberd_fetch = git +pkg_ejabberd_repo = https://github.com/processone/ejabberd +pkg_ejabberd_commit = master + +PACKAGES += ejwt +pkg_ejwt_name = ejwt +pkg_ejwt_description = erlang library for JSON Web Token +pkg_ejwt_homepage = https://github.com/artefactop/ejwt +pkg_ejwt_fetch = git +pkg_ejwt_repo = https://github.com/artefactop/ejwt +pkg_ejwt_commit = master + +PACKAGES += ekaf +pkg_ekaf_name = ekaf +pkg_ekaf_description = A minimal, high-performance Kafka client in Erlang. +pkg_ekaf_homepage = https://github.com/helpshift/ekaf +pkg_ekaf_fetch = git +pkg_ekaf_repo = https://github.com/helpshift/ekaf +pkg_ekaf_commit = master + +PACKAGES += elarm +pkg_elarm_name = elarm +pkg_elarm_description = Alarm Manager for Erlang. +pkg_elarm_homepage = https://github.com/esl/elarm +pkg_elarm_fetch = git +pkg_elarm_repo = https://github.com/esl/elarm +pkg_elarm_commit = master + +PACKAGES += eleveldb +pkg_eleveldb_name = eleveldb +pkg_eleveldb_description = Erlang LevelDB API +pkg_eleveldb_homepage = https://github.com/basho/eleveldb +pkg_eleveldb_fetch = git +pkg_eleveldb_repo = https://github.com/basho/eleveldb +pkg_eleveldb_commit = master + +PACKAGES += elixir +pkg_elixir_name = elixir +pkg_elixir_description = Elixir is a dynamic, functional language designed for building scalable and maintainable applications +pkg_elixir_homepage = https://elixir-lang.org/ +pkg_elixir_fetch = git +pkg_elixir_repo = https://github.com/elixir-lang/elixir +pkg_elixir_commit = master + +PACKAGES += elli +pkg_elli_name = elli +pkg_elli_description = Simple, robust and performant Erlang web server +pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_fetch = git +pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_commit = master + +PACKAGES += elvis +pkg_elvis_name = elvis +pkg_elvis_description = Erlang Style Reviewer +pkg_elvis_homepage = https://github.com/inaka/elvis +pkg_elvis_fetch = git +pkg_elvis_repo = https://github.com/inaka/elvis +pkg_elvis_commit = master + +PACKAGES += emagick +pkg_emagick_name = emagick +pkg_emagick_description = Wrapper for Graphics/ImageMagick command line tool. +pkg_emagick_homepage = https://github.com/kivra/emagick +pkg_emagick_fetch = git +pkg_emagick_repo = https://github.com/kivra/emagick +pkg_emagick_commit = master + +PACKAGES += emysql +pkg_emysql_name = emysql +pkg_emysql_description = Stable, pure Erlang MySQL driver. +pkg_emysql_homepage = https://github.com/Eonblast/Emysql +pkg_emysql_fetch = git +pkg_emysql_repo = https://github.com/Eonblast/Emysql +pkg_emysql_commit = master + +PACKAGES += enm +pkg_enm_name = enm +pkg_enm_description = Erlang driver for nanomsg +pkg_enm_homepage = https://github.com/basho/enm +pkg_enm_fetch = git +pkg_enm_repo = https://github.com/basho/enm +pkg_enm_commit = master + +PACKAGES += entop +pkg_entop_name = entop +pkg_entop_description = A top-like tool for monitoring an Erlang node +pkg_entop_homepage = https://github.com/mazenharake/entop +pkg_entop_fetch = git +pkg_entop_repo = https://github.com/mazenharake/entop +pkg_entop_commit = master + +PACKAGES += epcap +pkg_epcap_name = epcap +pkg_epcap_description = Erlang packet capture interface using pcap +pkg_epcap_homepage = https://github.com/msantos/epcap +pkg_epcap_fetch = git +pkg_epcap_repo = https://github.com/msantos/epcap +pkg_epcap_commit = master + +PACKAGES += eper +pkg_eper_name = eper +pkg_eper_description = Erlang performance and debugging tools. +pkg_eper_homepage = https://github.com/massemanet/eper +pkg_eper_fetch = git +pkg_eper_repo = https://github.com/massemanet/eper +pkg_eper_commit = master + +PACKAGES += epgsql +pkg_epgsql_name = epgsql +pkg_epgsql_description = Erlang PostgreSQL client library. +pkg_epgsql_homepage = https://github.com/epgsql/epgsql +pkg_epgsql_fetch = git +pkg_epgsql_repo = https://github.com/epgsql/epgsql +pkg_epgsql_commit = master + +PACKAGES += episcina +pkg_episcina_name = episcina +pkg_episcina_description = A simple non intrusive resource pool for connections +pkg_episcina_homepage = https://github.com/erlware/episcina +pkg_episcina_fetch = git +pkg_episcina_repo = https://github.com/erlware/episcina +pkg_episcina_commit = master + +PACKAGES += eplot +pkg_eplot_name = eplot +pkg_eplot_description = A plot engine written in erlang. +pkg_eplot_homepage = https://github.com/psyeugenic/eplot +pkg_eplot_fetch = git +pkg_eplot_repo = https://github.com/psyeugenic/eplot +pkg_eplot_commit = master + +PACKAGES += epocxy +pkg_epocxy_name = epocxy +pkg_epocxy_description = Erlang Patterns of Concurrency +pkg_epocxy_homepage = https://github.com/duomark/epocxy +pkg_epocxy_fetch = git +pkg_epocxy_repo = https://github.com/duomark/epocxy +pkg_epocxy_commit = master + +PACKAGES += epubnub +pkg_epubnub_name = epubnub +pkg_epubnub_description = Erlang PubNub API +pkg_epubnub_homepage = https://github.com/tsloughter/epubnub +pkg_epubnub_fetch = git +pkg_epubnub_repo = https://github.com/tsloughter/epubnub +pkg_epubnub_commit = master + +PACKAGES += eqm +pkg_eqm_name = eqm +pkg_eqm_description = Erlang pub sub with supply-demand channels +pkg_eqm_homepage = https://github.com/loucash/eqm +pkg_eqm_fetch = git +pkg_eqm_repo = https://github.com/loucash/eqm +pkg_eqm_commit = master + +PACKAGES += eredis +pkg_eredis_name = eredis +pkg_eredis_description = Erlang Redis client +pkg_eredis_homepage = https://github.com/wooga/eredis +pkg_eredis_fetch = git +pkg_eredis_repo = https://github.com/wooga/eredis +pkg_eredis_commit = master + +PACKAGES += eredis_pool +pkg_eredis_pool_name = eredis_pool +pkg_eredis_pool_description = eredis_pool is Pool of Redis clients, using eredis and poolboy. +pkg_eredis_pool_homepage = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_fetch = git +pkg_eredis_pool_repo = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_commit = master + +PACKAGES += erl_streams +pkg_erl_streams_name = erl_streams +pkg_erl_streams_description = Streams in Erlang +pkg_erl_streams_homepage = https://github.com/epappas/erl_streams +pkg_erl_streams_fetch = git +pkg_erl_streams_repo = https://github.com/epappas/erl_streams +pkg_erl_streams_commit = master + +PACKAGES += erlang_cep +pkg_erlang_cep_name = erlang_cep +pkg_erlang_cep_description = A basic CEP package written in erlang +pkg_erlang_cep_homepage = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_fetch = git +pkg_erlang_cep_repo = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_commit = master + +PACKAGES += erlang_js +pkg_erlang_js_name = erlang_js +pkg_erlang_js_description = A linked-in driver for Erlang to Mozilla's Spidermonkey Javascript runtime. +pkg_erlang_js_homepage = https://github.com/basho/erlang_js +pkg_erlang_js_fetch = git +pkg_erlang_js_repo = https://github.com/basho/erlang_js +pkg_erlang_js_commit = master + +PACKAGES += erlang_localtime +pkg_erlang_localtime_name = erlang_localtime +pkg_erlang_localtime_description = Erlang library for conversion from one local time to another +pkg_erlang_localtime_homepage = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_fetch = git +pkg_erlang_localtime_repo = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_commit = master + +PACKAGES += erlang_smtp +pkg_erlang_smtp_name = erlang_smtp +pkg_erlang_smtp_description = Erlang SMTP and POP3 server code. +pkg_erlang_smtp_homepage = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_fetch = git +pkg_erlang_smtp_repo = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_commit = master + +PACKAGES += erlang_term +pkg_erlang_term_name = erlang_term +pkg_erlang_term_description = Erlang Term Info +pkg_erlang_term_homepage = https://github.com/okeuday/erlang_term +pkg_erlang_term_fetch = git +pkg_erlang_term_repo = https://github.com/okeuday/erlang_term +pkg_erlang_term_commit = master + +PACKAGES += erlastic_search +pkg_erlastic_search_name = erlastic_search +pkg_erlastic_search_description = An Erlang app for communicating with Elastic Search's rest interface. +pkg_erlastic_search_homepage = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_fetch = git +pkg_erlastic_search_repo = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_commit = master + +PACKAGES += erlasticsearch +pkg_erlasticsearch_name = erlasticsearch +pkg_erlasticsearch_description = Erlang thrift interface to elastic_search +pkg_erlasticsearch_homepage = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_fetch = git +pkg_erlasticsearch_repo = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_commit = master + +PACKAGES += erlbrake +pkg_erlbrake_name = erlbrake +pkg_erlbrake_description = Erlang Airbrake notification client +pkg_erlbrake_homepage = https://github.com/kenpratt/erlbrake +pkg_erlbrake_fetch = git +pkg_erlbrake_repo = https://github.com/kenpratt/erlbrake +pkg_erlbrake_commit = master + +PACKAGES += erlcloud +pkg_erlcloud_name = erlcloud +pkg_erlcloud_description = Cloud Computing library for erlang (Amazon EC2, S3, SQS, SimpleDB, Mechanical Turk, ELB) +pkg_erlcloud_homepage = https://github.com/gleber/erlcloud +pkg_erlcloud_fetch = git +pkg_erlcloud_repo = https://github.com/gleber/erlcloud +pkg_erlcloud_commit = master + +PACKAGES += erlcron +pkg_erlcron_name = erlcron +pkg_erlcron_description = Erlang cronish system +pkg_erlcron_homepage = https://github.com/erlware/erlcron +pkg_erlcron_fetch = git +pkg_erlcron_repo = https://github.com/erlware/erlcron +pkg_erlcron_commit = master + +PACKAGES += erldb +pkg_erldb_name = erldb +pkg_erldb_description = ORM (Object-relational mapping) application implemented in Erlang +pkg_erldb_homepage = http://erldb.org +pkg_erldb_fetch = git +pkg_erldb_repo = https://github.com/erldb/erldb +pkg_erldb_commit = master + +PACKAGES += erldis +pkg_erldis_name = erldis +pkg_erldis_description = redis erlang client library +pkg_erldis_homepage = https://github.com/cstar/erldis +pkg_erldis_fetch = git +pkg_erldis_repo = https://github.com/cstar/erldis +pkg_erldis_commit = master + +PACKAGES += erldns +pkg_erldns_name = erldns +pkg_erldns_description = DNS server, in erlang. +pkg_erldns_homepage = https://github.com/aetrion/erl-dns +pkg_erldns_fetch = git +pkg_erldns_repo = https://github.com/aetrion/erl-dns +pkg_erldns_commit = master + +PACKAGES += erldocker +pkg_erldocker_name = erldocker +pkg_erldocker_description = Docker Remote API client for Erlang +pkg_erldocker_homepage = https://github.com/proger/erldocker +pkg_erldocker_fetch = git +pkg_erldocker_repo = https://github.com/proger/erldocker +pkg_erldocker_commit = master + +PACKAGES += erlfsmon +pkg_erlfsmon_name = erlfsmon +pkg_erlfsmon_description = Erlang filesystem event watcher for Linux and OSX +pkg_erlfsmon_homepage = https://github.com/proger/erlfsmon +pkg_erlfsmon_fetch = git +pkg_erlfsmon_repo = https://github.com/proger/erlfsmon +pkg_erlfsmon_commit = master + +PACKAGES += erlgit +pkg_erlgit_name = erlgit +pkg_erlgit_description = Erlang convenience wrapper around git executable +pkg_erlgit_homepage = https://github.com/gleber/erlgit +pkg_erlgit_fetch = git +pkg_erlgit_repo = https://github.com/gleber/erlgit +pkg_erlgit_commit = master + +PACKAGES += erlguten +pkg_erlguten_name = erlguten +pkg_erlguten_description = ErlGuten is a system for high-quality typesetting, written purely in Erlang. +pkg_erlguten_homepage = https://github.com/richcarl/erlguten +pkg_erlguten_fetch = git +pkg_erlguten_repo = https://github.com/richcarl/erlguten +pkg_erlguten_commit = master + +PACKAGES += erlmc +pkg_erlmc_name = erlmc +pkg_erlmc_description = Erlang memcached binary protocol client +pkg_erlmc_homepage = https://github.com/jkvor/erlmc +pkg_erlmc_fetch = git +pkg_erlmc_repo = https://github.com/jkvor/erlmc +pkg_erlmc_commit = master + +PACKAGES += erlmongo +pkg_erlmongo_name = erlmongo +pkg_erlmongo_description = Record based Erlang driver for MongoDB with gridfs support +pkg_erlmongo_homepage = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_fetch = git +pkg_erlmongo_repo = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_commit = master + +PACKAGES += erlog +pkg_erlog_name = erlog +pkg_erlog_description = Prolog interpreter in and for Erlang +pkg_erlog_homepage = https://github.com/rvirding/erlog +pkg_erlog_fetch = git +pkg_erlog_repo = https://github.com/rvirding/erlog +pkg_erlog_commit = master + +PACKAGES += erlpass +pkg_erlpass_name = erlpass +pkg_erlpass_description = A library to handle password hashing and changing in a safe manner, independent from any kind of storage whatsoever. +pkg_erlpass_homepage = https://github.com/ferd/erlpass +pkg_erlpass_fetch = git +pkg_erlpass_repo = https://github.com/ferd/erlpass +pkg_erlpass_commit = master + +PACKAGES += erlport +pkg_erlport_name = erlport +pkg_erlport_description = ErlPort - connect Erlang to other languages +pkg_erlport_homepage = https://github.com/hdima/erlport +pkg_erlport_fetch = git +pkg_erlport_repo = https://github.com/hdima/erlport +pkg_erlport_commit = master + +PACKAGES += erlsh +pkg_erlsh_name = erlsh +pkg_erlsh_description = Erlang shell tools +pkg_erlsh_homepage = https://github.com/proger/erlsh +pkg_erlsh_fetch = git +pkg_erlsh_repo = https://github.com/proger/erlsh +pkg_erlsh_commit = master + +PACKAGES += erlsha2 +pkg_erlsha2_name = erlsha2 +pkg_erlsha2_description = SHA-224, SHA-256, SHA-384, SHA-512 implemented in Erlang NIFs. +pkg_erlsha2_homepage = https://github.com/vinoski/erlsha2 +pkg_erlsha2_fetch = git +pkg_erlsha2_repo = https://github.com/vinoski/erlsha2 +pkg_erlsha2_commit = master + +PACKAGES += erlsom +pkg_erlsom_name = erlsom +pkg_erlsom_description = XML parser for Erlang +pkg_erlsom_homepage = https://github.com/willemdj/erlsom +pkg_erlsom_fetch = git +pkg_erlsom_repo = https://github.com/willemdj/erlsom +pkg_erlsom_commit = master + +PACKAGES += erlubi +pkg_erlubi_name = erlubi +pkg_erlubi_description = Ubigraph Erlang Client (and Process Visualizer) +pkg_erlubi_homepage = https://github.com/krestenkrab/erlubi +pkg_erlubi_fetch = git +pkg_erlubi_repo = https://github.com/krestenkrab/erlubi +pkg_erlubi_commit = master + +PACKAGES += erlvolt +pkg_erlvolt_name = erlvolt +pkg_erlvolt_description = VoltDB Erlang Client Driver +pkg_erlvolt_homepage = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_fetch = git +pkg_erlvolt_repo = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_commit = master + +PACKAGES += erlware_commons +pkg_erlware_commons_name = erlware_commons +pkg_erlware_commons_description = Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components. +pkg_erlware_commons_homepage = https://github.com/erlware/erlware_commons +pkg_erlware_commons_fetch = git +pkg_erlware_commons_repo = https://github.com/erlware/erlware_commons +pkg_erlware_commons_commit = master + +PACKAGES += erlydtl +pkg_erlydtl_name = erlydtl +pkg_erlydtl_description = Django Template Language for Erlang. +pkg_erlydtl_homepage = https://github.com/erlydtl/erlydtl +pkg_erlydtl_fetch = git +pkg_erlydtl_repo = https://github.com/erlydtl/erlydtl +pkg_erlydtl_commit = master + +PACKAGES += errd +pkg_errd_name = errd +pkg_errd_description = Erlang RRDTool library +pkg_errd_homepage = https://github.com/archaelus/errd +pkg_errd_fetch = git +pkg_errd_repo = https://github.com/archaelus/errd +pkg_errd_commit = master + +PACKAGES += erserve +pkg_erserve_name = erserve +pkg_erserve_description = Erlang/Rserve communication interface +pkg_erserve_homepage = https://github.com/del/erserve +pkg_erserve_fetch = git +pkg_erserve_repo = https://github.com/del/erserve +pkg_erserve_commit = master + +PACKAGES += erwa +pkg_erwa_name = erwa +pkg_erwa_description = A WAMP router and client written in Erlang. +pkg_erwa_homepage = https://github.com/bwegh/erwa +pkg_erwa_fetch = git +pkg_erwa_repo = https://github.com/bwegh/erwa +pkg_erwa_commit = master + +PACKAGES += escalus +pkg_escalus_name = escalus +pkg_escalus_description = An XMPP client library in Erlang for conveniently testing XMPP servers +pkg_escalus_homepage = https://github.com/esl/escalus +pkg_escalus_fetch = git +pkg_escalus_repo = https://github.com/esl/escalus +pkg_escalus_commit = master + +PACKAGES += espec +pkg_espec_name = espec +pkg_espec_description = ESpec: Behaviour driven development framework for Erlang +pkg_espec_homepage = https://github.com/lucaspiller/espec +pkg_espec_fetch = git +pkg_espec_repo = https://github.com/lucaspiller/espec +pkg_espec_commit = master + +PACKAGES += estatsd +pkg_estatsd_name = estatsd +pkg_estatsd_description = Erlang stats aggregation app that periodically flushes data to graphite +pkg_estatsd_homepage = https://github.com/RJ/estatsd +pkg_estatsd_fetch = git +pkg_estatsd_repo = https://github.com/RJ/estatsd +pkg_estatsd_commit = master + +PACKAGES += etap +pkg_etap_name = etap +pkg_etap_description = etap is a simple erlang testing library that provides TAP compliant output. +pkg_etap_homepage = https://github.com/ngerakines/etap +pkg_etap_fetch = git +pkg_etap_repo = https://github.com/ngerakines/etap +pkg_etap_commit = master + +PACKAGES += etest +pkg_etest_name = etest +pkg_etest_description = A lightweight, convention over configuration test framework for Erlang +pkg_etest_homepage = https://github.com/wooga/etest +pkg_etest_fetch = git +pkg_etest_repo = https://github.com/wooga/etest +pkg_etest_commit = master + +PACKAGES += etest_http +pkg_etest_http_name = etest_http +pkg_etest_http_description = etest Assertions around HTTP (client-side) +pkg_etest_http_homepage = https://github.com/wooga/etest_http +pkg_etest_http_fetch = git +pkg_etest_http_repo = https://github.com/wooga/etest_http +pkg_etest_http_commit = master + +PACKAGES += etoml +pkg_etoml_name = etoml +pkg_etoml_description = TOML language erlang parser +pkg_etoml_homepage = https://github.com/kalta/etoml +pkg_etoml_fetch = git +pkg_etoml_repo = https://github.com/kalta/etoml +pkg_etoml_commit = master + +PACKAGES += eunit +pkg_eunit_name = eunit +pkg_eunit_description = The EUnit lightweight unit testing framework for Erlang - this is the canonical development repository. +pkg_eunit_homepage = https://github.com/richcarl/eunit +pkg_eunit_fetch = git +pkg_eunit_repo = https://github.com/richcarl/eunit +pkg_eunit_commit = master + +PACKAGES += eunit_formatters +pkg_eunit_formatters_name = eunit_formatters +pkg_eunit_formatters_description = Because eunit's output sucks. Let's make it better. +pkg_eunit_formatters_homepage = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_fetch = git +pkg_eunit_formatters_repo = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_commit = master + +PACKAGES += euthanasia +pkg_euthanasia_name = euthanasia +pkg_euthanasia_description = Merciful killer for your Erlang processes +pkg_euthanasia_homepage = https://github.com/doubleyou/euthanasia +pkg_euthanasia_fetch = git +pkg_euthanasia_repo = https://github.com/doubleyou/euthanasia +pkg_euthanasia_commit = master + +PACKAGES += evum +pkg_evum_name = evum +pkg_evum_description = Spawn Linux VMs as Erlang processes in the Erlang VM +pkg_evum_homepage = https://github.com/msantos/evum +pkg_evum_fetch = git +pkg_evum_repo = https://github.com/msantos/evum +pkg_evum_commit = master + +PACKAGES += exec +pkg_exec_name = erlexec +pkg_exec_description = Execute and control OS processes from Erlang/OTP. +pkg_exec_homepage = http://saleyn.github.com/erlexec +pkg_exec_fetch = git +pkg_exec_repo = https://github.com/saleyn/erlexec +pkg_exec_commit = master + +PACKAGES += exml +pkg_exml_name = exml +pkg_exml_description = XML parsing library in Erlang +pkg_exml_homepage = https://github.com/paulgray/exml +pkg_exml_fetch = git +pkg_exml_repo = https://github.com/paulgray/exml +pkg_exml_commit = master + +PACKAGES += exometer +pkg_exometer_name = exometer +pkg_exometer_description = Basic measurement objects and probe behavior +pkg_exometer_homepage = https://github.com/Feuerlabs/exometer +pkg_exometer_fetch = git +pkg_exometer_repo = https://github.com/Feuerlabs/exometer +pkg_exometer_commit = master + +PACKAGES += exs1024 +pkg_exs1024_name = exs1024 +pkg_exs1024_description = Xorshift1024star pseudo random number generator for Erlang. +pkg_exs1024_homepage = https://github.com/jj1bdx/exs1024 +pkg_exs1024_fetch = git +pkg_exs1024_repo = https://github.com/jj1bdx/exs1024 +pkg_exs1024_commit = master + +PACKAGES += exs64 +pkg_exs64_name = exs64 +pkg_exs64_description = Xorshift64star pseudo random number generator for Erlang. +pkg_exs64_homepage = https://github.com/jj1bdx/exs64 +pkg_exs64_fetch = git +pkg_exs64_repo = https://github.com/jj1bdx/exs64 +pkg_exs64_commit = master + +PACKAGES += exsplus116 +pkg_exsplus116_name = exsplus116 +pkg_exsplus116_description = Xorshift116plus for Erlang +pkg_exsplus116_homepage = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_fetch = git +pkg_exsplus116_repo = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_commit = master + +PACKAGES += exsplus128 +pkg_exsplus128_name = exsplus128 +pkg_exsplus128_description = Xorshift128plus pseudo random number generator for Erlang. +pkg_exsplus128_homepage = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_fetch = git +pkg_exsplus128_repo = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_commit = master + +PACKAGES += ezmq +pkg_ezmq_name = ezmq +pkg_ezmq_description = zMQ implemented in Erlang +pkg_ezmq_homepage = https://github.com/RoadRunnr/ezmq +pkg_ezmq_fetch = git +pkg_ezmq_repo = https://github.com/RoadRunnr/ezmq +pkg_ezmq_commit = master + +PACKAGES += ezmtp +pkg_ezmtp_name = ezmtp +pkg_ezmtp_description = ZMTP protocol in pure Erlang. +pkg_ezmtp_homepage = https://github.com/a13x/ezmtp +pkg_ezmtp_fetch = git +pkg_ezmtp_repo = https://github.com/a13x/ezmtp +pkg_ezmtp_commit = master + +PACKAGES += fast_disk_log +pkg_fast_disk_log_name = fast_disk_log +pkg_fast_disk_log_description = Pool-based asynchronous Erlang disk logger +pkg_fast_disk_log_homepage = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_fetch = git +pkg_fast_disk_log_repo = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_commit = master + +PACKAGES += feeder +pkg_feeder_name = feeder +pkg_feeder_description = Stream parse RSS and Atom formatted XML feeds. +pkg_feeder_homepage = https://github.com/michaelnisi/feeder +pkg_feeder_fetch = git +pkg_feeder_repo = https://github.com/michaelnisi/feeder +pkg_feeder_commit = master + +PACKAGES += find_crate +pkg_find_crate_name = find_crate +pkg_find_crate_description = Find Rust libs and exes in Erlang application priv directory +pkg_find_crate_homepage = https://github.com/goertzenator/find_crate +pkg_find_crate_fetch = git +pkg_find_crate_repo = https://github.com/goertzenator/find_crate +pkg_find_crate_commit = master + +PACKAGES += fix +pkg_fix_name = fix +pkg_fix_description = http://fixprotocol.org/ implementation. +pkg_fix_homepage = https://github.com/maxlapshin/fix +pkg_fix_fetch = git +pkg_fix_repo = https://github.com/maxlapshin/fix +pkg_fix_commit = master + +PACKAGES += flower +pkg_flower_name = flower +pkg_flower_description = FlowER - a Erlang OpenFlow development platform +pkg_flower_homepage = https://github.com/travelping/flower +pkg_flower_fetch = git +pkg_flower_repo = https://github.com/travelping/flower +pkg_flower_commit = master + +PACKAGES += fn +pkg_fn_name = fn +pkg_fn_description = Function utilities for Erlang +pkg_fn_homepage = https://github.com/reiddraper/fn +pkg_fn_fetch = git +pkg_fn_repo = https://github.com/reiddraper/fn +pkg_fn_commit = master + +PACKAGES += folsom +pkg_folsom_name = folsom +pkg_folsom_description = Expose Erlang Events and Metrics +pkg_folsom_homepage = https://github.com/boundary/folsom +pkg_folsom_fetch = git +pkg_folsom_repo = https://github.com/boundary/folsom +pkg_folsom_commit = master + +PACKAGES += folsom_cowboy +pkg_folsom_cowboy_name = folsom_cowboy +pkg_folsom_cowboy_description = A Cowboy based Folsom HTTP Wrapper. +pkg_folsom_cowboy_homepage = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_fetch = git +pkg_folsom_cowboy_repo = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_commit = master + +PACKAGES += folsomite +pkg_folsomite_name = folsomite +pkg_folsomite_description = blow up your graphite / riemann server with folsom metrics +pkg_folsomite_homepage = https://github.com/campanja/folsomite +pkg_folsomite_fetch = git +pkg_folsomite_repo = https://github.com/campanja/folsomite +pkg_folsomite_commit = master + +PACKAGES += fs +pkg_fs_name = fs +pkg_fs_description = Erlang FileSystem Listener +pkg_fs_homepage = https://github.com/synrc/fs +pkg_fs_fetch = git +pkg_fs_repo = https://github.com/synrc/fs +pkg_fs_commit = master + +PACKAGES += fuse +pkg_fuse_name = fuse +pkg_fuse_description = A Circuit Breaker for Erlang +pkg_fuse_homepage = https://github.com/jlouis/fuse +pkg_fuse_fetch = git +pkg_fuse_repo = https://github.com/jlouis/fuse +pkg_fuse_commit = master + +PACKAGES += gcm +pkg_gcm_name = gcm +pkg_gcm_description = An Erlang application for Google Cloud Messaging +pkg_gcm_homepage = https://github.com/pdincau/gcm-erlang +pkg_gcm_fetch = git +pkg_gcm_repo = https://github.com/pdincau/gcm-erlang +pkg_gcm_commit = master + +PACKAGES += gcprof +pkg_gcprof_name = gcprof +pkg_gcprof_description = Garbage Collection profiler for Erlang +pkg_gcprof_homepage = https://github.com/knutin/gcprof +pkg_gcprof_fetch = git +pkg_gcprof_repo = https://github.com/knutin/gcprof +pkg_gcprof_commit = master + +PACKAGES += geas +pkg_geas_name = geas +pkg_geas_description = Guess Erlang Application Scattering +pkg_geas_homepage = https://github.com/crownedgrouse/geas +pkg_geas_fetch = git +pkg_geas_repo = https://github.com/crownedgrouse/geas +pkg_geas_commit = master + +PACKAGES += geef +pkg_geef_name = geef +pkg_geef_description = Git NEEEEF (Erlang NIF) +pkg_geef_homepage = https://github.com/carlosmn/geef +pkg_geef_fetch = git +pkg_geef_repo = https://github.com/carlosmn/geef +pkg_geef_commit = master + +PACKAGES += gen_coap +pkg_gen_coap_name = gen_coap +pkg_gen_coap_description = Generic Erlang CoAP Client/Server +pkg_gen_coap_homepage = https://github.com/gotthardp/gen_coap +pkg_gen_coap_fetch = git +pkg_gen_coap_repo = https://github.com/gotthardp/gen_coap +pkg_gen_coap_commit = master + +PACKAGES += gen_cycle +pkg_gen_cycle_name = gen_cycle +pkg_gen_cycle_description = Simple, generic OTP behaviour for recurring tasks +pkg_gen_cycle_homepage = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_fetch = git +pkg_gen_cycle_repo = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_commit = develop + +PACKAGES += gen_icmp +pkg_gen_icmp_name = gen_icmp +pkg_gen_icmp_description = Erlang interface to ICMP sockets +pkg_gen_icmp_homepage = https://github.com/msantos/gen_icmp +pkg_gen_icmp_fetch = git +pkg_gen_icmp_repo = https://github.com/msantos/gen_icmp +pkg_gen_icmp_commit = master + +PACKAGES += gen_leader +pkg_gen_leader_name = gen_leader +pkg_gen_leader_description = leader election behavior +pkg_gen_leader_homepage = https://github.com/garret-smith/gen_leader_revival +pkg_gen_leader_fetch = git +pkg_gen_leader_repo = https://github.com/garret-smith/gen_leader_revival +pkg_gen_leader_commit = master + +PACKAGES += gen_nb_server +pkg_gen_nb_server_name = gen_nb_server +pkg_gen_nb_server_description = OTP behavior for writing non-blocking servers +pkg_gen_nb_server_homepage = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_fetch = git +pkg_gen_nb_server_repo = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_commit = master + +PACKAGES += gen_paxos +pkg_gen_paxos_name = gen_paxos +pkg_gen_paxos_description = An Erlang/OTP-style implementation of the PAXOS distributed consensus protocol +pkg_gen_paxos_homepage = https://github.com/gburd/gen_paxos +pkg_gen_paxos_fetch = git +pkg_gen_paxos_repo = https://github.com/gburd/gen_paxos +pkg_gen_paxos_commit = master + +PACKAGES += gen_rpc +pkg_gen_rpc_name = gen_rpc +pkg_gen_rpc_description = A scalable RPC library for Erlang-VM based languages +pkg_gen_rpc_homepage = https://github.com/priestjim/gen_rpc.git +pkg_gen_rpc_fetch = git +pkg_gen_rpc_repo = https://github.com/priestjim/gen_rpc.git +pkg_gen_rpc_commit = master + +PACKAGES += gen_smtp +pkg_gen_smtp_name = gen_smtp +pkg_gen_smtp_description = A generic Erlang SMTP server and client that can be extended via callback modules +pkg_gen_smtp_homepage = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_fetch = git +pkg_gen_smtp_repo = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_commit = master + +PACKAGES += gen_tracker +pkg_gen_tracker_name = gen_tracker +pkg_gen_tracker_description = supervisor with ets handling of children and their metadata +pkg_gen_tracker_homepage = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_fetch = git +pkg_gen_tracker_repo = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_commit = master + +PACKAGES += gen_unix +pkg_gen_unix_name = gen_unix +pkg_gen_unix_description = Erlang Unix socket interface +pkg_gen_unix_homepage = https://github.com/msantos/gen_unix +pkg_gen_unix_fetch = git +pkg_gen_unix_repo = https://github.com/msantos/gen_unix +pkg_gen_unix_commit = master + +PACKAGES += geode +pkg_geode_name = geode +pkg_geode_description = geohash/proximity lookup in pure, uncut erlang. +pkg_geode_homepage = https://github.com/bradfordw/geode +pkg_geode_fetch = git +pkg_geode_repo = https://github.com/bradfordw/geode +pkg_geode_commit = master + +PACKAGES += getopt +pkg_getopt_name = getopt +pkg_getopt_description = Module to parse command line arguments using the GNU getopt syntax +pkg_getopt_homepage = https://github.com/jcomellas/getopt +pkg_getopt_fetch = git +pkg_getopt_repo = https://github.com/jcomellas/getopt +pkg_getopt_commit = master + +PACKAGES += gettext +pkg_gettext_name = gettext +pkg_gettext_description = Erlang internationalization library. +pkg_gettext_homepage = https://github.com/etnt/gettext +pkg_gettext_fetch = git +pkg_gettext_repo = https://github.com/etnt/gettext +pkg_gettext_commit = master + +PACKAGES += giallo +pkg_giallo_name = giallo +pkg_giallo_description = Small and flexible web framework on top of Cowboy +pkg_giallo_homepage = https://github.com/kivra/giallo +pkg_giallo_fetch = git +pkg_giallo_repo = https://github.com/kivra/giallo +pkg_giallo_commit = master + +PACKAGES += gin +pkg_gin_name = gin +pkg_gin_description = The guards and for Erlang parse_transform +pkg_gin_homepage = https://github.com/mad-cocktail/gin +pkg_gin_fetch = git +pkg_gin_repo = https://github.com/mad-cocktail/gin +pkg_gin_commit = master + +PACKAGES += gitty +pkg_gitty_name = gitty +pkg_gitty_description = Git access in erlang +pkg_gitty_homepage = https://github.com/maxlapshin/gitty +pkg_gitty_fetch = git +pkg_gitty_repo = https://github.com/maxlapshin/gitty +pkg_gitty_commit = master + +PACKAGES += gold_fever +pkg_gold_fever_name = gold_fever +pkg_gold_fever_description = A Treasure Hunt for Erlangers +pkg_gold_fever_homepage = https://github.com/inaka/gold_fever +pkg_gold_fever_fetch = git +pkg_gold_fever_repo = https://github.com/inaka/gold_fever +pkg_gold_fever_commit = master + +PACKAGES += gpb +pkg_gpb_name = gpb +pkg_gpb_description = A Google Protobuf implementation for Erlang +pkg_gpb_homepage = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_fetch = git +pkg_gpb_repo = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_commit = master + +PACKAGES += gproc +pkg_gproc_name = gproc +pkg_gproc_description = Extended process registry for Erlang +pkg_gproc_homepage = https://github.com/uwiger/gproc +pkg_gproc_fetch = git +pkg_gproc_repo = https://github.com/uwiger/gproc +pkg_gproc_commit = master + +PACKAGES += grapherl +pkg_grapherl_name = grapherl +pkg_grapherl_description = Create graphs of Erlang systems and programs +pkg_grapherl_homepage = https://github.com/eproxus/grapherl +pkg_grapherl_fetch = git +pkg_grapherl_repo = https://github.com/eproxus/grapherl +pkg_grapherl_commit = master + +PACKAGES += grpc +pkg_grpc_name = grpc +pkg_grpc_description = gRPC server in Erlang +pkg_grpc_homepage = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_fetch = git +pkg_grpc_repo = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_commit = master + +PACKAGES += grpc_client +pkg_grpc_client_name = grpc_client +pkg_grpc_client_description = gRPC client in Erlang +pkg_grpc_client_homepage = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_fetch = git +pkg_grpc_client_repo = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_commit = master + +PACKAGES += gun +pkg_gun_name = gun +pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang. +pkg_gun_homepage = http//ninenines.eu +pkg_gun_fetch = git +pkg_gun_repo = https://github.com/ninenines/gun +pkg_gun_commit = master + +PACKAGES += gut +pkg_gut_name = gut +pkg_gut_description = gut is a template printing, aka scaffolding, tool for Erlang. Like rails generate or yeoman +pkg_gut_homepage = https://github.com/unbalancedparentheses/gut +pkg_gut_fetch = git +pkg_gut_repo = https://github.com/unbalancedparentheses/gut +pkg_gut_commit = master + +PACKAGES += hackney +pkg_hackney_name = hackney +pkg_hackney_description = simple HTTP client in Erlang +pkg_hackney_homepage = https://github.com/benoitc/hackney +pkg_hackney_fetch = git +pkg_hackney_repo = https://github.com/benoitc/hackney +pkg_hackney_commit = master + +PACKAGES += hamcrest +pkg_hamcrest_name = hamcrest +pkg_hamcrest_description = Erlang port of Hamcrest +pkg_hamcrest_homepage = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_fetch = git +pkg_hamcrest_repo = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_commit = master + +PACKAGES += hanoidb +pkg_hanoidb_name = hanoidb +pkg_hanoidb_description = Erlang LSM BTree Storage +pkg_hanoidb_homepage = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_fetch = git +pkg_hanoidb_repo = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_commit = master + +PACKAGES += hottub +pkg_hottub_name = hottub +pkg_hottub_description = Permanent Erlang Worker Pool +pkg_hottub_homepage = https://github.com/bfrog/hottub +pkg_hottub_fetch = git +pkg_hottub_repo = https://github.com/bfrog/hottub +pkg_hottub_commit = master + +PACKAGES += hpack +pkg_hpack_name = hpack +pkg_hpack_description = HPACK Implementation for Erlang +pkg_hpack_homepage = https://github.com/joedevivo/hpack +pkg_hpack_fetch = git +pkg_hpack_repo = https://github.com/joedevivo/hpack +pkg_hpack_commit = master + +PACKAGES += hyper +pkg_hyper_name = hyper +pkg_hyper_description = Erlang implementation of HyperLogLog +pkg_hyper_homepage = https://github.com/GameAnalytics/hyper +pkg_hyper_fetch = git +pkg_hyper_repo = https://github.com/GameAnalytics/hyper +pkg_hyper_commit = master + +PACKAGES += i18n +pkg_i18n_name = i18n +pkg_i18n_description = International components for unicode from Erlang (unicode, date, string, number, format, locale, localization, transliteration, icu4e) +pkg_i18n_homepage = https://github.com/erlang-unicode/i18n +pkg_i18n_fetch = git +pkg_i18n_repo = https://github.com/erlang-unicode/i18n +pkg_i18n_commit = master + +PACKAGES += ibrowse +pkg_ibrowse_name = ibrowse +pkg_ibrowse_description = Erlang HTTP client +pkg_ibrowse_homepage = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_fetch = git +pkg_ibrowse_repo = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_commit = master + +PACKAGES += idna +pkg_idna_name = idna +pkg_idna_description = Erlang IDNA lib +pkg_idna_homepage = https://github.com/benoitc/erlang-idna +pkg_idna_fetch = git +pkg_idna_repo = https://github.com/benoitc/erlang-idna +pkg_idna_commit = master + +PACKAGES += ierlang +pkg_ierlang_name = ierlang +pkg_ierlang_description = An Erlang language kernel for IPython. +pkg_ierlang_homepage = https://github.com/robbielynch/ierlang +pkg_ierlang_fetch = git +pkg_ierlang_repo = https://github.com/robbielynch/ierlang +pkg_ierlang_commit = master + +PACKAGES += iota +pkg_iota_name = iota +pkg_iota_description = iota (Inter-dependency Objective Testing Apparatus) - a tool to enforce clean separation of responsibilities in Erlang code +pkg_iota_homepage = https://github.com/jpgneves/iota +pkg_iota_fetch = git +pkg_iota_repo = https://github.com/jpgneves/iota +pkg_iota_commit = master + +PACKAGES += irc_lib +pkg_irc_lib_name = irc_lib +pkg_irc_lib_description = Erlang irc client library +pkg_irc_lib_homepage = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_fetch = git +pkg_irc_lib_repo = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_commit = master + +PACKAGES += ircd +pkg_ircd_name = ircd +pkg_ircd_description = A pluggable IRC daemon application/library for Erlang. +pkg_ircd_homepage = https://github.com/tonyg/erlang-ircd +pkg_ircd_fetch = git +pkg_ircd_repo = https://github.com/tonyg/erlang-ircd +pkg_ircd_commit = master + +PACKAGES += iris +pkg_iris_name = iris +pkg_iris_description = Iris Erlang binding +pkg_iris_homepage = https://github.com/project-iris/iris-erl +pkg_iris_fetch = git +pkg_iris_repo = https://github.com/project-iris/iris-erl +pkg_iris_commit = master + +PACKAGES += iso8601 +pkg_iso8601_name = iso8601 +pkg_iso8601_description = Erlang ISO 8601 date formatter/parser +pkg_iso8601_homepage = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_fetch = git +pkg_iso8601_repo = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_commit = master + +PACKAGES += jamdb_sybase +pkg_jamdb_sybase_name = jamdb_sybase +pkg_jamdb_sybase_description = Erlang driver for SAP Sybase ASE +pkg_jamdb_sybase_homepage = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_fetch = git +pkg_jamdb_sybase_repo = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_commit = master + +PACKAGES += jerg +pkg_jerg_name = jerg +pkg_jerg_description = JSON Schema to Erlang Records Generator +pkg_jerg_homepage = https://github.com/ddossot/jerg +pkg_jerg_fetch = git +pkg_jerg_repo = https://github.com/ddossot/jerg +pkg_jerg_commit = master + +PACKAGES += jesse +pkg_jesse_name = jesse +pkg_jesse_description = jesse (JSon Schema Erlang) is an implementation of a json schema validator for Erlang. +pkg_jesse_homepage = https://github.com/for-GET/jesse +pkg_jesse_fetch = git +pkg_jesse_repo = https://github.com/for-GET/jesse +pkg_jesse_commit = master + +PACKAGES += jiffy +pkg_jiffy_name = jiffy +pkg_jiffy_description = JSON NIFs for Erlang. +pkg_jiffy_homepage = https://github.com/davisp/jiffy +pkg_jiffy_fetch = git +pkg_jiffy_repo = https://github.com/davisp/jiffy +pkg_jiffy_commit = master + +PACKAGES += jiffy_v +pkg_jiffy_v_name = jiffy_v +pkg_jiffy_v_description = JSON validation utility +pkg_jiffy_v_homepage = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_fetch = git +pkg_jiffy_v_repo = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_commit = master + +PACKAGES += jobs +pkg_jobs_name = jobs +pkg_jobs_description = a Job scheduler for load regulation +pkg_jobs_homepage = https://github.com/esl/jobs +pkg_jobs_fetch = git +pkg_jobs_repo = https://github.com/esl/jobs +pkg_jobs_commit = master + +PACKAGES += joxa +pkg_joxa_name = joxa +pkg_joxa_description = A Modern Lisp for the Erlang VM +pkg_joxa_homepage = https://github.com/joxa/joxa +pkg_joxa_fetch = git +pkg_joxa_repo = https://github.com/joxa/joxa +pkg_joxa_commit = master + +PACKAGES += json +pkg_json_name = json +pkg_json_description = a high level json library for erlang (17.0+) +pkg_json_homepage = https://github.com/talentdeficit/json +pkg_json_fetch = git +pkg_json_repo = https://github.com/talentdeficit/json +pkg_json_commit = master + +PACKAGES += json_rec +pkg_json_rec_name = json_rec +pkg_json_rec_description = JSON to erlang record +pkg_json_rec_homepage = https://github.com/justinkirby/json_rec +pkg_json_rec_fetch = git +pkg_json_rec_repo = https://github.com/justinkirby/json_rec +pkg_json_rec_commit = master + +PACKAGES += jsone +pkg_jsone_name = jsone +pkg_jsone_description = An Erlang library for encoding, decoding JSON data. +pkg_jsone_homepage = https://github.com/sile/jsone.git +pkg_jsone_fetch = git +pkg_jsone_repo = https://github.com/sile/jsone.git +pkg_jsone_commit = master + +PACKAGES += jsonerl +pkg_jsonerl_name = jsonerl +pkg_jsonerl_description = yet another but slightly different erlang <-> json encoder/decoder +pkg_jsonerl_homepage = https://github.com/lambder/jsonerl +pkg_jsonerl_fetch = git +pkg_jsonerl_repo = https://github.com/lambder/jsonerl +pkg_jsonerl_commit = master + +PACKAGES += jsonpath +pkg_jsonpath_name = jsonpath +pkg_jsonpath_description = Fast Erlang JSON data retrieval and updates via javascript-like notation +pkg_jsonpath_homepage = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_fetch = git +pkg_jsonpath_repo = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_commit = master + +PACKAGES += jsonx +pkg_jsonx_name = jsonx +pkg_jsonx_description = JSONX is an Erlang library for efficient decode and encode JSON, written in C. +pkg_jsonx_homepage = https://github.com/iskra/jsonx +pkg_jsonx_fetch = git +pkg_jsonx_repo = https://github.com/iskra/jsonx +pkg_jsonx_commit = master + +PACKAGES += jsx +pkg_jsx_name = jsx +pkg_jsx_description = An Erlang application for consuming, producing and manipulating JSON. +pkg_jsx_homepage = https://github.com/talentdeficit/jsx +pkg_jsx_fetch = git +pkg_jsx_repo = https://github.com/talentdeficit/jsx +pkg_jsx_commit = master + +PACKAGES += kafka +pkg_kafka_name = kafka +pkg_kafka_description = Kafka consumer and producer in Erlang +pkg_kafka_homepage = https://github.com/wooga/kafka-erlang +pkg_kafka_fetch = git +pkg_kafka_repo = https://github.com/wooga/kafka-erlang +pkg_kafka_commit = master + +PACKAGES += kafka_protocol +pkg_kafka_protocol_name = kafka_protocol +pkg_kafka_protocol_description = Kafka protocol Erlang library +pkg_kafka_protocol_homepage = https://github.com/klarna/kafka_protocol +pkg_kafka_protocol_fetch = git +pkg_kafka_protocol_repo = https://github.com/klarna/kafka_protocol.git +pkg_kafka_protocol_commit = master + +PACKAGES += kai +pkg_kai_name = kai +pkg_kai_description = DHT storage by Takeshi Inoue +pkg_kai_homepage = https://github.com/synrc/kai +pkg_kai_fetch = git +pkg_kai_repo = https://github.com/synrc/kai +pkg_kai_commit = master + +PACKAGES += katja +pkg_katja_name = katja +pkg_katja_description = A simple Riemann client written in Erlang. +pkg_katja_homepage = https://github.com/nifoc/katja +pkg_katja_fetch = git +pkg_katja_repo = https://github.com/nifoc/katja +pkg_katja_commit = master + +PACKAGES += kdht +pkg_kdht_name = kdht +pkg_kdht_description = kdht is an erlang DHT implementation +pkg_kdht_homepage = https://github.com/kevinlynx/kdht +pkg_kdht_fetch = git +pkg_kdht_repo = https://github.com/kevinlynx/kdht +pkg_kdht_commit = master + +PACKAGES += key2value +pkg_key2value_name = key2value +pkg_key2value_description = Erlang 2-way map +pkg_key2value_homepage = https://github.com/okeuday/key2value +pkg_key2value_fetch = git +pkg_key2value_repo = https://github.com/okeuday/key2value +pkg_key2value_commit = master + +PACKAGES += keys1value +pkg_keys1value_name = keys1value +pkg_keys1value_description = Erlang set associative map for key lists +pkg_keys1value_homepage = https://github.com/okeuday/keys1value +pkg_keys1value_fetch = git +pkg_keys1value_repo = https://github.com/okeuday/keys1value +pkg_keys1value_commit = master + +PACKAGES += kinetic +pkg_kinetic_name = kinetic +pkg_kinetic_description = Erlang Kinesis Client +pkg_kinetic_homepage = https://github.com/AdRoll/kinetic +pkg_kinetic_fetch = git +pkg_kinetic_repo = https://github.com/AdRoll/kinetic +pkg_kinetic_commit = master + +PACKAGES += kjell +pkg_kjell_name = kjell +pkg_kjell_description = Erlang Shell +pkg_kjell_homepage = https://github.com/karlll/kjell +pkg_kjell_fetch = git +pkg_kjell_repo = https://github.com/karlll/kjell +pkg_kjell_commit = master + +PACKAGES += kraken +pkg_kraken_name = kraken +pkg_kraken_description = Distributed Pubsub Server for Realtime Apps +pkg_kraken_homepage = https://github.com/Asana/kraken +pkg_kraken_fetch = git +pkg_kraken_repo = https://github.com/Asana/kraken +pkg_kraken_commit = master + +PACKAGES += kucumberl +pkg_kucumberl_name = kucumberl +pkg_kucumberl_description = A pure-erlang, open-source, implementation of Cucumber +pkg_kucumberl_homepage = https://github.com/openshine/kucumberl +pkg_kucumberl_fetch = git +pkg_kucumberl_repo = https://github.com/openshine/kucumberl +pkg_kucumberl_commit = master + +PACKAGES += kvc +pkg_kvc_name = kvc +pkg_kvc_description = KVC - Key Value Coding for Erlang data structures +pkg_kvc_homepage = https://github.com/etrepum/kvc +pkg_kvc_fetch = git +pkg_kvc_repo = https://github.com/etrepum/kvc +pkg_kvc_commit = master + +PACKAGES += kvlists +pkg_kvlists_name = kvlists +pkg_kvlists_description = Lists of key-value pairs (decoded JSON) in Erlang +pkg_kvlists_homepage = https://github.com/jcomellas/kvlists +pkg_kvlists_fetch = git +pkg_kvlists_repo = https://github.com/jcomellas/kvlists +pkg_kvlists_commit = master + +PACKAGES += kvs +pkg_kvs_name = kvs +pkg_kvs_description = Container and Iterator +pkg_kvs_homepage = https://github.com/synrc/kvs +pkg_kvs_fetch = git +pkg_kvs_repo = https://github.com/synrc/kvs +pkg_kvs_commit = master + +PACKAGES += lager +pkg_lager_name = lager +pkg_lager_description = A logging framework for Erlang/OTP. +pkg_lager_homepage = https://github.com/erlang-lager/lager +pkg_lager_fetch = git +pkg_lager_repo = https://github.com/erlang-lager/lager +pkg_lager_commit = master + +PACKAGES += lager_amqp_backend +pkg_lager_amqp_backend_name = lager_amqp_backend +pkg_lager_amqp_backend_description = AMQP RabbitMQ Lager backend +pkg_lager_amqp_backend_homepage = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_fetch = git +pkg_lager_amqp_backend_repo = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_commit = master + +PACKAGES += lager_syslog +pkg_lager_syslog_name = lager_syslog +pkg_lager_syslog_description = Syslog backend for lager +pkg_lager_syslog_homepage = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_fetch = git +pkg_lager_syslog_repo = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_commit = master + +PACKAGES += lambdapad +pkg_lambdapad_name = lambdapad +pkg_lambdapad_description = Static site generator using Erlang. Yes, Erlang. +pkg_lambdapad_homepage = https://github.com/gar1t/lambdapad +pkg_lambdapad_fetch = git +pkg_lambdapad_repo = https://github.com/gar1t/lambdapad +pkg_lambdapad_commit = master + +PACKAGES += lasp +pkg_lasp_name = lasp +pkg_lasp_description = A Language for Distributed, Eventually Consistent Computations +pkg_lasp_homepage = http://lasp-lang.org/ +pkg_lasp_fetch = git +pkg_lasp_repo = https://github.com/lasp-lang/lasp +pkg_lasp_commit = master + +PACKAGES += lasse +pkg_lasse_name = lasse +pkg_lasse_description = SSE handler for Cowboy +pkg_lasse_homepage = https://github.com/inaka/lasse +pkg_lasse_fetch = git +pkg_lasse_repo = https://github.com/inaka/lasse +pkg_lasse_commit = master + +PACKAGES += ldap +pkg_ldap_name = ldap +pkg_ldap_description = LDAP server written in Erlang +pkg_ldap_homepage = https://github.com/spawnproc/ldap +pkg_ldap_fetch = git +pkg_ldap_repo = https://github.com/spawnproc/ldap +pkg_ldap_commit = master + +PACKAGES += lethink +pkg_lethink_name = lethink +pkg_lethink_description = erlang driver for rethinkdb +pkg_lethink_homepage = https://github.com/taybin/lethink +pkg_lethink_fetch = git +pkg_lethink_repo = https://github.com/taybin/lethink +pkg_lethink_commit = master + +PACKAGES += lfe +pkg_lfe_name = lfe +pkg_lfe_description = Lisp Flavoured Erlang (LFE) +pkg_lfe_homepage = https://github.com/rvirding/lfe +pkg_lfe_fetch = git +pkg_lfe_repo = https://github.com/rvirding/lfe +pkg_lfe_commit = master + +PACKAGES += ling +pkg_ling_name = ling +pkg_ling_description = Erlang on Xen +pkg_ling_homepage = https://github.com/cloudozer/ling +pkg_ling_fetch = git +pkg_ling_repo = https://github.com/cloudozer/ling +pkg_ling_commit = master + +PACKAGES += live +pkg_live_name = live +pkg_live_description = Automated module and configuration reloader. +pkg_live_homepage = http://ninenines.eu +pkg_live_fetch = git +pkg_live_repo = https://github.com/ninenines/live +pkg_live_commit = master + +PACKAGES += lmq +pkg_lmq_name = lmq +pkg_lmq_description = Lightweight Message Queue +pkg_lmq_homepage = https://github.com/iij/lmq +pkg_lmq_fetch = git +pkg_lmq_repo = https://github.com/iij/lmq +pkg_lmq_commit = master + +PACKAGES += locker +pkg_locker_name = locker +pkg_locker_description = Atomic distributed 'check and set' for short-lived keys +pkg_locker_homepage = https://github.com/wooga/locker +pkg_locker_fetch = git +pkg_locker_repo = https://github.com/wooga/locker +pkg_locker_commit = master + +PACKAGES += locks +pkg_locks_name = locks +pkg_locks_description = A scalable, deadlock-resolving resource locker +pkg_locks_homepage = https://github.com/uwiger/locks +pkg_locks_fetch = git +pkg_locks_repo = https://github.com/uwiger/locks +pkg_locks_commit = master + +PACKAGES += log4erl +pkg_log4erl_name = log4erl +pkg_log4erl_description = A logger for erlang in the spirit of Log4J. +pkg_log4erl_homepage = https://github.com/ahmednawras/log4erl +pkg_log4erl_fetch = git +pkg_log4erl_repo = https://github.com/ahmednawras/log4erl +pkg_log4erl_commit = master + +PACKAGES += lol +pkg_lol_name = lol +pkg_lol_description = Lisp on erLang, and programming is fun again +pkg_lol_homepage = https://github.com/b0oh/lol +pkg_lol_fetch = git +pkg_lol_repo = https://github.com/b0oh/lol +pkg_lol_commit = master + +PACKAGES += lucid +pkg_lucid_name = lucid +pkg_lucid_description = HTTP/2 server written in Erlang +pkg_lucid_homepage = https://github.com/tatsuhiro-t/lucid +pkg_lucid_fetch = git +pkg_lucid_repo = https://github.com/tatsuhiro-t/lucid +pkg_lucid_commit = master + +PACKAGES += luerl +pkg_luerl_name = luerl +pkg_luerl_description = Lua in Erlang +pkg_luerl_homepage = https://github.com/rvirding/luerl +pkg_luerl_fetch = git +pkg_luerl_repo = https://github.com/rvirding/luerl +pkg_luerl_commit = develop + +PACKAGES += luwak +pkg_luwak_name = luwak +pkg_luwak_description = Large-object storage interface for Riak +pkg_luwak_homepage = https://github.com/basho/luwak +pkg_luwak_fetch = git +pkg_luwak_repo = https://github.com/basho/luwak +pkg_luwak_commit = master + +PACKAGES += lux +pkg_lux_name = lux +pkg_lux_description = Lux (LUcid eXpect scripting) simplifies test automation and provides an Expect-style execution of commands +pkg_lux_homepage = https://github.com/hawk/lux +pkg_lux_fetch = git +pkg_lux_repo = https://github.com/hawk/lux +pkg_lux_commit = master + +PACKAGES += machi +pkg_machi_name = machi +pkg_machi_description = Machi file store +pkg_machi_homepage = https://github.com/basho/machi +pkg_machi_fetch = git +pkg_machi_repo = https://github.com/basho/machi +pkg_machi_commit = master + +PACKAGES += mad +pkg_mad_name = mad +pkg_mad_description = Small and Fast Rebar Replacement +pkg_mad_homepage = https://github.com/synrc/mad +pkg_mad_fetch = git +pkg_mad_repo = https://github.com/synrc/mad +pkg_mad_commit = master + +PACKAGES += marina +pkg_marina_name = marina +pkg_marina_description = Non-blocking Erlang Cassandra CQL3 client +pkg_marina_homepage = https://github.com/lpgauth/marina +pkg_marina_fetch = git +pkg_marina_repo = https://github.com/lpgauth/marina +pkg_marina_commit = master + +PACKAGES += mavg +pkg_mavg_name = mavg +pkg_mavg_description = Erlang :: Exponential moving average library +pkg_mavg_homepage = https://github.com/EchoTeam/mavg +pkg_mavg_fetch = git +pkg_mavg_repo = https://github.com/EchoTeam/mavg +pkg_mavg_commit = master + +PACKAGES += mc_erl +pkg_mc_erl_name = mc_erl +pkg_mc_erl_description = mc-erl is a server for Minecraft 1.4.7 written in Erlang. +pkg_mc_erl_homepage = https://github.com/clonejo/mc-erl +pkg_mc_erl_fetch = git +pkg_mc_erl_repo = https://github.com/clonejo/mc-erl +pkg_mc_erl_commit = master + +PACKAGES += mcd +pkg_mcd_name = mcd +pkg_mcd_description = Fast memcached protocol client in pure Erlang +pkg_mcd_homepage = https://github.com/EchoTeam/mcd +pkg_mcd_fetch = git +pkg_mcd_repo = https://github.com/EchoTeam/mcd +pkg_mcd_commit = master + +PACKAGES += mcerlang +pkg_mcerlang_name = mcerlang +pkg_mcerlang_description = The McErlang model checker for Erlang +pkg_mcerlang_homepage = https://github.com/fredlund/McErlang +pkg_mcerlang_fetch = git +pkg_mcerlang_repo = https://github.com/fredlund/McErlang +pkg_mcerlang_commit = master + +PACKAGES += meck +pkg_meck_name = meck +pkg_meck_description = A mocking library for Erlang +pkg_meck_homepage = https://github.com/eproxus/meck +pkg_meck_fetch = git +pkg_meck_repo = https://github.com/eproxus/meck +pkg_meck_commit = master + +PACKAGES += mekao +pkg_mekao_name = mekao +pkg_mekao_description = SQL constructor +pkg_mekao_homepage = https://github.com/ddosia/mekao +pkg_mekao_fetch = git +pkg_mekao_repo = https://github.com/ddosia/mekao +pkg_mekao_commit = master + +PACKAGES += memo +pkg_memo_name = memo +pkg_memo_description = Erlang memoization server +pkg_memo_homepage = https://github.com/tuncer/memo +pkg_memo_fetch = git +pkg_memo_repo = https://github.com/tuncer/memo +pkg_memo_commit = master + +PACKAGES += merge_index +pkg_merge_index_name = merge_index +pkg_merge_index_description = MergeIndex is an Erlang library for storing ordered sets on disk. It is very similar to an SSTable (in Google's Bigtable) or an HFile (in Hadoop). +pkg_merge_index_homepage = https://github.com/basho/merge_index +pkg_merge_index_fetch = git +pkg_merge_index_repo = https://github.com/basho/merge_index +pkg_merge_index_commit = master + +PACKAGES += merl +pkg_merl_name = merl +pkg_merl_description = Metaprogramming in Erlang +pkg_merl_homepage = https://github.com/richcarl/merl +pkg_merl_fetch = git +pkg_merl_repo = https://github.com/richcarl/merl +pkg_merl_commit = master + +PACKAGES += mimerl +pkg_mimerl_name = mimerl +pkg_mimerl_description = library to handle mimetypes +pkg_mimerl_homepage = https://github.com/benoitc/mimerl +pkg_mimerl_fetch = git +pkg_mimerl_repo = https://github.com/benoitc/mimerl +pkg_mimerl_commit = master + +PACKAGES += mimetypes +pkg_mimetypes_name = mimetypes +pkg_mimetypes_description = Erlang MIME types library +pkg_mimetypes_homepage = https://github.com/spawngrid/mimetypes +pkg_mimetypes_fetch = git +pkg_mimetypes_repo = https://github.com/spawngrid/mimetypes +pkg_mimetypes_commit = master + +PACKAGES += mixer +pkg_mixer_name = mixer +pkg_mixer_description = Mix in functions from other modules +pkg_mixer_homepage = https://github.com/chef/mixer +pkg_mixer_fetch = git +pkg_mixer_repo = https://github.com/chef/mixer +pkg_mixer_commit = master + +PACKAGES += mochiweb +pkg_mochiweb_name = mochiweb +pkg_mochiweb_description = MochiWeb is an Erlang library for building lightweight HTTP servers. +pkg_mochiweb_homepage = https://github.com/mochi/mochiweb +pkg_mochiweb_fetch = git +pkg_mochiweb_repo = https://github.com/mochi/mochiweb +pkg_mochiweb_commit = master + +PACKAGES += mochiweb_xpath +pkg_mochiweb_xpath_name = mochiweb_xpath +pkg_mochiweb_xpath_description = XPath support for mochiweb's html parser +pkg_mochiweb_xpath_homepage = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_fetch = git +pkg_mochiweb_xpath_repo = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_commit = master + +PACKAGES += mockgyver +pkg_mockgyver_name = mockgyver +pkg_mockgyver_description = A mocking library for Erlang +pkg_mockgyver_homepage = https://github.com/klajo/mockgyver +pkg_mockgyver_fetch = git +pkg_mockgyver_repo = https://github.com/klajo/mockgyver +pkg_mockgyver_commit = master + +PACKAGES += modlib +pkg_modlib_name = modlib +pkg_modlib_description = Web framework based on Erlang's inets httpd +pkg_modlib_homepage = https://github.com/gar1t/modlib +pkg_modlib_fetch = git +pkg_modlib_repo = https://github.com/gar1t/modlib +pkg_modlib_commit = master + +PACKAGES += mongodb +pkg_mongodb_name = mongodb +pkg_mongodb_description = MongoDB driver for Erlang +pkg_mongodb_homepage = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_fetch = git +pkg_mongodb_repo = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_commit = master + +PACKAGES += mongooseim +pkg_mongooseim_name = mongooseim +pkg_mongooseim_description = Jabber / XMPP server with focus on performance and scalability, by Erlang Solutions +pkg_mongooseim_homepage = https://www.erlang-solutions.com/products/mongooseim-massively-scalable-ejabberd-platform +pkg_mongooseim_fetch = git +pkg_mongooseim_repo = https://github.com/esl/MongooseIM +pkg_mongooseim_commit = master + +PACKAGES += moyo +pkg_moyo_name = moyo +pkg_moyo_description = Erlang utility functions library +pkg_moyo_homepage = https://github.com/dwango/moyo +pkg_moyo_fetch = git +pkg_moyo_repo = https://github.com/dwango/moyo +pkg_moyo_commit = master + +PACKAGES += msgpack +pkg_msgpack_name = msgpack +pkg_msgpack_description = MessagePack (de)serializer implementation for Erlang +pkg_msgpack_homepage = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_fetch = git +pkg_msgpack_repo = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_commit = master + +PACKAGES += mu2 +pkg_mu2_name = mu2 +pkg_mu2_description = Erlang mutation testing tool +pkg_mu2_homepage = https://github.com/ramsay-t/mu2 +pkg_mu2_fetch = git +pkg_mu2_repo = https://github.com/ramsay-t/mu2 +pkg_mu2_commit = master + +PACKAGES += mustache +pkg_mustache_name = mustache +pkg_mustache_description = Mustache template engine for Erlang. +pkg_mustache_homepage = https://github.com/mojombo/mustache.erl +pkg_mustache_fetch = git +pkg_mustache_repo = https://github.com/mojombo/mustache.erl +pkg_mustache_commit = master + +PACKAGES += myproto +pkg_myproto_name = myproto +pkg_myproto_description = MySQL Server Protocol in Erlang +pkg_myproto_homepage = https://github.com/altenwald/myproto +pkg_myproto_fetch = git +pkg_myproto_repo = https://github.com/altenwald/myproto +pkg_myproto_commit = master + +PACKAGES += mysql +pkg_mysql_name = mysql +pkg_mysql_description = Erlang MySQL Driver (from code.google.com) +pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_fetch = git +pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_commit = master + +PACKAGES += n2o +pkg_n2o_name = n2o +pkg_n2o_description = WebSocket Application Server +pkg_n2o_homepage = https://github.com/5HT/n2o +pkg_n2o_fetch = git +pkg_n2o_repo = https://github.com/5HT/n2o +pkg_n2o_commit = master + +PACKAGES += nat_upnp +pkg_nat_upnp_name = nat_upnp +pkg_nat_upnp_description = Erlang library to map your internal port to an external using UNP IGD +pkg_nat_upnp_homepage = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_fetch = git +pkg_nat_upnp_repo = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_commit = master + +PACKAGES += neo4j +pkg_neo4j_name = neo4j +pkg_neo4j_description = Erlang client library for Neo4J. +pkg_neo4j_homepage = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_fetch = git +pkg_neo4j_repo = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_commit = master + +PACKAGES += neotoma +pkg_neotoma_name = neotoma +pkg_neotoma_description = Erlang library and packrat parser-generator for parsing expression grammars. +pkg_neotoma_homepage = https://github.com/seancribbs/neotoma +pkg_neotoma_fetch = git +pkg_neotoma_repo = https://github.com/seancribbs/neotoma +pkg_neotoma_commit = master + +PACKAGES += newrelic +pkg_newrelic_name = newrelic +pkg_newrelic_description = Erlang library for sending metrics to New Relic +pkg_newrelic_homepage = https://github.com/wooga/newrelic-erlang +pkg_newrelic_fetch = git +pkg_newrelic_repo = https://github.com/wooga/newrelic-erlang +pkg_newrelic_commit = master + +PACKAGES += nifty +pkg_nifty_name = nifty +pkg_nifty_description = Erlang NIF wrapper generator +pkg_nifty_homepage = https://github.com/parapluu/nifty +pkg_nifty_fetch = git +pkg_nifty_repo = https://github.com/parapluu/nifty +pkg_nifty_commit = master + +PACKAGES += nitrogen_core +pkg_nitrogen_core_name = nitrogen_core +pkg_nitrogen_core_description = The core Nitrogen library. +pkg_nitrogen_core_homepage = http://nitrogenproject.com/ +pkg_nitrogen_core_fetch = git +pkg_nitrogen_core_repo = https://github.com/nitrogen/nitrogen_core +pkg_nitrogen_core_commit = master + +PACKAGES += nkbase +pkg_nkbase_name = nkbase +pkg_nkbase_description = NkBASE distributed database +pkg_nkbase_homepage = https://github.com/Nekso/nkbase +pkg_nkbase_fetch = git +pkg_nkbase_repo = https://github.com/Nekso/nkbase +pkg_nkbase_commit = develop + +PACKAGES += nkdocker +pkg_nkdocker_name = nkdocker +pkg_nkdocker_description = Erlang Docker client +pkg_nkdocker_homepage = https://github.com/Nekso/nkdocker +pkg_nkdocker_fetch = git +pkg_nkdocker_repo = https://github.com/Nekso/nkdocker +pkg_nkdocker_commit = master + +PACKAGES += nkpacket +pkg_nkpacket_name = nkpacket +pkg_nkpacket_description = Generic Erlang transport layer +pkg_nkpacket_homepage = https://github.com/Nekso/nkpacket +pkg_nkpacket_fetch = git +pkg_nkpacket_repo = https://github.com/Nekso/nkpacket +pkg_nkpacket_commit = master + +PACKAGES += nksip +pkg_nksip_name = nksip +pkg_nksip_description = Erlang SIP application server +pkg_nksip_homepage = https://github.com/kalta/nksip +pkg_nksip_fetch = git +pkg_nksip_repo = https://github.com/kalta/nksip +pkg_nksip_commit = master + +PACKAGES += nodefinder +pkg_nodefinder_name = nodefinder +pkg_nodefinder_description = automatic node discovery via UDP multicast +pkg_nodefinder_homepage = https://github.com/erlanger/nodefinder +pkg_nodefinder_fetch = git +pkg_nodefinder_repo = https://github.com/okeuday/nodefinder +pkg_nodefinder_commit = master + +PACKAGES += nprocreg +pkg_nprocreg_name = nprocreg +pkg_nprocreg_description = Minimal Distributed Erlang Process Registry +pkg_nprocreg_homepage = http://nitrogenproject.com/ +pkg_nprocreg_fetch = git +pkg_nprocreg_repo = https://github.com/nitrogen/nprocreg +pkg_nprocreg_commit = master + +PACKAGES += oauth +pkg_oauth_name = oauth +pkg_oauth_description = An Erlang OAuth 1.0 implementation +pkg_oauth_homepage = https://github.com/tim/erlang-oauth +pkg_oauth_fetch = git +pkg_oauth_repo = https://github.com/tim/erlang-oauth +pkg_oauth_commit = master + +PACKAGES += oauth2 +pkg_oauth2_name = oauth2 +pkg_oauth2_description = Erlang Oauth2 implementation +pkg_oauth2_homepage = https://github.com/kivra/oauth2 +pkg_oauth2_fetch = git +pkg_oauth2_repo = https://github.com/kivra/oauth2 +pkg_oauth2_commit = master + +PACKAGES += observer_cli +pkg_observer_cli_name = observer_cli +pkg_observer_cli_description = Visualize Erlang/Elixir Nodes On The Command Line +pkg_observer_cli_homepage = http://zhongwencool.github.io/observer_cli +pkg_observer_cli_fetch = git +pkg_observer_cli_repo = https://github.com/zhongwencool/observer_cli +pkg_observer_cli_commit = master + +PACKAGES += octopus +pkg_octopus_name = octopus +pkg_octopus_description = Small and flexible pool manager written in Erlang +pkg_octopus_homepage = https://github.com/erlangbureau/octopus +pkg_octopus_fetch = git +pkg_octopus_repo = https://github.com/erlangbureau/octopus +pkg_octopus_commit = master + +PACKAGES += of_protocol +pkg_of_protocol_name = of_protocol +pkg_of_protocol_description = OpenFlow Protocol Library for Erlang +pkg_of_protocol_homepage = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_fetch = git +pkg_of_protocol_repo = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_commit = master + +PACKAGES += opencouch +pkg_opencouch_name = couch +pkg_opencouch_description = A embeddable document oriented database compatible with Apache CouchDB +pkg_opencouch_homepage = https://github.com/benoitc/opencouch +pkg_opencouch_fetch = git +pkg_opencouch_repo = https://github.com/benoitc/opencouch +pkg_opencouch_commit = master + +PACKAGES += openflow +pkg_openflow_name = openflow +pkg_openflow_description = An OpenFlow controller written in pure erlang +pkg_openflow_homepage = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_fetch = git +pkg_openflow_repo = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_commit = master + +PACKAGES += openid +pkg_openid_name = openid +pkg_openid_description = Erlang OpenID +pkg_openid_homepage = https://github.com/brendonh/erl_openid +pkg_openid_fetch = git +pkg_openid_repo = https://github.com/brendonh/erl_openid +pkg_openid_commit = master + +PACKAGES += openpoker +pkg_openpoker_name = openpoker +pkg_openpoker_description = Genesis Texas hold'em Game Server +pkg_openpoker_homepage = https://github.com/hpyhacking/openpoker +pkg_openpoker_fetch = git +pkg_openpoker_repo = https://github.com/hpyhacking/openpoker +pkg_openpoker_commit = master + +PACKAGES += otpbp +pkg_otpbp_name = otpbp +pkg_otpbp_description = Parse transformer for use new OTP functions in old Erlang/OTP releases (R15, R16, 17, 18, 19) +pkg_otpbp_homepage = https://github.com/Ledest/otpbp +pkg_otpbp_fetch = git +pkg_otpbp_repo = https://github.com/Ledest/otpbp +pkg_otpbp_commit = master + +PACKAGES += pal +pkg_pal_name = pal +pkg_pal_description = Pragmatic Authentication Library +pkg_pal_homepage = https://github.com/manifest/pal +pkg_pal_fetch = git +pkg_pal_repo = https://github.com/manifest/pal +pkg_pal_commit = master + +PACKAGES += parse_trans +pkg_parse_trans_name = parse_trans +pkg_parse_trans_description = Parse transform utilities for Erlang +pkg_parse_trans_homepage = https://github.com/uwiger/parse_trans +pkg_parse_trans_fetch = git +pkg_parse_trans_repo = https://github.com/uwiger/parse_trans +pkg_parse_trans_commit = master + +PACKAGES += parsexml +pkg_parsexml_name = parsexml +pkg_parsexml_description = Simple DOM XML parser with convenient and very simple API +pkg_parsexml_homepage = https://github.com/maxlapshin/parsexml +pkg_parsexml_fetch = git +pkg_parsexml_repo = https://github.com/maxlapshin/parsexml +pkg_parsexml_commit = master + +PACKAGES += pegjs +pkg_pegjs_name = pegjs +pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. +pkg_pegjs_homepage = https://github.com/dmitriid/pegjs +pkg_pegjs_fetch = git +pkg_pegjs_repo = https://github.com/dmitriid/pegjs +pkg_pegjs_commit = master + +PACKAGES += percept2 +pkg_percept2_name = percept2 +pkg_percept2_description = Concurrent profiling tool for Erlang +pkg_percept2_homepage = https://github.com/huiqing/percept2 +pkg_percept2_fetch = git +pkg_percept2_repo = https://github.com/huiqing/percept2 +pkg_percept2_commit = master + +PACKAGES += pgo +pkg_pgo_name = pgo +pkg_pgo_description = Erlang Postgres client and connection pool +pkg_pgo_homepage = https://github.com/erleans/pgo.git +pkg_pgo_fetch = git +pkg_pgo_repo = https://github.com/erleans/pgo.git +pkg_pgo_commit = master + +PACKAGES += pgsql +pkg_pgsql_name = pgsql +pkg_pgsql_description = Erlang PostgreSQL driver +pkg_pgsql_homepage = https://github.com/semiocast/pgsql +pkg_pgsql_fetch = git +pkg_pgsql_repo = https://github.com/semiocast/pgsql +pkg_pgsql_commit = master + +PACKAGES += pkgx +pkg_pkgx_name = pkgx +pkg_pkgx_description = Build .deb packages from Erlang releases +pkg_pkgx_homepage = https://github.com/arjan/pkgx +pkg_pkgx_fetch = git +pkg_pkgx_repo = https://github.com/arjan/pkgx +pkg_pkgx_commit = master + +PACKAGES += pkt +pkg_pkt_name = pkt +pkg_pkt_description = Erlang network protocol library +pkg_pkt_homepage = https://github.com/msantos/pkt +pkg_pkt_fetch = git +pkg_pkt_repo = https://github.com/msantos/pkt +pkg_pkt_commit = master + +PACKAGES += plain_fsm +pkg_plain_fsm_name = plain_fsm +pkg_plain_fsm_description = A behaviour/support library for writing plain Erlang FSMs. +pkg_plain_fsm_homepage = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_fetch = git +pkg_plain_fsm_repo = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_commit = master + +PACKAGES += plumtree +pkg_plumtree_name = plumtree +pkg_plumtree_description = Epidemic Broadcast Trees +pkg_plumtree_homepage = https://github.com/helium/plumtree +pkg_plumtree_fetch = git +pkg_plumtree_repo = https://github.com/helium/plumtree +pkg_plumtree_commit = master + +PACKAGES += pmod_transform +pkg_pmod_transform_name = pmod_transform +pkg_pmod_transform_description = Parse transform for parameterized modules +pkg_pmod_transform_homepage = https://github.com/erlang/pmod_transform +pkg_pmod_transform_fetch = git +pkg_pmod_transform_repo = https://github.com/erlang/pmod_transform +pkg_pmod_transform_commit = master + +PACKAGES += pobox +pkg_pobox_name = pobox +pkg_pobox_description = External buffer processes to protect against mailbox overflow in Erlang +pkg_pobox_homepage = https://github.com/ferd/pobox +pkg_pobox_fetch = git +pkg_pobox_repo = https://github.com/ferd/pobox +pkg_pobox_commit = master + +PACKAGES += ponos +pkg_ponos_name = ponos +pkg_ponos_description = ponos is a simple yet powerful load generator written in erlang +pkg_ponos_homepage = https://github.com/klarna/ponos +pkg_ponos_fetch = git +pkg_ponos_repo = https://github.com/klarna/ponos +pkg_ponos_commit = master + +PACKAGES += poolboy +pkg_poolboy_name = poolboy +pkg_poolboy_description = A hunky Erlang worker pool factory +pkg_poolboy_homepage = https://github.com/devinus/poolboy +pkg_poolboy_fetch = git +pkg_poolboy_repo = https://github.com/devinus/poolboy +pkg_poolboy_commit = master + +PACKAGES += pooler +pkg_pooler_name = pooler +pkg_pooler_description = An OTP Process Pool Application +pkg_pooler_homepage = https://github.com/seth/pooler +pkg_pooler_fetch = git +pkg_pooler_repo = https://github.com/seth/pooler +pkg_pooler_commit = master + +PACKAGES += pqueue +pkg_pqueue_name = pqueue +pkg_pqueue_description = Erlang Priority Queues +pkg_pqueue_homepage = https://github.com/okeuday/pqueue +pkg_pqueue_fetch = git +pkg_pqueue_repo = https://github.com/okeuday/pqueue +pkg_pqueue_commit = master + +PACKAGES += procket +pkg_procket_name = procket +pkg_procket_description = Erlang interface to low level socket operations +pkg_procket_homepage = http://blog.listincomprehension.com/search/label/procket +pkg_procket_fetch = git +pkg_procket_repo = https://github.com/msantos/procket +pkg_procket_commit = master + +PACKAGES += prop +pkg_prop_name = prop +pkg_prop_description = An Erlang code scaffolding and generator system. +pkg_prop_homepage = https://github.com/nuex/prop +pkg_prop_fetch = git +pkg_prop_repo = https://github.com/nuex/prop +pkg_prop_commit = master + +PACKAGES += proper +pkg_proper_name = proper +pkg_proper_description = PropEr: a QuickCheck-inspired property-based testing tool for Erlang. +pkg_proper_homepage = http://proper.softlab.ntua.gr +pkg_proper_fetch = git +pkg_proper_repo = https://github.com/manopapad/proper +pkg_proper_commit = master + +PACKAGES += props +pkg_props_name = props +pkg_props_description = Property structure library +pkg_props_homepage = https://github.com/greyarea/props +pkg_props_fetch = git +pkg_props_repo = https://github.com/greyarea/props +pkg_props_commit = master + +PACKAGES += protobuffs +pkg_protobuffs_name = protobuffs +pkg_protobuffs_description = An implementation of Google's Protocol Buffers for Erlang, based on ngerakines/erlang_protobuffs. +pkg_protobuffs_homepage = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_fetch = git +pkg_protobuffs_repo = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_commit = master + +PACKAGES += psycho +pkg_psycho_name = psycho +pkg_psycho_description = HTTP server that provides a WSGI-like interface for applications and middleware. +pkg_psycho_homepage = https://github.com/gar1t/psycho +pkg_psycho_fetch = git +pkg_psycho_repo = https://github.com/gar1t/psycho +pkg_psycho_commit = master + +PACKAGES += purity +pkg_purity_name = purity +pkg_purity_description = A side-effect analyzer for Erlang +pkg_purity_homepage = https://github.com/mpitid/purity +pkg_purity_fetch = git +pkg_purity_repo = https://github.com/mpitid/purity +pkg_purity_commit = master + +PACKAGES += push_service +pkg_push_service_name = push_service +pkg_push_service_description = Push service +pkg_push_service_homepage = https://github.com/hairyhum/push_service +pkg_push_service_fetch = git +pkg_push_service_repo = https://github.com/hairyhum/push_service +pkg_push_service_commit = master + +PACKAGES += qdate +pkg_qdate_name = qdate +pkg_qdate_description = Date, time, and timezone parsing, formatting, and conversion for Erlang. +pkg_qdate_homepage = https://github.com/choptastic/qdate +pkg_qdate_fetch = git +pkg_qdate_repo = https://github.com/choptastic/qdate +pkg_qdate_commit = master + +PACKAGES += qrcode +pkg_qrcode_name = qrcode +pkg_qrcode_description = QR Code encoder in Erlang +pkg_qrcode_homepage = https://github.com/komone/qrcode +pkg_qrcode_fetch = git +pkg_qrcode_repo = https://github.com/komone/qrcode +pkg_qrcode_commit = master + +PACKAGES += quest +pkg_quest_name = quest +pkg_quest_description = Learn Erlang through this set of challenges. An interactive system for getting to know Erlang. +pkg_quest_homepage = https://github.com/eriksoe/ErlangQuest +pkg_quest_fetch = git +pkg_quest_repo = https://github.com/eriksoe/ErlangQuest +pkg_quest_commit = master + +PACKAGES += quickrand +pkg_quickrand_name = quickrand +pkg_quickrand_description = Quick Erlang Random Number Generation +pkg_quickrand_homepage = https://github.com/okeuday/quickrand +pkg_quickrand_fetch = git +pkg_quickrand_repo = https://github.com/okeuday/quickrand +pkg_quickrand_commit = master + +PACKAGES += rabbit +pkg_rabbit_name = rabbit +pkg_rabbit_description = RabbitMQ Server +pkg_rabbit_homepage = https://www.rabbitmq.com/ +pkg_rabbit_fetch = git +pkg_rabbit_repo = https://github.com/rabbitmq/rabbitmq-server.git +pkg_rabbit_commit = master + +PACKAGES += rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_name = rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_description = Custom RabbitMQ exchange type for sticking messages in Riak +pkg_rabbit_exchange_type_riak_homepage = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_fetch = git +pkg_rabbit_exchange_type_riak_repo = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_commit = master + +PACKAGES += rack +pkg_rack_name = rack +pkg_rack_description = Rack handler for erlang +pkg_rack_homepage = https://github.com/erlyvideo/rack +pkg_rack_fetch = git +pkg_rack_repo = https://github.com/erlyvideo/rack +pkg_rack_commit = master + +PACKAGES += radierl +pkg_radierl_name = radierl +pkg_radierl_description = RADIUS protocol stack implemented in Erlang. +pkg_radierl_homepage = https://github.com/vances/radierl +pkg_radierl_fetch = git +pkg_radierl_repo = https://github.com/vances/radierl +pkg_radierl_commit = master + +PACKAGES += rafter +pkg_rafter_name = rafter +pkg_rafter_description = An Erlang library application which implements the Raft consensus protocol +pkg_rafter_homepage = https://github.com/andrewjstone/rafter +pkg_rafter_fetch = git +pkg_rafter_repo = https://github.com/andrewjstone/rafter +pkg_rafter_commit = master + +PACKAGES += ranch +pkg_ranch_name = ranch +pkg_ranch_description = Socket acceptor pool for TCP protocols. +pkg_ranch_homepage = http://ninenines.eu +pkg_ranch_fetch = git +pkg_ranch_repo = https://github.com/ninenines/ranch +pkg_ranch_commit = 1.2.1 + +PACKAGES += rbeacon +pkg_rbeacon_name = rbeacon +pkg_rbeacon_description = LAN discovery and presence in Erlang. +pkg_rbeacon_homepage = https://github.com/refuge/rbeacon +pkg_rbeacon_fetch = git +pkg_rbeacon_repo = https://github.com/refuge/rbeacon +pkg_rbeacon_commit = master + +PACKAGES += rebar +pkg_rebar_name = rebar +pkg_rebar_description = Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. +pkg_rebar_homepage = http://www.rebar3.org +pkg_rebar_fetch = git +pkg_rebar_repo = https://github.com/rebar/rebar3 +pkg_rebar_commit = master + +PACKAGES += rebus +pkg_rebus_name = rebus +pkg_rebus_description = A stupid simple, internal, pub/sub event bus written in- and for Erlang. +pkg_rebus_homepage = https://github.com/olle/rebus +pkg_rebus_fetch = git +pkg_rebus_repo = https://github.com/olle/rebus +pkg_rebus_commit = master + +PACKAGES += rec2json +pkg_rec2json_name = rec2json +pkg_rec2json_description = Compile erlang record definitions into modules to convert them to/from json easily. +pkg_rec2json_homepage = https://github.com/lordnull/rec2json +pkg_rec2json_fetch = git +pkg_rec2json_repo = https://github.com/lordnull/rec2json +pkg_rec2json_commit = master + +PACKAGES += recon +pkg_recon_name = recon +pkg_recon_description = Collection of functions and scripts to debug Erlang in production. +pkg_recon_homepage = https://github.com/ferd/recon +pkg_recon_fetch = git +pkg_recon_repo = https://github.com/ferd/recon +pkg_recon_commit = master + +PACKAGES += record_info +pkg_record_info_name = record_info +pkg_record_info_description = Convert between record and proplist +pkg_record_info_homepage = https://github.com/bipthelin/erlang-record_info +pkg_record_info_fetch = git +pkg_record_info_repo = https://github.com/bipthelin/erlang-record_info +pkg_record_info_commit = master + +PACKAGES += redgrid +pkg_redgrid_name = redgrid +pkg_redgrid_description = automatic Erlang node discovery via redis +pkg_redgrid_homepage = https://github.com/jkvor/redgrid +pkg_redgrid_fetch = git +pkg_redgrid_repo = https://github.com/jkvor/redgrid +pkg_redgrid_commit = master + +PACKAGES += redo +pkg_redo_name = redo +pkg_redo_description = pipelined erlang redis client +pkg_redo_homepage = https://github.com/jkvor/redo +pkg_redo_fetch = git +pkg_redo_repo = https://github.com/jkvor/redo +pkg_redo_commit = master + +PACKAGES += reload_mk +pkg_reload_mk_name = reload_mk +pkg_reload_mk_description = Live reload plugin for erlang.mk. +pkg_reload_mk_homepage = https://github.com/bullno1/reload.mk +pkg_reload_mk_fetch = git +pkg_reload_mk_repo = https://github.com/bullno1/reload.mk +pkg_reload_mk_commit = master + +PACKAGES += reltool_util +pkg_reltool_util_name = reltool_util +pkg_reltool_util_description = Erlang reltool utility functionality application +pkg_reltool_util_homepage = https://github.com/okeuday/reltool_util +pkg_reltool_util_fetch = git +pkg_reltool_util_repo = https://github.com/okeuday/reltool_util +pkg_reltool_util_commit = master + +PACKAGES += relx +pkg_relx_name = relx +pkg_relx_description = Sane, simple release creation for Erlang +pkg_relx_homepage = https://github.com/erlware/relx +pkg_relx_fetch = git +pkg_relx_repo = https://github.com/erlware/relx +pkg_relx_commit = master + +PACKAGES += resource_discovery +pkg_resource_discovery_name = resource_discovery +pkg_resource_discovery_description = An application used to dynamically discover resources present in an Erlang node cluster. +pkg_resource_discovery_homepage = http://erlware.org/ +pkg_resource_discovery_fetch = git +pkg_resource_discovery_repo = https://github.com/erlware/resource_discovery +pkg_resource_discovery_commit = master + +PACKAGES += restc +pkg_restc_name = restc +pkg_restc_description = Erlang Rest Client +pkg_restc_homepage = https://github.com/kivra/restclient +pkg_restc_fetch = git +pkg_restc_repo = https://github.com/kivra/restclient +pkg_restc_commit = master + +PACKAGES += rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_name = rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_description = Erlang RFC4627 (JSON) codec and JSON-RPC server implementation. +pkg_rfc4627_jsonrpc_homepage = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_fetch = git +pkg_rfc4627_jsonrpc_repo = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_commit = master + +PACKAGES += riak_control +pkg_riak_control_name = riak_control +pkg_riak_control_description = Webmachine-based administration interface for Riak. +pkg_riak_control_homepage = https://github.com/basho/riak_control +pkg_riak_control_fetch = git +pkg_riak_control_repo = https://github.com/basho/riak_control +pkg_riak_control_commit = master + +PACKAGES += riak_core +pkg_riak_core_name = riak_core +pkg_riak_core_description = Distributed systems infrastructure used by Riak. +pkg_riak_core_homepage = https://github.com/basho/riak_core +pkg_riak_core_fetch = git +pkg_riak_core_repo = https://github.com/basho/riak_core +pkg_riak_core_commit = master + +PACKAGES += riak_dt +pkg_riak_dt_name = riak_dt +pkg_riak_dt_description = Convergent replicated datatypes in Erlang +pkg_riak_dt_homepage = https://github.com/basho/riak_dt +pkg_riak_dt_fetch = git +pkg_riak_dt_repo = https://github.com/basho/riak_dt +pkg_riak_dt_commit = master + +PACKAGES += riak_ensemble +pkg_riak_ensemble_name = riak_ensemble +pkg_riak_ensemble_description = Multi-Paxos framework in Erlang +pkg_riak_ensemble_homepage = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_fetch = git +pkg_riak_ensemble_repo = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_commit = master + +PACKAGES += riak_kv +pkg_riak_kv_name = riak_kv +pkg_riak_kv_description = Riak Key/Value Store +pkg_riak_kv_homepage = https://github.com/basho/riak_kv +pkg_riak_kv_fetch = git +pkg_riak_kv_repo = https://github.com/basho/riak_kv +pkg_riak_kv_commit = master + +PACKAGES += riak_pg +pkg_riak_pg_name = riak_pg +pkg_riak_pg_description = Distributed process groups with riak_core. +pkg_riak_pg_homepage = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_fetch = git +pkg_riak_pg_repo = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_commit = master + +PACKAGES += riak_pipe +pkg_riak_pipe_name = riak_pipe +pkg_riak_pipe_description = Riak Pipelines +pkg_riak_pipe_homepage = https://github.com/basho/riak_pipe +pkg_riak_pipe_fetch = git +pkg_riak_pipe_repo = https://github.com/basho/riak_pipe +pkg_riak_pipe_commit = master + +PACKAGES += riak_sysmon +pkg_riak_sysmon_name = riak_sysmon +pkg_riak_sysmon_description = Simple OTP app for managing Erlang VM system_monitor event messages +pkg_riak_sysmon_homepage = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_fetch = git +pkg_riak_sysmon_repo = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_commit = master + +PACKAGES += riak_test +pkg_riak_test_name = riak_test +pkg_riak_test_description = I'm in your cluster, testing your riaks +pkg_riak_test_homepage = https://github.com/basho/riak_test +pkg_riak_test_fetch = git +pkg_riak_test_repo = https://github.com/basho/riak_test +pkg_riak_test_commit = master + +PACKAGES += riakc +pkg_riakc_name = riakc +pkg_riakc_description = Erlang clients for Riak. +pkg_riakc_homepage = https://github.com/basho/riak-erlang-client +pkg_riakc_fetch = git +pkg_riakc_repo = https://github.com/basho/riak-erlang-client +pkg_riakc_commit = master + +PACKAGES += riakhttpc +pkg_riakhttpc_name = riakhttpc +pkg_riakhttpc_description = Riak Erlang client using the HTTP interface +pkg_riakhttpc_homepage = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_fetch = git +pkg_riakhttpc_repo = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_commit = master + +PACKAGES += riaknostic +pkg_riaknostic_name = riaknostic +pkg_riaknostic_description = A diagnostic tool for Riak installations, to find common errors asap +pkg_riaknostic_homepage = https://github.com/basho/riaknostic +pkg_riaknostic_fetch = git +pkg_riaknostic_repo = https://github.com/basho/riaknostic +pkg_riaknostic_commit = master + +PACKAGES += riakpool +pkg_riakpool_name = riakpool +pkg_riakpool_description = erlang riak client pool +pkg_riakpool_homepage = https://github.com/dweldon/riakpool +pkg_riakpool_fetch = git +pkg_riakpool_repo = https://github.com/dweldon/riakpool +pkg_riakpool_commit = master + +PACKAGES += rivus_cep +pkg_rivus_cep_name = rivus_cep +pkg_rivus_cep_description = Complex event processing in Erlang +pkg_rivus_cep_homepage = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_fetch = git +pkg_rivus_cep_repo = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_commit = master + +PACKAGES += rlimit +pkg_rlimit_name = rlimit +pkg_rlimit_description = Magnus Klaar's rate limiter code from etorrent +pkg_rlimit_homepage = https://github.com/jlouis/rlimit +pkg_rlimit_fetch = git +pkg_rlimit_repo = https://github.com/jlouis/rlimit +pkg_rlimit_commit = master + +PACKAGES += rust_mk +pkg_rust_mk_name = rust_mk +pkg_rust_mk_description = Build Rust crates in an Erlang application +pkg_rust_mk_homepage = https://github.com/goertzenator/rust.mk +pkg_rust_mk_fetch = git +pkg_rust_mk_repo = https://github.com/goertzenator/rust.mk +pkg_rust_mk_commit = master + +PACKAGES += safetyvalve +pkg_safetyvalve_name = safetyvalve +pkg_safetyvalve_description = A safety valve for your erlang node +pkg_safetyvalve_homepage = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_fetch = git +pkg_safetyvalve_repo = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_commit = master + +PACKAGES += seestar +pkg_seestar_name = seestar +pkg_seestar_description = The Erlang client for Cassandra 1.2+ binary protocol +pkg_seestar_homepage = https://github.com/iamaleksey/seestar +pkg_seestar_fetch = git +pkg_seestar_repo = https://github.com/iamaleksey/seestar +pkg_seestar_commit = master + +PACKAGES += service +pkg_service_name = service +pkg_service_description = A minimal Erlang behavior for creating CloudI internal services +pkg_service_homepage = http://cloudi.org/ +pkg_service_fetch = git +pkg_service_repo = https://github.com/CloudI/service +pkg_service_commit = master + +PACKAGES += setup +pkg_setup_name = setup +pkg_setup_description = Generic setup utility for Erlang-based systems +pkg_setup_homepage = https://github.com/uwiger/setup +pkg_setup_fetch = git +pkg_setup_repo = https://github.com/uwiger/setup +pkg_setup_commit = master + +PACKAGES += sext +pkg_sext_name = sext +pkg_sext_description = Sortable Erlang Term Serialization +pkg_sext_homepage = https://github.com/uwiger/sext +pkg_sext_fetch = git +pkg_sext_repo = https://github.com/uwiger/sext +pkg_sext_commit = master + +PACKAGES += sfmt +pkg_sfmt_name = sfmt +pkg_sfmt_description = SFMT pseudo random number generator for Erlang. +pkg_sfmt_homepage = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_fetch = git +pkg_sfmt_repo = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_commit = master + +PACKAGES += sgte +pkg_sgte_name = sgte +pkg_sgte_description = A simple Erlang Template Engine +pkg_sgte_homepage = https://github.com/filippo/sgte +pkg_sgte_fetch = git +pkg_sgte_repo = https://github.com/filippo/sgte +pkg_sgte_commit = master + +PACKAGES += sheriff +pkg_sheriff_name = sheriff +pkg_sheriff_description = Parse transform for type based validation. +pkg_sheriff_homepage = http://ninenines.eu +pkg_sheriff_fetch = git +pkg_sheriff_repo = https://github.com/extend/sheriff +pkg_sheriff_commit = master + +PACKAGES += shotgun +pkg_shotgun_name = shotgun +pkg_shotgun_description = better than just a gun +pkg_shotgun_homepage = https://github.com/inaka/shotgun +pkg_shotgun_fetch = git +pkg_shotgun_repo = https://github.com/inaka/shotgun +pkg_shotgun_commit = master + +PACKAGES += sidejob +pkg_sidejob_name = sidejob +pkg_sidejob_description = Parallel worker and capacity limiting library for Erlang +pkg_sidejob_homepage = https://github.com/basho/sidejob +pkg_sidejob_fetch = git +pkg_sidejob_repo = https://github.com/basho/sidejob +pkg_sidejob_commit = master + +PACKAGES += sieve +pkg_sieve_name = sieve +pkg_sieve_description = sieve is a simple TCP routing proxy (layer 7) in erlang +pkg_sieve_homepage = https://github.com/benoitc/sieve +pkg_sieve_fetch = git +pkg_sieve_repo = https://github.com/benoitc/sieve +pkg_sieve_commit = master + +PACKAGES += sighandler +pkg_sighandler_name = sighandler +pkg_sighandler_description = Handle UNIX signals in Er lang +pkg_sighandler_homepage = https://github.com/jkingsbery/sighandler +pkg_sighandler_fetch = git +pkg_sighandler_repo = https://github.com/jkingsbery/sighandler +pkg_sighandler_commit = master + +PACKAGES += simhash +pkg_simhash_name = simhash +pkg_simhash_description = Simhashing for Erlang -- hashing algorithm to find near-duplicates in binary data. +pkg_simhash_homepage = https://github.com/ferd/simhash +pkg_simhash_fetch = git +pkg_simhash_repo = https://github.com/ferd/simhash +pkg_simhash_commit = master + +PACKAGES += simple_bridge +pkg_simple_bridge_name = simple_bridge +pkg_simple_bridge_description = A simple, standardized interface library to Erlang HTTP Servers. +pkg_simple_bridge_homepage = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_fetch = git +pkg_simple_bridge_repo = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_commit = master + +PACKAGES += simple_oauth2 +pkg_simple_oauth2_name = simple_oauth2 +pkg_simple_oauth2_description = Simple erlang OAuth2 client module for any http server framework (Google, Facebook, Yandex, Vkontakte are preconfigured) +pkg_simple_oauth2_homepage = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_fetch = git +pkg_simple_oauth2_repo = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_commit = master + +PACKAGES += skel +pkg_skel_name = skel +pkg_skel_description = A Streaming Process-based Skeleton Library for Erlang +pkg_skel_homepage = https://github.com/ParaPhrase/skel +pkg_skel_fetch = git +pkg_skel_repo = https://github.com/ParaPhrase/skel +pkg_skel_commit = master + +PACKAGES += slack +pkg_slack_name = slack +pkg_slack_description = Minimal slack notification OTP library. +pkg_slack_homepage = https://github.com/DonBranson/slack +pkg_slack_fetch = git +pkg_slack_repo = https://github.com/DonBranson/slack.git +pkg_slack_commit = master + +PACKAGES += smother +pkg_smother_name = smother +pkg_smother_description = Extended code coverage metrics for Erlang. +pkg_smother_homepage = https://ramsay-t.github.io/Smother/ +pkg_smother_fetch = git +pkg_smother_repo = https://github.com/ramsay-t/Smother +pkg_smother_commit = master + +PACKAGES += snappyer +pkg_snappyer_name = snappyer +pkg_snappyer_description = Snappy as nif for Erlang +pkg_snappyer_homepage = https://github.com/zmstone/snappyer +pkg_snappyer_fetch = git +pkg_snappyer_repo = https://github.com/zmstone/snappyer.git +pkg_snappyer_commit = master + +PACKAGES += social +pkg_social_name = social +pkg_social_description = Cowboy handler for social login via OAuth2 providers +pkg_social_homepage = https://github.com/dvv/social +pkg_social_fetch = git +pkg_social_repo = https://github.com/dvv/social +pkg_social_commit = master + +PACKAGES += spapi_router +pkg_spapi_router_name = spapi_router +pkg_spapi_router_description = Partially-connected Erlang clustering +pkg_spapi_router_homepage = https://github.com/spilgames/spapi-router +pkg_spapi_router_fetch = git +pkg_spapi_router_repo = https://github.com/spilgames/spapi-router +pkg_spapi_router_commit = master + +PACKAGES += sqerl +pkg_sqerl_name = sqerl +pkg_sqerl_description = An Erlang-flavoured SQL DSL +pkg_sqerl_homepage = https://github.com/hairyhum/sqerl +pkg_sqerl_fetch = git +pkg_sqerl_repo = https://github.com/hairyhum/sqerl +pkg_sqerl_commit = master + +PACKAGES += srly +pkg_srly_name = srly +pkg_srly_description = Native Erlang Unix serial interface +pkg_srly_homepage = https://github.com/msantos/srly +pkg_srly_fetch = git +pkg_srly_repo = https://github.com/msantos/srly +pkg_srly_commit = master + +PACKAGES += sshrpc +pkg_sshrpc_name = sshrpc +pkg_sshrpc_description = Erlang SSH RPC module (experimental) +pkg_sshrpc_homepage = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_fetch = git +pkg_sshrpc_repo = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_commit = master + +PACKAGES += stable +pkg_stable_name = stable +pkg_stable_description = Library of assorted helpers for Cowboy web server. +pkg_stable_homepage = https://github.com/dvv/stable +pkg_stable_fetch = git +pkg_stable_repo = https://github.com/dvv/stable +pkg_stable_commit = master + +PACKAGES += statebox +pkg_statebox_name = statebox +pkg_statebox_description = Erlang state monad with merge/conflict-resolution capabilities. Useful for Riak. +pkg_statebox_homepage = https://github.com/mochi/statebox +pkg_statebox_fetch = git +pkg_statebox_repo = https://github.com/mochi/statebox +pkg_statebox_commit = master + +PACKAGES += statebox_riak +pkg_statebox_riak_name = statebox_riak +pkg_statebox_riak_description = Convenience library that makes it easier to use statebox with riak, extracted from best practices in our production code at Mochi Media. +pkg_statebox_riak_homepage = https://github.com/mochi/statebox_riak +pkg_statebox_riak_fetch = git +pkg_statebox_riak_repo = https://github.com/mochi/statebox_riak +pkg_statebox_riak_commit = master + +PACKAGES += statman +pkg_statman_name = statman +pkg_statman_description = Efficiently collect massive volumes of metrics inside the Erlang VM +pkg_statman_homepage = https://github.com/knutin/statman +pkg_statman_fetch = git +pkg_statman_repo = https://github.com/knutin/statman +pkg_statman_commit = master + +PACKAGES += statsderl +pkg_statsderl_name = statsderl +pkg_statsderl_description = StatsD client (erlang) +pkg_statsderl_homepage = https://github.com/lpgauth/statsderl +pkg_statsderl_fetch = git +pkg_statsderl_repo = https://github.com/lpgauth/statsderl +pkg_statsderl_commit = master + +PACKAGES += stdinout_pool +pkg_stdinout_pool_name = stdinout_pool +pkg_stdinout_pool_description = stdinout_pool : stuff goes in, stuff goes out. there's never any miscommunication. +pkg_stdinout_pool_homepage = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_fetch = git +pkg_stdinout_pool_repo = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_commit = master + +PACKAGES += stockdb +pkg_stockdb_name = stockdb +pkg_stockdb_description = Database for storing Stock Exchange quotes in erlang +pkg_stockdb_homepage = https://github.com/maxlapshin/stockdb +pkg_stockdb_fetch = git +pkg_stockdb_repo = https://github.com/maxlapshin/stockdb +pkg_stockdb_commit = master + +PACKAGES += stripe +pkg_stripe_name = stripe +pkg_stripe_description = Erlang interface to the stripe.com API +pkg_stripe_homepage = https://github.com/mattsta/stripe-erlang +pkg_stripe_fetch = git +pkg_stripe_repo = https://github.com/mattsta/stripe-erlang +pkg_stripe_commit = v1 + +PACKAGES += subproc +pkg_subproc_name = subproc +pkg_subproc_description = unix subprocess manager with {active,once|false} modes +pkg_subproc_homepage = http://dozzie.jarowit.net/trac/wiki/subproc +pkg_subproc_fetch = git +pkg_subproc_repo = https://github.com/dozzie/subproc +pkg_subproc_commit = v0.1.0 + +PACKAGES += supervisor3 +pkg_supervisor3_name = supervisor3 +pkg_supervisor3_description = OTP supervisor with additional strategies +pkg_supervisor3_homepage = https://github.com/klarna/supervisor3 +pkg_supervisor3_fetch = git +pkg_supervisor3_repo = https://github.com/klarna/supervisor3.git +pkg_supervisor3_commit = master + +PACKAGES += surrogate +pkg_surrogate_name = surrogate +pkg_surrogate_description = Proxy server written in erlang. Supports reverse proxy load balancing and forward proxy with http (including CONNECT), socks4, socks5, and transparent proxy modes. +pkg_surrogate_homepage = https://github.com/skruger/Surrogate +pkg_surrogate_fetch = git +pkg_surrogate_repo = https://github.com/skruger/Surrogate +pkg_surrogate_commit = master + +PACKAGES += swab +pkg_swab_name = swab +pkg_swab_description = General purpose buffer handling module +pkg_swab_homepage = https://github.com/crownedgrouse/swab +pkg_swab_fetch = git +pkg_swab_repo = https://github.com/crownedgrouse/swab +pkg_swab_commit = master + +PACKAGES += swarm +pkg_swarm_name = swarm +pkg_swarm_description = Fast and simple acceptor pool for Erlang +pkg_swarm_homepage = https://github.com/jeremey/swarm +pkg_swarm_fetch = git +pkg_swarm_repo = https://github.com/jeremey/swarm +pkg_swarm_commit = master + +PACKAGES += switchboard +pkg_switchboard_name = switchboard +pkg_switchboard_description = A framework for processing email using worker plugins. +pkg_switchboard_homepage = https://github.com/thusfresh/switchboard +pkg_switchboard_fetch = git +pkg_switchboard_repo = https://github.com/thusfresh/switchboard +pkg_switchboard_commit = master + +PACKAGES += syn +pkg_syn_name = syn +pkg_syn_description = A global Process Registry and Process Group manager for Erlang. +pkg_syn_homepage = https://github.com/ostinelli/syn +pkg_syn_fetch = git +pkg_syn_repo = https://github.com/ostinelli/syn +pkg_syn_commit = master + +PACKAGES += sync +pkg_sync_name = sync +pkg_sync_description = On-the-fly recompiling and reloading in Erlang. +pkg_sync_homepage = https://github.com/rustyio/sync +pkg_sync_fetch = git +pkg_sync_repo = https://github.com/rustyio/sync +pkg_sync_commit = master + +PACKAGES += syntaxerl +pkg_syntaxerl_name = syntaxerl +pkg_syntaxerl_description = Syntax checker for Erlang +pkg_syntaxerl_homepage = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_fetch = git +pkg_syntaxerl_repo = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_commit = master + +PACKAGES += syslog +pkg_syslog_name = syslog +pkg_syslog_description = Erlang port driver for interacting with syslog via syslog(3) +pkg_syslog_homepage = https://github.com/Vagabond/erlang-syslog +pkg_syslog_fetch = git +pkg_syslog_repo = https://github.com/Vagabond/erlang-syslog +pkg_syslog_commit = master + +PACKAGES += taskforce +pkg_taskforce_name = taskforce +pkg_taskforce_description = Erlang worker pools for controlled parallelisation of arbitrary tasks. +pkg_taskforce_homepage = https://github.com/g-andrade/taskforce +pkg_taskforce_fetch = git +pkg_taskforce_repo = https://github.com/g-andrade/taskforce +pkg_taskforce_commit = master + +PACKAGES += tddreloader +pkg_tddreloader_name = tddreloader +pkg_tddreloader_description = Shell utility for recompiling, reloading, and testing code as it changes +pkg_tddreloader_homepage = https://github.com/version2beta/tddreloader +pkg_tddreloader_fetch = git +pkg_tddreloader_repo = https://github.com/version2beta/tddreloader +pkg_tddreloader_commit = master + +PACKAGES += tempo +pkg_tempo_name = tempo +pkg_tempo_description = NIF-based date and time parsing and formatting for Erlang. +pkg_tempo_homepage = https://github.com/selectel/tempo +pkg_tempo_fetch = git +pkg_tempo_repo = https://github.com/selectel/tempo +pkg_tempo_commit = master + +PACKAGES += ticktick +pkg_ticktick_name = ticktick +pkg_ticktick_description = Ticktick is an id generator for message service. +pkg_ticktick_homepage = https://github.com/ericliang/ticktick +pkg_ticktick_fetch = git +pkg_ticktick_repo = https://github.com/ericliang/ticktick +pkg_ticktick_commit = master + +PACKAGES += tinymq +pkg_tinymq_name = tinymq +pkg_tinymq_description = TinyMQ - a diminutive, in-memory message queue +pkg_tinymq_homepage = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_fetch = git +pkg_tinymq_repo = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_commit = master + +PACKAGES += tinymt +pkg_tinymt_name = tinymt +pkg_tinymt_description = TinyMT pseudo random number generator for Erlang. +pkg_tinymt_homepage = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_fetch = git +pkg_tinymt_repo = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_commit = master + +PACKAGES += tirerl +pkg_tirerl_name = tirerl +pkg_tirerl_description = Erlang interface to Elastic Search +pkg_tirerl_homepage = https://github.com/inaka/tirerl +pkg_tirerl_fetch = git +pkg_tirerl_repo = https://github.com/inaka/tirerl +pkg_tirerl_commit = master + +PACKAGES += toml +pkg_toml_name = toml +pkg_toml_description = TOML (0.4.0) config parser +pkg_toml_homepage = http://dozzie.jarowit.net/trac/wiki/TOML +pkg_toml_fetch = git +pkg_toml_repo = https://github.com/dozzie/toml +pkg_toml_commit = v0.2.0 + +PACKAGES += traffic_tools +pkg_traffic_tools_name = traffic_tools +pkg_traffic_tools_description = Simple traffic limiting library +pkg_traffic_tools_homepage = https://github.com/systra/traffic_tools +pkg_traffic_tools_fetch = git +pkg_traffic_tools_repo = https://github.com/systra/traffic_tools +pkg_traffic_tools_commit = master + +PACKAGES += trails +pkg_trails_name = trails +pkg_trails_description = A couple of improvements over Cowboy Routes +pkg_trails_homepage = http://inaka.github.io/cowboy-trails/ +pkg_trails_fetch = git +pkg_trails_repo = https://github.com/inaka/cowboy-trails +pkg_trails_commit = master + +PACKAGES += trane +pkg_trane_name = trane +pkg_trane_description = SAX style broken HTML parser in Erlang +pkg_trane_homepage = https://github.com/massemanet/trane +pkg_trane_fetch = git +pkg_trane_repo = https://github.com/massemanet/trane +pkg_trane_commit = master + +PACKAGES += transit +pkg_transit_name = transit +pkg_transit_description = transit format for erlang +pkg_transit_homepage = https://github.com/isaiah/transit-erlang +pkg_transit_fetch = git +pkg_transit_repo = https://github.com/isaiah/transit-erlang +pkg_transit_commit = master + +PACKAGES += trie +pkg_trie_name = trie +pkg_trie_description = Erlang Trie Implementation +pkg_trie_homepage = https://github.com/okeuday/trie +pkg_trie_fetch = git +pkg_trie_repo = https://github.com/okeuday/trie +pkg_trie_commit = master + +PACKAGES += triq +pkg_triq_name = triq +pkg_triq_description = Trifork QuickCheck +pkg_triq_homepage = https://triq.gitlab.io +pkg_triq_fetch = git +pkg_triq_repo = https://gitlab.com/triq/triq.git +pkg_triq_commit = master + +PACKAGES += tunctl +pkg_tunctl_name = tunctl +pkg_tunctl_description = Erlang TUN/TAP interface +pkg_tunctl_homepage = https://github.com/msantos/tunctl +pkg_tunctl_fetch = git +pkg_tunctl_repo = https://github.com/msantos/tunctl +pkg_tunctl_commit = master + +PACKAGES += twerl +pkg_twerl_name = twerl +pkg_twerl_description = Erlang client for the Twitter Streaming API +pkg_twerl_homepage = https://github.com/lucaspiller/twerl +pkg_twerl_fetch = git +pkg_twerl_repo = https://github.com/lucaspiller/twerl +pkg_twerl_commit = oauth + +PACKAGES += twitter_erlang +pkg_twitter_erlang_name = twitter_erlang +pkg_twitter_erlang_description = An Erlang twitter client +pkg_twitter_erlang_homepage = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_fetch = git +pkg_twitter_erlang_repo = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_commit = master + +PACKAGES += ucol_nif +pkg_ucol_nif_name = ucol_nif +pkg_ucol_nif_description = ICU based collation Erlang module +pkg_ucol_nif_homepage = https://github.com/refuge/ucol_nif +pkg_ucol_nif_fetch = git +pkg_ucol_nif_repo = https://github.com/refuge/ucol_nif +pkg_ucol_nif_commit = master + +PACKAGES += unicorn +pkg_unicorn_name = unicorn +pkg_unicorn_description = Generic configuration server +pkg_unicorn_homepage = https://github.com/shizzard/unicorn +pkg_unicorn_fetch = git +pkg_unicorn_repo = https://github.com/shizzard/unicorn +pkg_unicorn_commit = master + +PACKAGES += unsplit +pkg_unsplit_name = unsplit +pkg_unsplit_description = Resolves conflicts in Mnesia after network splits +pkg_unsplit_homepage = https://github.com/uwiger/unsplit +pkg_unsplit_fetch = git +pkg_unsplit_repo = https://github.com/uwiger/unsplit +pkg_unsplit_commit = master + +PACKAGES += uuid +pkg_uuid_name = uuid +pkg_uuid_description = Erlang UUID Implementation +pkg_uuid_homepage = https://github.com/okeuday/uuid +pkg_uuid_fetch = git +pkg_uuid_repo = https://github.com/okeuday/uuid +pkg_uuid_commit = master + +PACKAGES += ux +pkg_ux_name = ux +pkg_ux_description = Unicode eXtention for Erlang (Strings, Collation) +pkg_ux_homepage = https://github.com/erlang-unicode/ux +pkg_ux_fetch = git +pkg_ux_repo = https://github.com/erlang-unicode/ux +pkg_ux_commit = master + +PACKAGES += vert +pkg_vert_name = vert +pkg_vert_description = Erlang binding to libvirt virtualization API +pkg_vert_homepage = https://github.com/msantos/erlang-libvirt +pkg_vert_fetch = git +pkg_vert_repo = https://github.com/msantos/erlang-libvirt +pkg_vert_commit = master + +PACKAGES += verx +pkg_verx_name = verx +pkg_verx_description = Erlang implementation of the libvirtd remote protocol +pkg_verx_homepage = https://github.com/msantos/verx +pkg_verx_fetch = git +pkg_verx_repo = https://github.com/msantos/verx +pkg_verx_commit = master + +PACKAGES += vmq_acl +pkg_vmq_acl_name = vmq_acl +pkg_vmq_acl_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_acl_homepage = https://verne.mq/ +pkg_vmq_acl_fetch = git +pkg_vmq_acl_repo = https://github.com/erlio/vmq_acl +pkg_vmq_acl_commit = master + +PACKAGES += vmq_bridge +pkg_vmq_bridge_name = vmq_bridge +pkg_vmq_bridge_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_bridge_homepage = https://verne.mq/ +pkg_vmq_bridge_fetch = git +pkg_vmq_bridge_repo = https://github.com/erlio/vmq_bridge +pkg_vmq_bridge_commit = master + +PACKAGES += vmq_graphite +pkg_vmq_graphite_name = vmq_graphite +pkg_vmq_graphite_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_graphite_homepage = https://verne.mq/ +pkg_vmq_graphite_fetch = git +pkg_vmq_graphite_repo = https://github.com/erlio/vmq_graphite +pkg_vmq_graphite_commit = master + +PACKAGES += vmq_passwd +pkg_vmq_passwd_name = vmq_passwd +pkg_vmq_passwd_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_passwd_homepage = https://verne.mq/ +pkg_vmq_passwd_fetch = git +pkg_vmq_passwd_repo = https://github.com/erlio/vmq_passwd +pkg_vmq_passwd_commit = master + +PACKAGES += vmq_server +pkg_vmq_server_name = vmq_server +pkg_vmq_server_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_server_homepage = https://verne.mq/ +pkg_vmq_server_fetch = git +pkg_vmq_server_repo = https://github.com/erlio/vmq_server +pkg_vmq_server_commit = master + +PACKAGES += vmq_snmp +pkg_vmq_snmp_name = vmq_snmp +pkg_vmq_snmp_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_snmp_homepage = https://verne.mq/ +pkg_vmq_snmp_fetch = git +pkg_vmq_snmp_repo = https://github.com/erlio/vmq_snmp +pkg_vmq_snmp_commit = master + +PACKAGES += vmq_systree +pkg_vmq_systree_name = vmq_systree +pkg_vmq_systree_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_systree_homepage = https://verne.mq/ +pkg_vmq_systree_fetch = git +pkg_vmq_systree_repo = https://github.com/erlio/vmq_systree +pkg_vmq_systree_commit = master + +PACKAGES += vmstats +pkg_vmstats_name = vmstats +pkg_vmstats_description = tiny Erlang app that works in conjunction with statsderl in order to generate information on the Erlang VM for graphite logs. +pkg_vmstats_homepage = https://github.com/ferd/vmstats +pkg_vmstats_fetch = git +pkg_vmstats_repo = https://github.com/ferd/vmstats +pkg_vmstats_commit = master + +PACKAGES += walrus +pkg_walrus_name = walrus +pkg_walrus_description = Walrus - Mustache-like Templating +pkg_walrus_homepage = https://github.com/devinus/walrus +pkg_walrus_fetch = git +pkg_walrus_repo = https://github.com/devinus/walrus +pkg_walrus_commit = master + +PACKAGES += webmachine +pkg_webmachine_name = webmachine +pkg_webmachine_description = A REST-based system for building web applications. +pkg_webmachine_homepage = https://github.com/basho/webmachine +pkg_webmachine_fetch = git +pkg_webmachine_repo = https://github.com/basho/webmachine +pkg_webmachine_commit = master + +PACKAGES += websocket_client +pkg_websocket_client_name = websocket_client +pkg_websocket_client_description = Erlang websocket client (ws and wss supported) +pkg_websocket_client_homepage = https://github.com/jeremyong/websocket_client +pkg_websocket_client_fetch = git +pkg_websocket_client_repo = https://github.com/jeremyong/websocket_client +pkg_websocket_client_commit = master + +PACKAGES += worker_pool +pkg_worker_pool_name = worker_pool +pkg_worker_pool_description = a simple erlang worker pool +pkg_worker_pool_homepage = https://github.com/inaka/worker_pool +pkg_worker_pool_fetch = git +pkg_worker_pool_repo = https://github.com/inaka/worker_pool +pkg_worker_pool_commit = master + +PACKAGES += wrangler +pkg_wrangler_name = wrangler +pkg_wrangler_description = Import of the Wrangler svn repository. +pkg_wrangler_homepage = http://www.cs.kent.ac.uk/projects/wrangler/Home.html +pkg_wrangler_fetch = git +pkg_wrangler_repo = https://github.com/RefactoringTools/wrangler +pkg_wrangler_commit = master + +PACKAGES += wsock +pkg_wsock_name = wsock +pkg_wsock_description = Erlang library to build WebSocket clients and servers +pkg_wsock_homepage = https://github.com/madtrick/wsock +pkg_wsock_fetch = git +pkg_wsock_repo = https://github.com/madtrick/wsock +pkg_wsock_commit = master + +PACKAGES += xhttpc +pkg_xhttpc_name = xhttpc +pkg_xhttpc_description = Extensible HTTP Client for Erlang +pkg_xhttpc_homepage = https://github.com/seriyps/xhttpc +pkg_xhttpc_fetch = git +pkg_xhttpc_repo = https://github.com/seriyps/xhttpc +pkg_xhttpc_commit = master + +PACKAGES += xref_runner +pkg_xref_runner_name = xref_runner +pkg_xref_runner_description = Erlang Xref Runner (inspired in rebar xref) +pkg_xref_runner_homepage = https://github.com/inaka/xref_runner +pkg_xref_runner_fetch = git +pkg_xref_runner_repo = https://github.com/inaka/xref_runner +pkg_xref_runner_commit = master + +PACKAGES += yamerl +pkg_yamerl_name = yamerl +pkg_yamerl_description = YAML 1.2 parser in pure Erlang +pkg_yamerl_homepage = https://github.com/yakaz/yamerl +pkg_yamerl_fetch = git +pkg_yamerl_repo = https://github.com/yakaz/yamerl +pkg_yamerl_commit = master + +PACKAGES += yamler +pkg_yamler_name = yamler +pkg_yamler_description = libyaml-based yaml loader for Erlang +pkg_yamler_homepage = https://github.com/goertzenator/yamler +pkg_yamler_fetch = git +pkg_yamler_repo = https://github.com/goertzenator/yamler +pkg_yamler_commit = master + +PACKAGES += yaws +pkg_yaws_name = yaws +pkg_yaws_description = Yaws webserver +pkg_yaws_homepage = http://yaws.hyber.org +pkg_yaws_fetch = git +pkg_yaws_repo = https://github.com/klacke/yaws +pkg_yaws_commit = master + +PACKAGES += zab_engine +pkg_zab_engine_name = zab_engine +pkg_zab_engine_description = zab propotocol implement by erlang +pkg_zab_engine_homepage = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_fetch = git +pkg_zab_engine_repo = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_commit = master + +PACKAGES += zabbix_sender +pkg_zabbix_sender_name = zabbix_sender +pkg_zabbix_sender_description = Zabbix trapper for sending data to Zabbix in pure Erlang +pkg_zabbix_sender_homepage = https://github.com/stalkermn/zabbix_sender +pkg_zabbix_sender_fetch = git +pkg_zabbix_sender_repo = https://github.com/stalkermn/zabbix_sender.git +pkg_zabbix_sender_commit = master + +PACKAGES += zeta +pkg_zeta_name = zeta +pkg_zeta_description = HTTP access log parser in Erlang +pkg_zeta_homepage = https://github.com/s1n4/zeta +pkg_zeta_fetch = git +pkg_zeta_repo = https://github.com/s1n4/zeta +pkg_zeta_commit = master + +PACKAGES += zippers +pkg_zippers_name = zippers +pkg_zippers_description = A library for functional zipper data structures in Erlang. Read more on zippers +pkg_zippers_homepage = https://github.com/ferd/zippers +pkg_zippers_fetch = git +pkg_zippers_repo = https://github.com/ferd/zippers +pkg_zippers_commit = master + +PACKAGES += zlists +pkg_zlists_name = zlists +pkg_zlists_description = Erlang lazy lists library. +pkg_zlists_homepage = https://github.com/vjache/erlang-zlists +pkg_zlists_fetch = git +pkg_zlists_repo = https://github.com/vjache/erlang-zlists +pkg_zlists_commit = master + +PACKAGES += zraft_lib +pkg_zraft_lib_name = zraft_lib +pkg_zraft_lib_description = Erlang raft consensus protocol implementation +pkg_zraft_lib_homepage = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_fetch = git +pkg_zraft_lib_repo = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_commit = master + +PACKAGES += zucchini +pkg_zucchini_name = zucchini +pkg_zucchini_description = An Erlang INI parser +pkg_zucchini_homepage = https://github.com/devinus/zucchini +pkg_zucchini_fetch = git +pkg_zucchini_repo = https://github.com/devinus/zucchini +pkg_zucchini_commit = master + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: search + +define pkg_print + $(verbose) printf "%s\n" \ + $(if $(call core_eq,$(1),$(pkg_$(1)_name)),,"Pkg name: $(1)") \ + "App name: $(pkg_$(1)_name)" \ + "Description: $(pkg_$(1)_description)" \ + "Home page: $(pkg_$(1)_homepage)" \ + "Fetch with: $(pkg_$(1)_fetch)" \ + "Repository: $(pkg_$(1)_repo)" \ + "Commit: $(pkg_$(1)_commit)" \ + "" + +endef + +search: +ifdef q + $(foreach p,$(PACKAGES), \ + $(if $(findstring $(call core_lc,$(q)),$(call core_lc,$(pkg_$(p)_name) $(pkg_$(p)_description))), \ + $(call pkg_print,$(p)))) +else + $(foreach p,$(PACKAGES),$(call pkg_print,$(p))) +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-deps clean-tmp-deps.log + +# Configuration. + +ifdef OTP_DEPS +$(warning The variable OTP_DEPS is deprecated in favor of LOCAL_DEPS.) +endif + +IGNORE_DEPS ?= +export IGNORE_DEPS + +APPS_DIR ?= $(CURDIR)/apps +export APPS_DIR + +DEPS_DIR ?= $(CURDIR)/deps +export DEPS_DIR + +REBAR_DEPS_DIR = $(DEPS_DIR) +export REBAR_DEPS_DIR + +REBAR_GIT ?= https://github.com/rebar/rebar +REBAR_COMMIT ?= 576e12171ab8d69b048b827b92aa65d067deea01 + +# External "early" plugins (see core/plugins.mk for regular plugins). +# They both use the core_dep_plugin macro. + +define core_dep_plugin +ifeq ($(2),$(PROJECT)) +-include $$(patsubst $(PROJECT)/%,%,$(1)) +else +-include $(DEPS_DIR)/$(1) + +$(DEPS_DIR)/$(1): $(DEPS_DIR)/$(2) ; +endif +endef + +DEP_EARLY_PLUGINS ?= + +$(foreach p,$(DEP_EARLY_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/early-plugins.mk,$p)))) + +dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) +dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ + $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) + +LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) +ALL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(foreach dep,$(filter-out $(IGNORE_DEPS),$(BUILD_DEPS) $(DEPS)),$(call dep_name,$(dep)))) + +# When we are calling an app directly we don't want to include it here +# otherwise it'll be treated both as an apps and a top-level project. +ALL_APPS_DIRS = $(if $(wildcard $(APPS_DIR)/),$(filter-out $(APPS_DIR),$(shell find $(APPS_DIR) -maxdepth 1 -type d))) +ifdef ROOT_DIR +ifndef IS_APP +ALL_APPS_DIRS := $(filter-out $(APPS_DIR)/$(notdir $(CURDIR)),$(ALL_APPS_DIRS)) +endif +endif + +ifeq ($(filter $(APPS_DIR) $(DEPS_DIR),$(subst :, ,$(ERL_LIBS))),) +ifeq ($(ERL_LIBS),) + ERL_LIBS = $(APPS_DIR):$(DEPS_DIR) +else + ERL_LIBS := $(ERL_LIBS):$(APPS_DIR):$(DEPS_DIR) +endif +endif +export ERL_LIBS + +export NO_AUTOPATCH + +# Verbosity. + +dep_verbose_0 = @echo " DEP $1 ($(call dep_commit,$1))"; +dep_verbose_2 = set -x; +dep_verbose = $(dep_verbose_$(V)) + +# Optimization: don't recompile deps unless truly necessary. + +ifndef IS_DEP +ifneq ($(MAKELEVEL),0) +$(shell rm -f ebin/dep_built) +endif +endif + +# Core targets. + +ALL_APPS_DIRS_TO_BUILD = $(if $(LOCAL_DEPS_DIRS)$(IS_APP),$(LOCAL_DEPS_DIRS),$(ALL_APPS_DIRS)) + +apps:: $(ALL_APPS_DIRS) clean-tmp-deps.log | $(ERLANG_MK_TMP) +# Create ebin directory for all apps to make sure Erlang recognizes them +# as proper OTP applications when using -include_lib. This is a temporary +# fix, a proper fix would be to compile apps/* in the right order. +ifndef IS_APP +ifneq ($(ALL_APPS_DIRS),) + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + mkdir -p $$dep/ebin; \ + done +endif +endif +# At the toplevel: if LOCAL_DEPS is defined with at least one local app, only +# compile that list of apps. Otherwise, compile everything. +# Within an app: compile all LOCAL_DEPS that are (uncompiled) local apps. +ifneq ($(ALL_APPS_DIRS_TO_BUILD),) + $(verbose) set -e; for dep in $(ALL_APPS_DIRS_TO_BUILD); do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/apps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/apps.log; \ + $(MAKE) -C $$dep $(if $(IS_TEST),test-build-app) IS_APP=1; \ + fi \ + done +endif + +clean-tmp-deps.log: +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/apps.log $(ERLANG_MK_TMP)/deps.log +endif + +ifneq ($(SKIP_DEPS),) +deps:: +else +deps:: $(ALL_DEPS_DIRS) apps clean-tmp-deps.log | $(ERLANG_MK_TMP) +ifneq ($(ALL_DEPS_DIRS),) + $(verbose) set -e; for dep in $(ALL_DEPS_DIRS); do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/deps.log; \ + if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ + :; \ + elif [ -f $$dep/GNUmakefile ] || [ -f $$dep/makefile ] || [ -f $$dep/Makefile ]; then \ + $(MAKE) -C $$dep IS_DEP=1; \ + if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ + else \ + echo "Error: No Makefile to build dependency $$dep." >&2; \ + exit 2; \ + fi \ + fi \ + done +endif +endif + +# Deps related targets. + +# @todo rename GNUmakefile and makefile into Makefile first, if they exist +# While Makefile file could be GNUmakefile or makefile, +# in practice only Makefile is needed so far. +define dep_autopatch + if [ -f $(DEPS_DIR)/$(1)/erlang.mk ]; then \ + rm -rf $(DEPS_DIR)/$1/ebin/; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + $(call dep_autopatch_erlang_mk,$(1)); \ + elif [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + if [ -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch2,$1); \ + elif [ 0 != `grep -c "include ../\w*\.mk" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ 0 != `grep -ci "^[^#].*rebar" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ -n "`find $(DEPS_DIR)/$(1)/ -type f -name \*.mk -not -name erlang.mk -exec grep -i "^[^#].*rebar" '{}' \;`" ]; then \ + $(call dep_autopatch2,$(1)); \ + fi \ + else \ + if [ ! -d $(DEPS_DIR)/$(1)/src/ ]; then \ + $(call dep_autopatch_noop,$(1)); \ + else \ + $(call dep_autopatch2,$(1)); \ + fi \ + fi +endef + +define dep_autopatch2 + ! test -f $(DEPS_DIR)/$1/ebin/$1.app || \ + mv -n $(DEPS_DIR)/$1/ebin/$1.app $(DEPS_DIR)/$1/src/$1.app.src; \ + rm -f $(DEPS_DIR)/$1/ebin/$1.app; \ + if [ -f $(DEPS_DIR)/$1/src/$1.app.src.script ]; then \ + $(call erlang,$(call dep_autopatch_appsrc_script.erl,$(1))); \ + fi; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + if [ -f $(DEPS_DIR)/$(1)/rebar -o -f $(DEPS_DIR)/$(1)/rebar.config -o -f $(DEPS_DIR)/$(1)/rebar.config.script -o -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch_fetch_rebar); \ + $(call dep_autopatch_rebar,$(1)); \ + else \ + $(call dep_autopatch_gen,$(1)); \ + fi +endef + +define dep_autopatch_noop + printf "noop:\n" > $(DEPS_DIR)/$(1)/Makefile +endef + +# Replace "include erlang.mk" with a line that will load the parent Erlang.mk +# if given. Do it for all 3 possible Makefile file names. +ifeq ($(NO_AUTOPATCH_ERLANG_MK),) +define dep_autopatch_erlang_mk + for f in Makefile makefile GNUmakefile; do \ + if [ -f $(DEPS_DIR)/$1/$$f ]; then \ + sed -i.bak s/'include *erlang.mk'/'include $$(if $$(ERLANG_MK_FILENAME),$$(ERLANG_MK_FILENAME),erlang.mk)'/ $(DEPS_DIR)/$1/$$f; \ + fi \ + done +endef +else +define dep_autopatch_erlang_mk + : +endef +endif + +define dep_autopatch_gen + printf "%s\n" \ + "ERLC_OPTS = +debug_info" \ + "include ../../erlang.mk" > $(DEPS_DIR)/$(1)/Makefile +endef + +# We use flock/lockf when available to avoid concurrency issues. +define dep_autopatch_fetch_rebar + if command -v flock >/dev/null; then \ + flock $(ERLANG_MK_TMP)/rebar.lock sh -c "$(call dep_autopatch_fetch_rebar2)"; \ + elif command -v lockf >/dev/null; then \ + lockf $(ERLANG_MK_TMP)/rebar.lock sh -c "$(call dep_autopatch_fetch_rebar2)"; \ + else \ + $(call dep_autopatch_fetch_rebar2); \ + fi +endef + +define dep_autopatch_fetch_rebar2 + if [ ! -d $(ERLANG_MK_TMP)/rebar ]; then \ + git clone -q -n -- $(REBAR_GIT) $(ERLANG_MK_TMP)/rebar; \ + cd $(ERLANG_MK_TMP)/rebar; \ + git checkout -q $(REBAR_COMMIT); \ + ./bootstrap; \ + cd -; \ + fi +endef + +define dep_autopatch_rebar + if [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + mv $(DEPS_DIR)/$(1)/Makefile $(DEPS_DIR)/$(1)/Makefile.orig.mk; \ + fi; \ + $(call erlang,$(call dep_autopatch_rebar.erl,$(1))); \ + rm -f $(DEPS_DIR)/$(1)/ebin/$(1).app +endef + +define dep_autopatch_rebar.erl + application:load(rebar), + application:set_env(rebar, log_level, debug), + rmemo:start(), + Conf1 = case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config)") of + {ok, Conf0} -> Conf0; + _ -> [] + end, + {Conf, OsEnv} = fun() -> + case filelib:is_file("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)") of + false -> {Conf1, []}; + true -> + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf1, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', "$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings1), + Before = os:getenv(), + {ok, Conf2} = file:script("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings), + {Conf2, lists:foldl(fun(E, Acc) -> lists:delete(E, Acc) end, os:getenv(), Before)} + end + end(), + Write = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/Makefile)", Text, [append]) + end, + Escape = fun (Text) -> + re:replace(Text, "\\\\$$", "\$$$$", [global, {return, list}]) + end, + Write("IGNORE_DEPS += edown eper eunit_formatters meck node_package " + "rebar_lock_deps_plugin rebar_vsn_plugin reltool_util\n"), + Write("C_SRC_DIR = /path/do/not/exist\n"), + Write("C_SRC_TYPE = rebar\n"), + Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"), + Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]), + ToList = fun + (V) when is_atom(V) -> atom_to_list(V); + (V) when is_list(V) -> "'\\"" ++ V ++ "\\"'" + end, + fun() -> + Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"), + case lists:keyfind(erl_opts, 1, Conf) of + false -> ok; + {_, ErlOpts} -> + lists:foreach(fun + ({d, D}) -> + Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + ({d, DKey, DVal}) -> + Write("ERLC_OPTS += -D" ++ ToList(DKey) ++ "=" ++ ToList(DVal) ++ "\n"); + ({i, I}) -> + Write(["ERLC_OPTS += -I ", I, "\n"]); + ({platform_define, Regex, D}) -> + case rebar_utils:is_arch(Regex) of + true -> Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + false -> ok + end; + ({parse_transform, PT}) -> + Write("ERLC_OPTS += +'{parse_transform, " ++ ToList(PT) ++ "}'\n"); + (_) -> ok + end, ErlOpts) + end, + Write("\n") + end(), + GetHexVsn = fun(N) -> + case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of + {ok, Lock} -> + io:format("~p~n", [Lock]), + case lists:keyfind("1.1.0", 1, Lock) of + {_, LockPkgs} -> + io:format("~p~n", [LockPkgs]), + case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of + {_, {pkg, _, Vsn}, _} -> + io:format("~p~n", [Vsn]), + {N, {hex, binary_to_list(Vsn)}}; + _ -> + false + end; + _ -> + false + end; + _ -> + false + end + end, + SemVsn = fun + ("~> " ++ S) -> + case length([ok || $$. <- S]) of + 0 -> S ++ ".0.0"; + 1 -> S ++ ".0"; + _ -> S + end; + (S) -> S + end, + fun() -> + File = case lists:keyfind(deps, 1, Conf) of + false -> []; + {_, Deps} -> + [begin case case Dep of + N when is_atom(N) -> GetHexVsn(N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; + {_, S, {pkg, N}} -> {N, {hex, S}}; + {N, S} when is_tuple(S) -> {N, S}; + {N, _, S} -> {N, S}; + {N, _, S, _} -> {N, S}; + _ -> false + end of + false -> ok; + {Name, Source} -> + {Method, Repo, Commit} = case Source of + {hex, V} -> {hex, V, undefined}; + {git, R} -> {git, R, master}; + {M, R, {branch, C}} -> {M, R, C}; + {M, R, {ref, C}} -> {M, R, C}; + {M, R, {tag, C}} -> {M, R, C}; + {M, R, C} -> {M, R, C} + end, + Write(io_lib:format("DEPS += ~s\ndep_~s = ~s ~s ~s~n", [Name, Name, Method, Repo, Commit])) + end end || Dep <- Deps] + end + end(), + fun() -> + case lists:keyfind(erl_first_files, 1, Conf) of + false -> ok; + {_, Files} -> + Names = [[" ", case lists:reverse(F) of + "lre." ++ Elif -> lists:reverse(Elif); + "lrx." ++ Elif -> lists:reverse(Elif); + "lry." ++ Elif -> lists:reverse(Elif); + Elif -> lists:reverse(Elif) + end] || "src/" ++ F <- Files], + Write(io_lib:format("COMPILE_FIRST +=~s\n", [Names])) + end + end(), + Write("\n\nrebar_dep: preprocess pre-deps deps pre-app app\n"), + Write("\npreprocess::\n"), + Write("\npre-deps::\n"), + Write("\npre-app::\n"), + PatchHook = fun(Cmd) -> + Cmd2 = re:replace(Cmd, "^([g]?make)(.*)( -C.*)", "\\\\1\\\\3\\\\2", [{return, list}]), + case Cmd2 of + "make -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "gmake -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "make " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + "gmake " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + _ -> Escape(Cmd) + end + end, + fun() -> + case lists:keyfind(pre_hooks, 1, Conf) of + false -> ok; + {_, Hooks} -> + [case H of + {'get-deps', Cmd} -> + Write("\npre-deps::\n\t" ++ PatchHook(Cmd) ++ "\n"); + {compile, Cmd} -> + Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + {Regex, compile, Cmd} -> + case rebar_utils:is_arch(Regex) of + true -> Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + false -> ok + end; + _ -> ok + end || H <- Hooks] + end + end(), + ShellToMk = fun(V0) -> + V1 = re:replace(V0, "[$$][(]", "$$\(shell ", [global]), + V = re:replace(V1, "([$$])(?![(])(\\\\w*)", "\\\\1(\\\\2)", [global]), + re:replace(V, "-Werror\\\\b", "", [{return, list}, global]) + end, + PortSpecs = fun() -> + case lists:keyfind(port_specs, 1, Conf) of + false -> + case filelib:is_dir("$(call core_native_path,$(DEPS_DIR)/$1/c_src)") of + false -> []; + true -> + [{"priv/" ++ proplists:get_value(so_name, Conf, "$(1)_drv.so"), + proplists:get_value(port_sources, Conf, ["c_src/*.c"]), []}] + end; + {_, Specs} -> + lists:flatten([case S of + {Output, Input} -> {ShellToMk(Output), Input, []}; + {Regex, Output, Input} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, []}; + false -> [] + end; + {Regex, Output, Input, [{env, Env}]} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, Env}; + false -> [] + end + end || S <- Specs]) + end + end(), + PortSpecWrite = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/c_src/Makefile.erlang.mk)", Text, [append]) + end, + case PortSpecs of + [] -> ok; + _ -> + Write("\npre-app::\n\t@$$\(MAKE) --no-print-directory -f c_src/Makefile.erlang.mk\n"), + PortSpecWrite(io_lib:format("ERL_CFLAGS ?= -finline-functions -Wall -fPIC -I \\"~s/erts-~s/include\\" -I \\"~s\\"\n", + [code:root_dir(), erlang:system_info(version), code:lib_dir(erl_interface, include)])), + PortSpecWrite(io_lib:format("ERL_LDFLAGS ?= -L \\"~s\\" -lerl_interface -lei\n", + [code:lib_dir(erl_interface, lib)])), + [PortSpecWrite(["\n", E, "\n"]) || E <- OsEnv], + FilterEnv = fun(Env) -> + lists:flatten([case E of + {_, _} -> E; + {Regex, K, V} -> + case rebar_utils:is_arch(Regex) of + true -> {K, V}; + false -> [] + end + end || E <- Env]) + end, + MergeEnv = fun(Env) -> + lists:foldl(fun ({K, V}, Acc) -> + case lists:keyfind(K, 1, Acc) of + false -> [{K, rebar_utils:expand_env_variable(V, K, "")}|Acc]; + {_, V0} -> [{K, rebar_utils:expand_env_variable(V, K, V0)}|Acc] + end + end, [], Env) + end, + PortEnv = case lists:keyfind(port_env, 1, Conf) of + false -> []; + {_, PortEnv0} -> FilterEnv(PortEnv0) + end, + PortSpec = fun ({Output, Input0, Env}) -> + filelib:ensure_dir("$(call core_native_path,$(DEPS_DIR)/$1/)" ++ Output), + Input = [[" ", I] || I <- Input0], + PortSpecWrite([ + [["\n", K, " = ", ShellToMk(V)] || {K, V} <- lists:reverse(MergeEnv(PortEnv))], + case $(PLATFORM) of + darwin -> "\n\nLDFLAGS += -flat_namespace -undefined suppress"; + _ -> "" + end, + "\n\nall:: ", Output, "\n\t@:\n\n", + "%.o: %.c\n\t$$\(CC) -c -o $$\@ $$\< $$\(CFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.C\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cc\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cpp\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + [[Output, ": ", K, " += ", ShellToMk(V), "\n"] || {K, V} <- lists:reverse(MergeEnv(FilterEnv(Env)))], + Output, ": $$\(foreach ext,.c .C .cc .cpp,", + "$$\(patsubst %$$\(ext),%.o,$$\(filter %$$\(ext),$$\(wildcard", Input, "))))\n", + "\t$$\(CC) -o $$\@ $$\? $$\(LDFLAGS) $$\(ERL_LDFLAGS) $$\(DRV_LDFLAGS) $$\(EXE_LDFLAGS)", + case {filename:extension(Output), $(PLATFORM)} of + {[], _} -> "\n"; + {_, darwin} -> "\n"; + _ -> " -shared\n" + end]) + end, + [PortSpec(S) || S <- PortSpecs] + end, + fun() -> + case lists:keyfind(plugins, 1, Conf) of + false -> ok; + {_, Plugins0} -> + Plugins = [P || P <- Plugins0, is_tuple(P)], + case lists:keyfind('lfe-compile', 1, Plugins) of + false -> ok; + _ -> Write("\nBUILD_DEPS = lfe lfe.mk\ndep_lfe.mk = git https://github.com/ninenines/lfe.mk master\nDEP_PLUGINS = lfe.mk\n") + end + end + end(), + Write("\ninclude $$\(if $$\(ERLANG_MK_FILENAME),$$\(ERLANG_MK_FILENAME),erlang.mk)"), + RunPlugin = fun(Plugin, Step) -> + case erlang:function_exported(Plugin, Step, 2) of + false -> ok; + true -> + c:cd("$(call core_native_path,$(DEPS_DIR)/$1/)"), + Ret = Plugin:Step({config, "", Conf, dict:new(), dict:new(), dict:new(), + dict:store(base_dir, "", dict:new())}, undefined), + io:format("rebar plugin ~p step ~p ret ~p~n", [Plugin, Step, Ret]) + end + end, + fun() -> + case lists:keyfind(plugins, 1, Conf) of + false -> ok; + {_, Plugins0} -> + Plugins = [P || P <- Plugins0, is_atom(P)], + [begin + case lists:keyfind(deps, 1, Conf) of + false -> ok; + {_, Deps} -> + case lists:keyfind(P, 1, Deps) of + false -> ok; + _ -> + Path = "$(call core_native_path,$(DEPS_DIR)/)" ++ atom_to_list(P), + io:format("~s", [os:cmd("$(MAKE) -C $(call core_native_path,$(DEPS_DIR)/$1) " ++ Path)]), + io:format("~s", [os:cmd("$(MAKE) -C " ++ Path ++ " IS_DEP=1")]), + code:add_patha(Path ++ "/ebin") + end + end + end || P <- Plugins], + [case code:load_file(P) of + {module, P} -> ok; + _ -> + case lists:keyfind(plugin_dir, 1, Conf) of + false -> ok; + {_, PluginsDir} -> + ErlFile = "$(call core_native_path,$(DEPS_DIR)/$1/)" ++ PluginsDir ++ "/" ++ atom_to_list(P) ++ ".erl", + {ok, P, Bin} = compile:file(ErlFile, [binary]), + {module, P} = code:load_binary(P, ErlFile, Bin) + end + end || P <- Plugins], + [RunPlugin(P, preprocess) || P <- Plugins], + [RunPlugin(P, pre_compile) || P <- Plugins], + [RunPlugin(P, compile) || P <- Plugins] + end + end(), + halt() +endef + +define dep_autopatch_appsrc_script.erl + AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcScript = AppSrc ++ ".script", + {ok, Conf0} = file:consult(AppSrc), + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf0, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', AppSrcScript, Bindings1), + Conf = case file:script(AppSrcScript, Bindings) of + {ok, [C]} -> C; + {ok, C} -> C + end, + ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])), + halt() +endef + +define dep_autopatch_appsrc.erl + AppSrcOut = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcIn = case filelib:is_regular(AppSrcOut) of false -> "$(call core_native_path,$(DEPS_DIR)/$1/ebin/$1.app)"; true -> AppSrcOut end, + case filelib:is_regular(AppSrcIn) of + false -> ok; + true -> + {ok, [{application, $(1), L0}]} = file:consult(AppSrcIn), + L1 = lists:keystore(modules, 1, L0, {modules, []}), + L2 = case lists:keyfind(vsn, 1, L1) of + {_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, lists:droplast(os:cmd("git describe --dirty --tags --always"))}); + {_, {cmd, _}} -> lists:keyreplace(vsn, 1, L1, {vsn, "cmd"}); + _ -> L1 + end, + L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end, + ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])), + case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end + end, + halt() +endef + +define dep_fetch_git + git clone -q -n -- $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && git checkout -q $(call dep_commit,$(1)); +endef + +define dep_fetch_git-subfolder + mkdir -p $(ERLANG_MK_TMP)/git-subfolder; \ + git clone -q -n -- $(call dep_repo,$1) \ + $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1); \ + cd $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1) \ + && git checkout -q $(call dep_commit,$1); \ + ln -s $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1)/$(word 4,$(dep_$(1))) \ + $(DEPS_DIR)/$(call dep_name,$1); +endef + +define dep_fetch_git-submodule + git submodule update --init -- $(DEPS_DIR)/$1; +endef + +define dep_fetch_hg + hg clone -q -U $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && hg update -q $(call dep_commit,$(1)); +endef + +define dep_fetch_svn + svn checkout -q $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_cp + cp -R $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_ln + ln -s $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +# Hex only has a package version. No need to look in the Erlang.mk packages. +define dep_fetch_hex + mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ + $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ + https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; +endef + +define dep_fetch_fail + echo "Error: Unknown or invalid dependency: $(1)." >&2; \ + exit 78; +endef + +# Kept for compatibility purposes with older Erlang.mk configuration. +define dep_fetch_legacy + $(warning WARNING: '$(1)' dependency configuration uses deprecated format.) \ + git clone -q -n -- $(word 1,$(dep_$(1))) $(DEPS_DIR)/$(1); \ + cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); +endef + +define dep_fetch + $(if $(dep_$(1)), \ + $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ + $(word 1,$(dep_$(1))), \ + $(if $(IS_DEP),legacy,fail)), \ + $(if $(filter $(1),$(PACKAGES)), \ + $(pkg_$(1)_fetch), \ + fail)) +endef + +define dep_target +$(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) + $(eval DEP_NAME := $(call dep_name,$1)) + $(eval DEP_STR := $(if $(filter $1,$(DEP_NAME)),$1,"$1 ($(DEP_NAME))")) + $(verbose) if test -d $(APPS_DIR)/$(DEP_NAME); then \ + echo "Error: Dependency" $(DEP_STR) "conflicts with application found in $(APPS_DIR)/$(DEP_NAME)." >&2; \ + exit 17; \ + fi + $(verbose) mkdir -p $(DEPS_DIR) + $(dep_verbose) $(call dep_fetch_$(strip $(call dep_fetch,$(1))),$(1)) + $(verbose) if [ -f $(DEPS_DIR)/$(1)/configure.ac -o -f $(DEPS_DIR)/$(1)/configure.in ] \ + && [ ! -f $(DEPS_DIR)/$(1)/configure ]; then \ + echo " AUTO " $(DEP_STR); \ + cd $(DEPS_DIR)/$(1) && autoreconf -Wall -vif -I m4; \ + fi + - $(verbose) if [ -f $(DEPS_DIR)/$(DEP_NAME)/configure ]; then \ + echo " CONF " $(DEP_STR); \ + cd $(DEPS_DIR)/$(DEP_NAME) && ./configure; \ + fi +ifeq ($(filter $(1),$(NO_AUTOPATCH)),) + $(verbose) $$(MAKE) --no-print-directory autopatch-$(DEP_NAME) +endif + +.PHONY: autopatch-$(call dep_name,$1) + +autopatch-$(call dep_name,$1):: + $(verbose) if [ "$(1)" = "amqp_client" -a "$(RABBITMQ_CLIENT_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi; \ + if [ ! -d $(DEPS_DIR)/rabbitmq-server ]; then \ + echo " PATCH Downloading rabbitmq-server"; \ + git clone https://github.com/rabbitmq/rabbitmq-server.git $(DEPS_DIR)/rabbitmq-server; \ + fi; \ + ln -s $(DEPS_DIR)/amqp_client/deps/rabbit_common-0.0.0 $(DEPS_DIR)/rabbit_common; \ + elif [ "$(1)" = "rabbit" -a "$(RABBITMQ_SERVER_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi \ + elif [ "$1" = "elixir" -a "$(ELIXIR_PATCH)" ]; then \ + ln -s lib/elixir/ebin $(DEPS_DIR)/elixir/; \ + else \ + $$(call dep_autopatch,$(call dep_name,$1)) \ + fi +endef + +$(foreach dep,$(BUILD_DEPS) $(DEPS),$(eval $(call dep_target,$(dep)))) + +ifndef IS_APP +clean:: clean-apps + +clean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep clean IS_APP=1; \ + done + +distclean:: distclean-apps + +distclean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep distclean IS_APP=1; \ + done +endif + +ifndef SKIP_DEPS +distclean:: distclean-deps + +distclean-deps: + $(gen_verbose) rm -rf $(DEPS_DIR) +endif + +# Forward-declare variables used in core/deps-tools.mk. This is required +# in case plugins use them. + +ERLANG_MK_RECURSIVE_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-deps-list.log +ERLANG_MK_RECURSIVE_DOC_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-doc-deps-list.log +ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log +ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log +ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-app + +# Configuration. + +ERLC_OPTS ?= -Werror +debug_info +warn_export_vars +warn_shadow_vars \ + +warn_obsolete_guard # +bin_opt_info +warn_export_all +warn_missing_spec +COMPILE_FIRST ?= +COMPILE_FIRST_PATHS = $(addprefix src/,$(addsuffix .erl,$(COMPILE_FIRST))) +ERLC_EXCLUDE ?= +ERLC_EXCLUDE_PATHS = $(addprefix src/,$(addsuffix .erl,$(ERLC_EXCLUDE))) + +ERLC_ASN1_OPTS ?= + +ERLC_MIB_OPTS ?= +COMPILE_MIB_FIRST ?= +COMPILE_MIB_FIRST_PATHS = $(addprefix mibs/,$(addsuffix .mib,$(COMPILE_MIB_FIRST))) + +# Verbosity. + +app_verbose_0 = @echo " APP " $(PROJECT); +app_verbose_2 = set -x; +app_verbose = $(app_verbose_$(V)) + +appsrc_verbose_0 = @echo " APP " $(PROJECT).app.src; +appsrc_verbose_2 = set -x; +appsrc_verbose = $(appsrc_verbose_$(V)) + +makedep_verbose_0 = @echo " DEPEND" $(PROJECT).d; +makedep_verbose_2 = set -x; +makedep_verbose = $(makedep_verbose_$(V)) + +erlc_verbose_0 = @echo " ERLC " $(filter-out $(patsubst %,%.erl,$(ERLC_EXCLUDE)),\ + $(filter %.erl %.core,$(?F))); +erlc_verbose_2 = set -x; +erlc_verbose = $(erlc_verbose_$(V)) + +xyrl_verbose_0 = @echo " XYRL " $(filter %.xrl %.yrl,$(?F)); +xyrl_verbose_2 = set -x; +xyrl_verbose = $(xyrl_verbose_$(V)) + +asn1_verbose_0 = @echo " ASN1 " $(filter %.asn1,$(?F)); +asn1_verbose_2 = set -x; +asn1_verbose = $(asn1_verbose_$(V)) + +mib_verbose_0 = @echo " MIB " $(filter %.bin %.mib,$(?F)); +mib_verbose_2 = set -x; +mib_verbose = $(mib_verbose_$(V)) + +ifneq ($(wildcard src/),) + +# Targets. + +app:: $(if $(wildcard ebin/test),clean) deps + $(verbose) $(MAKE) --no-print-directory $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build + +ifeq ($(wildcard src/$(PROJECT_MOD).erl),) +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, []}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +else +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {mod, {$(PROJECT_MOD), []}}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +endif + +app-build: ebin/$(PROJECT).app + $(verbose) : + +# Source files. + +ALL_SRC_FILES := $(sort $(call core_find,src/,*)) + +ERL_FILES := $(filter %.erl,$(ALL_SRC_FILES)) +CORE_FILES := $(filter %.core,$(ALL_SRC_FILES)) + +# ASN.1 files. + +ifneq ($(wildcard asn1/),) +ASN1_FILES = $(sort $(call core_find,asn1/,*.asn1)) +ERL_FILES += $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +define compile_asn1 + $(verbose) mkdir -p include/ + $(asn1_verbose) erlc -v -I include/ -o asn1/ +noobj $(ERLC_ASN1_OPTS) $(1) + $(verbose) mv asn1/*.erl src/ + -$(verbose) mv asn1/*.hrl include/ + $(verbose) mv asn1/*.asn1db include/ +endef + +$(PROJECT).d:: $(ASN1_FILES) + $(if $(strip $?),$(call compile_asn1,$?)) +endif + +# SNMP MIB files. + +ifneq ($(wildcard mibs/),) +MIB_FILES = $(sort $(call core_find,mibs/,*.mib)) + +$(PROJECT).d:: $(COMPILE_MIB_FIRST_PATHS) $(MIB_FILES) + $(verbose) mkdir -p include/ priv/mibs/ + $(mib_verbose) erlc -v $(ERLC_MIB_OPTS) -o priv/mibs/ -I priv/mibs/ $? + $(mib_verbose) erlc -o include/ -- $(addprefix priv/mibs/,$(patsubst %.mib,%.bin,$(notdir $?))) +endif + +# Leex and Yecc files. + +XRL_FILES := $(filter %.xrl,$(ALL_SRC_FILES)) +XRL_ERL_FILES = $(addprefix src/,$(patsubst %.xrl,%.erl,$(notdir $(XRL_FILES)))) +ERL_FILES += $(XRL_ERL_FILES) + +YRL_FILES := $(filter %.yrl,$(ALL_SRC_FILES)) +YRL_ERL_FILES = $(addprefix src/,$(patsubst %.yrl,%.erl,$(notdir $(YRL_FILES)))) +ERL_FILES += $(YRL_ERL_FILES) + +$(PROJECT).d:: $(XRL_FILES) $(YRL_FILES) + $(if $(strip $?),$(xyrl_verbose) erlc -v -o src/ $(YRL_ERLC_OPTS) $?) + +# Erlang and Core Erlang files. + +define makedep.erl + E = ets:new(makedep, [bag]), + G = digraph:new([acyclic]), + ErlFiles = lists:usort(string:tokens("$(ERL_FILES)", " ")), + DepsDir = "$(call core_native_path,$(DEPS_DIR))", + AppsDir = "$(call core_native_path,$(APPS_DIR))", + DepsDirsSrc = "$(if $(wildcard $(DEPS_DIR)/*/src), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/src)))", + DepsDirsInc = "$(if $(wildcard $(DEPS_DIR)/*/include), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/include)))", + AppsDirsSrc = "$(if $(wildcard $(APPS_DIR)/*/src), $(call core_native_path,$(wildcard $(APPS_DIR)/*/src)))", + AppsDirsInc = "$(if $(wildcard $(APPS_DIR)/*/include), $(call core_native_path,$(wildcard $(APPS_DIR)/*/include)))", + DepsDirs = lists:usort(string:tokens(DepsDirsSrc++DepsDirsInc, " ")), + AppsDirs = lists:usort(string:tokens(AppsDirsSrc++AppsDirsInc, " ")), + Modules = [{list_to_atom(filename:basename(F, ".erl")), F} || F <- ErlFiles], + Add = fun (Mod, Dep) -> + case lists:keyfind(Dep, 1, Modules) of + false -> ok; + {_, DepFile} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + ets:insert(E, {ModFile, DepFile}), + digraph:add_vertex(G, Mod), + digraph:add_vertex(G, Dep), + digraph:add_edge(G, Mod, Dep) + end + end, + AddHd = fun (F, Mod, DepFile) -> + case file:open(DepFile, [read]) of + {error, enoent} -> + ok; + {ok, Fd} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + case ets:match(E, {ModFile, DepFile}) of + [] -> + ets:insert(E, {ModFile, DepFile}), + F(F, Fd, Mod,0); + _ -> ok + end + end + end, + SearchHrl = fun + F(_Hrl, []) -> {error,enoent}; + F(Hrl, [Dir|Dirs]) -> + HrlF = filename:join([Dir,Hrl]), + case filelib:is_file(HrlF) of + true -> + {ok, HrlF}; + false -> F(Hrl,Dirs) + end + end, + Attr = fun + (_F, Mod, behavior, Dep) -> + Add(Mod, Dep); + (_F, Mod, behaviour, Dep) -> + Add(Mod, Dep); + (_F, Mod, compile, {parse_transform, Dep}) -> + Add(Mod, Dep); + (_F, Mod, compile, Opts) when is_list(Opts) -> + case proplists:get_value(parse_transform, Opts) of + undefined -> ok; + Dep -> Add(Mod, Dep) + end; + (F, Mod, include, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, include_lib, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, import, {Imp, _}) -> + IsFile = + case lists:keyfind(Imp, 1, Modules) of + false -> false; + {_, FilePath} -> filelib:is_file(FilePath) + end, + case IsFile of + false -> ok; + true -> Add(Mod, Imp) + end; + (_, _, _, _) -> ok + end, + MakeDepend = fun + (F, Fd, Mod, StartLocation) -> + {ok, Filename} = file:pid2name(Fd), + case io:parse_erl_form(Fd, undefined, StartLocation) of + {ok, AbsData, EndLocation} -> + case AbsData of + {attribute, _, Key, Value} -> + Attr(F, Mod, Key, Value), + F(F, Fd, Mod, EndLocation); + _ -> F(F, Fd, Mod, EndLocation) + end; + {eof, _ } -> file:close(Fd); + {error, ErrorDescription } -> + file:close(Fd); + {error, ErrorInfo, ErrorLocation} -> + F(F, Fd, Mod, ErrorLocation) + end, + ok + end, + [begin + Mod = list_to_atom(filename:basename(F, ".erl")), + case file:open(F, [read]) of + {ok, Fd} -> MakeDepend(MakeDepend, Fd, Mod,0); + {error, enoent} -> ok + end + end || F <- ErlFiles], + Depend = sofs:to_external(sofs:relation_to_family(sofs:relation(ets:tab2list(E)))), + CompileFirst = [X || X <- lists:reverse(digraph_utils:topsort(G)), [] =/= digraph:in_neighbours(G, X)], + TargetPath = fun(Target) -> + case lists:keyfind(Target, 1, Modules) of + false -> ""; + {_, DepFile} -> + DirSubname = tl(string:tokens(filename:dirname(DepFile), "/")), + string:join(DirSubname ++ [atom_to_list(Target)], "/") + end + end, + ok = file:write_file("$(1)", [ + "# Generated by Erlang.mk. Edit at your own risk!\n\n", + [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], + "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" + ]), + halt() +endef + +ifeq ($(if $(NO_MAKEDEP),$(wildcard $(PROJECT).d),),) +$(PROJECT).d:: $(ERL_FILES) $(call core_find,include/,*.hrl) $(MAKEFILE_LIST) + $(makedep_verbose) $(call erlang,$(call makedep.erl,$@)) +endif + +ifeq ($(IS_APP)$(IS_DEP),) +ifneq ($(words $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES)),0) +# Rebuild everything when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change: $(MAKEFILE_LIST) | $(ERLANG_MK_TMP) + $(verbose) if test -f $@; then \ + touch $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES); \ + touch -c $(PROJECT).d; \ + fi + $(verbose) touch $@ + +$(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES):: $(ERLANG_MK_TMP)/last-makefile-change +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change +endif +endif + +$(PROJECT).d:: + $(verbose) : + +include $(wildcard $(PROJECT).d) + +ebin/$(PROJECT).app:: ebin/ + +ebin/: + $(verbose) mkdir -p ebin/ + +define compile_erl + $(erlc_verbose) erlc -v $(if $(IS_DEP),$(filter-out -Werror,$(ERLC_OPTS)),$(ERLC_OPTS)) -o ebin/ \ + -pa ebin/ -I include/ $(filter-out $(ERLC_EXCLUDE_PATHS),$(COMPILE_FIRST_PATHS) $(1)) +endef + +define validate_app_file + case file:consult("ebin/$(PROJECT).app") of + {ok, _} -> halt(); + _ -> halt(1) + end +endef + +ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES) $(wildcard src/$(PROJECT).app.src) + $(eval FILES_TO_COMPILE := $(filter-out src/$(PROJECT).app.src,$?)) + $(if $(strip $(FILES_TO_COMPILE)),$(call compile_erl,$(FILES_TO_COMPILE))) + $(eval GITDESCRIBE := $(shell git describe --dirty --abbrev=7 --tags --always --first-parent 2>/dev/null || true)) + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(filter-out $(ERLC_EXCLUDE_PATHS),$(ERL_FILES) $(CORE_FILES) $(BEAM_FILES))))))) +ifeq ($(wildcard src/$(PROJECT).app.src),) + $(app_verbose) printf '$(subst %,%%,$(subst $(newline),\n,$(subst ','\'',$(call app_file,$(GITDESCRIBE),$(MODULES)))))' \ + > ebin/$(PROJECT).app + $(verbose) if ! $(call erlang,$(call validate_app_file)); then \ + echo "The .app file produced is invalid. Please verify the value of PROJECT_ENV." >&2; \ + exit 1; \ + fi +else + $(verbose) if [ -z "$$(grep -e '^[^%]*{\s*modules\s*,' src/$(PROJECT).app.src)" ]; then \ + echo "Empty modules entry not found in $(PROJECT).app.src. Please consult the erlang.mk documentation for instructions." >&2; \ + exit 1; \ + fi + $(appsrc_verbose) cat src/$(PROJECT).app.src \ + | sed "s/{[[:space:]]*modules[[:space:]]*,[[:space:]]*\[\]}/{modules, \[$(call comma_list,$(MODULES))\]}/" \ + | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ + > ebin/$(PROJECT).app +endif + +clean:: clean-app + +clean-app: + $(gen_verbose) rm -rf $(PROJECT).d ebin/ priv/mibs/ $(XRL_ERL_FILES) $(YRL_ERL_FILES) \ + $(addprefix include/,$(patsubst %.mib,%.hrl,$(notdir $(MIB_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.hrl,$(notdir $(ASN1_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.asn1db,$(notdir $(ASN1_FILES)))) \ + $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: docs-deps + +# Configuration. + +ALL_DOC_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(DOC_DEPS)) + +# Targets. + +$(foreach dep,$(DOC_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +doc-deps: +else +doc-deps: $(ALL_DOC_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rel-deps + +# Configuration. + +ALL_REL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(REL_DEPS)) + +# Targets. + +$(foreach dep,$(REL_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +rel-deps: +else +rel-deps: $(ALL_REL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_REL_DEPS_DIRS) ; do $(MAKE) -C $$dep; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: test-deps test-dir test-build clean-test-dir + +# Configuration. + +TEST_DIR ?= $(CURDIR)/test + +ALL_TEST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(TEST_DEPS)) + +TEST_ERLC_OPTS ?= +debug_info +warn_export_vars +warn_shadow_vars +warn_obsolete_guard +TEST_ERLC_OPTS += -DTEST=1 + +# Targets. + +$(foreach dep,$(TEST_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +test-deps: +else +test-deps: $(ALL_TEST_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_TEST_DEPS_DIRS) ; do \ + if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ + :; \ + else \ + $(MAKE) -C $$dep IS_DEP=1; \ + if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ + fi \ + done +endif + +ifneq ($(wildcard $(TEST_DIR)),) +test-dir: + $(gen_verbose) erlc -v $(TEST_ERLC_OPTS) -o $(TEST_DIR) \ + -pa ebin/ -I include/ $(call core_find,$(TEST_DIR)/,*.erl) +endif + +test-build:: IS_TEST=1 +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: $(if $(wildcard src),$(if $(wildcard ebin/test),,clean)) $(if $(IS_APP),,deps test-deps) +# We already compiled everything when IS_APP=1. +ifndef IS_APP +ifneq ($(wildcard $(TEST_DIR)),) + $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +endif +ifneq ($(wildcard src),) + $(verbose) $(MAKE) --no-print-directory $(PROJECT).d ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(verbose) $(MAKE) --no-print-directory app-build ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(gen_verbose) touch ebin/test +endif +endif + +# Roughly the same as test-build, but when IS_APP=1. +# We only care about compiling the current application. +ifdef IS_APP +test-build-app:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build-app:: test-deps +ifneq ($(wildcard $(TEST_DIR)),) + $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +endif +ifneq ($(wildcard src),) + $(verbose) $(MAKE) --no-print-directory $(PROJECT).d ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(verbose) $(MAKE) --no-print-directory app-build ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(gen_verbose) touch ebin/test +endif +endif + +clean:: clean-test-dir + +clean-test-dir: +ifneq ($(wildcard $(TEST_DIR)/*.beam),) + $(gen_verbose) rm -f $(TEST_DIR)/*.beam +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rebar.config + +# We strip out -Werror because we don't want to fail due to +# warnings when used as a dependency. + +compat_prepare_erlc_opts = $(shell echo "$1" | sed 's/, */,/g') + +define compat_convert_erlc_opts +$(if $(filter-out -Werror,$1),\ + $(if $(findstring +,$1),\ + $(shell echo $1 | cut -b 2-))) +endef + +define compat_erlc_opts_to_list +[$(call comma_list,$(foreach o,$(call compat_prepare_erlc_opts,$1),$(call compat_convert_erlc_opts,$o)))] +endef + +define compat_rebar_config +{deps, [ +$(call comma_list,$(foreach d,$(DEPS),\ + $(if $(filter hex,$(call dep_fetch,$d)),\ + {$(call dep_name,$d)$(comma)"$(call dep_repo,$d)"},\ + {$(call dep_name,$d)$(comma)".*"$(comma){git,"$(call dep_repo,$d)"$(comma)"$(call dep_commit,$d)"}}))) +]}. +{erl_opts, $(call compat_erlc_opts_to_list,$(ERLC_OPTS))}. +endef + +rebar.config: + $(gen_verbose) $(call core_render,compat_rebar_config,rebar.config) + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter asciideck,$(DEPS) $(DOC_DEPS)),asciideck) + +.PHONY: asciidoc asciidoc-guide asciidoc-manual install-asciidoc distclean-asciidoc-guide distclean-asciidoc-manual + +# Core targets. + +docs:: asciidoc + +distclean:: distclean-asciidoc-guide distclean-asciidoc-manual + +# Plugin-specific targets. + +asciidoc: asciidoc-guide asciidoc-manual + +# User guide. + +ifeq ($(wildcard doc/src/guide/book.asciidoc),) +asciidoc-guide: +else +asciidoc-guide: distclean-asciidoc-guide doc-deps + a2x -v -f pdf doc/src/guide/book.asciidoc && mv doc/src/guide/book.pdf doc/guide.pdf + a2x -v -f chunked doc/src/guide/book.asciidoc && mv doc/src/guide/book.chunked/ doc/html/ + +distclean-asciidoc-guide: + $(gen_verbose) rm -rf doc/html/ doc/guide.pdf +endif + +# Man pages. + +ASCIIDOC_MANUAL_FILES := $(wildcard doc/src/manual/*.asciidoc) + +ifeq ($(ASCIIDOC_MANUAL_FILES),) +asciidoc-manual: +else + +# Configuration. + +MAN_INSTALL_PATH ?= /usr/local/share/man +MAN_SECTIONS ?= 3 7 +MAN_PROJECT ?= $(shell echo $(PROJECT) | sed 's/^./\U&\E/') +MAN_VERSION ?= $(PROJECT_VERSION) + +# Plugin-specific targets. + +define asciidoc2man.erl +try + [begin + io:format(" ADOC ~s~n", [F]), + ok = asciideck:to_manpage(asciideck:parse_file(F), #{ + compress => gzip, + outdir => filename:dirname(F), + extra2 => "$(MAN_PROJECT) $(MAN_VERSION)", + extra3 => "$(MAN_PROJECT) Function Reference" + }) + end || F <- [$(shell echo $(addprefix $(comma)\",$(addsuffix \",$1)) | sed 's/^.//')]], + halt(0) +catch C:E -> + io:format("Exception ~p:~p~nStacktrace: ~p~n", [C, E, erlang:get_stacktrace()]), + halt(1) +end. +endef + +asciidoc-manual:: doc-deps + +asciidoc-manual:: $(ASCIIDOC_MANUAL_FILES) + $(gen_verbose) $(call erlang,$(call asciidoc2man.erl,$?)) + $(verbose) $(foreach s,$(MAN_SECTIONS),mkdir -p doc/man$s/ && mv doc/src/manual/*.$s.gz doc/man$s/;) + +install-docs:: install-asciidoc + +install-asciidoc: asciidoc-manual + $(foreach s,$(MAN_SECTIONS),\ + mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \ + install -g `id -g` -o `id -u` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;) + +distclean-asciidoc-manual: + $(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS)) +endif +endif + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: bootstrap bootstrap-lib bootstrap-rel new list-templates + +# Core targets. + +help:: + $(verbose) printf "%s\n" "" \ + "Bootstrap targets:" \ + " bootstrap Generate a skeleton of an OTP application" \ + " bootstrap-lib Generate a skeleton of an OTP library" \ + " bootstrap-rel Generate the files needed to build a release" \ + " new-app in=NAME Create a new local OTP application NAME" \ + " new-lib in=NAME Create a new local OTP library NAME" \ + " new t=TPL n=NAME Generate a module NAME based on the template TPL" \ + " new t=T n=N in=APP Generate a module NAME based on the template TPL in APP" \ + " list-templates List available templates" + +# Bootstrap templates. + +define bs_appsrc +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]}, + {mod, {$p_app, []}}, + {env, []} +]}. +endef + +define bs_appsrc_lib +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]} +]}. +endef + +# To prevent autocompletion issues with ZSH, we add "include erlang.mk" +# separately during the actual bootstrap. +define bs_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 +$(if $(SP), +# Whitespace to be used when creating files from templates. +SP = $(SP) +) +endef + +define bs_apps_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 +$(if $(SP), +# Whitespace to be used when creating files from templates. +SP = $(SP) +) +# Make sure we know where the applications are located. +ROOT_DIR ?= $(call core_relpath,$(dir $(ERLANG_MK_FILENAME)),$(APPS_DIR)/app) +APPS_DIR ?= .. +DEPS_DIR ?= $(call core_relpath,$(DEPS_DIR),$(APPS_DIR)/app) + +include $$(ROOT_DIR)/erlang.mk +endef + +define bs_app +-module($p_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + $p_sup:start_link(). + +stop(_State) -> + ok. +endef + +define bs_relx_config +{release, {$p_release, "1"}, [$p, sasl, runtime_tools]}. +{extended_start_script, true}. +{sys_config, "config/sys.config"}. +{vm_args, "config/vm.args"}. +endef + +define bs_sys_config +[ +]. +endef + +define bs_vm_args +-name $p@127.0.0.1 +-setcookie $p +-heart +endef + +# Normal templates. + +define tpl_supervisor +-module($(n)). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + Procs = [], + {ok, {{one_for_one, 1, 5}, Procs}}. +endef + +define tpl_gen_server +-module($(n)). +-behaviour(gen_server). + +%% API. +-export([start_link/0]). + +%% gen_server. +-export([init/1]). +-export([handle_call/3]). +-export([handle_cast/2]). +-export([handle_info/2]). +-export([terminate/2]). +-export([code_change/3]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_server:start_link(?MODULE, [], []). + +%% gen_server. + +init([]) -> + {ok, #state{}}. + +handle_call(_Request, _From, State) -> + {reply, ignored, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. +endef + +define tpl_module +-module($(n)). +-export([]). +endef + +define tpl_cowboy_http +-module($(n)). +-behaviour(cowboy_http_handler). + +-export([init/3]). +-export([handle/2]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {ok, Req, #state{}}. + +handle(Req, State=#state{}) -> + {ok, Req2} = cowboy_req:reply(200, Req), + {ok, Req2, State}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_gen_fsm +-module($(n)). +-behaviour(gen_fsm). + +%% API. +-export([start_link/0]). + +%% gen_fsm. +-export([init/1]). +-export([state_name/2]). +-export([handle_event/3]). +-export([state_name/3]). +-export([handle_sync_event/4]). +-export([handle_info/3]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_fsm:start_link(?MODULE, [], []). + +%% gen_fsm. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_Event, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_Event, StateName, StateData) -> + {next_state, StateName, StateData}. + +state_name(_Event, _From, StateData) -> + {reply, ignored, state_name, StateData}. + +handle_sync_event(_Event, _From, StateName, StateData) -> + {reply, ignored, StateName, StateData}. + +handle_info(_Info, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_gen_statem +-module($(n)). +-behaviour(gen_statem). + +%% API. +-export([start_link/0]). + +%% gen_statem. +-export([callback_mode/0]). +-export([init/1]). +-export([state_name/3]). +-export([handle_event/4]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_statem:start_link(?MODULE, [], []). + +%% gen_statem. + +callback_mode() -> + state_functions. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_EventType, _EventData, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_EventType, _EventData, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_cowboy_loop +-module($(n)). +-behaviour(cowboy_loop_handler). + +-export([init/3]). +-export([info/3]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {loop, Req, #state{}, 5000, hibernate}. + +info(_Info, Req, State) -> + {loop, Req, State, hibernate}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_cowboy_rest +-module($(n)). + +-export([init/3]). +-export([content_types_provided/2]). +-export([get_html/2]). + +init(_, _Req, _Opts) -> + {upgrade, protocol, cowboy_rest}. + +content_types_provided(Req, State) -> + {[{{<<"text">>, <<"html">>, '*'}, get_html}], Req, State}. + +get_html(Req, State) -> + {<<"This is REST!">>, Req, State}. +endef + +define tpl_cowboy_ws +-module($(n)). +-behaviour(cowboy_websocket_handler). + +-export([init/3]). +-export([websocket_init/3]). +-export([websocket_handle/3]). +-export([websocket_info/3]). +-export([websocket_terminate/3]). + +-record(state, { +}). + +init(_, _, _) -> + {upgrade, protocol, cowboy_websocket}. + +websocket_init(_, Req, _Opts) -> + Req2 = cowboy_req:compact(Req), + {ok, Req2, #state{}}. + +websocket_handle({text, Data}, Req, State) -> + {reply, {text, Data}, Req, State}; +websocket_handle({binary, Data}, Req, State) -> + {reply, {binary, Data}, Req, State}; +websocket_handle(_Frame, Req, State) -> + {ok, Req, State}. + +websocket_info(_Info, Req, State) -> + {ok, Req, State}. + +websocket_terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_ranch_protocol +-module($(n)). +-behaviour(ranch_protocol). + +-export([start_link/4]). +-export([init/4]). + +-type opts() :: []. +-export_type([opts/0]). + +-record(state, { + socket :: inet:socket(), + transport :: module() +}). + +start_link(Ref, Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), + {ok, Pid}. + +-spec init(ranch:ref(), inet:socket(), module(), opts()) -> ok. +init(Ref, Socket, Transport, _Opts) -> + ok = ranch:accept_ack(Ref), + loop(#state{socket=Socket, transport=Transport}). + +loop(State) -> + loop(State). +endef + +# Plugin-specific targets. + +ifndef WS +ifdef SP +WS = $(subst a,,a $(wordlist 1,$(SP),a a a a a a a a a a a a a a a a a a a a)) +else +WS = $(tab) +endif +endif + +bootstrap: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ + $(error Error: Invalid characters in the application name)) + $(eval n := $(PROJECT)_sup) + $(verbose) $(call core_render,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(verbose) $(call core_render,bs_appsrc,src/$(PROJECT).app.src) +endif + $(verbose) $(call core_render,bs_app,src/$(PROJECT)_app.erl) + $(verbose) $(call core_render,tpl_supervisor,src/$(PROJECT)_sup.erl) + +bootstrap-lib: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ + $(error Error: Invalid characters in the application name)) + $(verbose) $(call core_render,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(verbose) $(call core_render,bs_appsrc_lib,src/$(PROJECT).app.src) +endif + +bootstrap-rel: +ifneq ($(wildcard relx.config),) + $(error Error: relx.config already exists) +endif +ifneq ($(wildcard config/),) + $(error Error: config/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(verbose) $(call core_render,bs_relx_config,relx.config) + $(verbose) mkdir config/ + $(verbose) $(call core_render,bs_sys_config,config/sys.config) + $(verbose) $(call core_render,bs_vm_args,config/vm.args) + +new-app: +ifndef in + $(error Usage: $(MAKE) new-app in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ + $(error Error: Invalid characters in the application name)) + $(eval n := $(in)_sup) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(verbose) $(call core_render,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(verbose) $(call core_render,bs_appsrc,$(APPS_DIR)/$p/src/$p.app.src) +endif + $(verbose) $(call core_render,bs_app,$(APPS_DIR)/$p/src/$p_app.erl) + $(verbose) $(call core_render,tpl_supervisor,$(APPS_DIR)/$p/src/$p_sup.erl) + +new-lib: +ifndef in + $(error Usage: $(MAKE) new-lib in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ + $(error Error: Invalid characters in the application name)) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(verbose) $(call core_render,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(verbose) $(call core_render,bs_appsrc_lib,$(APPS_DIR)/$p/src/$p.app.src) +endif + +new: +ifeq ($(wildcard src/)$(in),) + $(error Error: src/ directory does not exist) +endif +ifndef t + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifndef n + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifdef in + $(verbose) $(call core_render,tpl_$(t),$(APPS_DIR)/$(in)/src/$(n).erl) +else + $(verbose) $(call core_render,tpl_$(t),src/$(n).erl) +endif + +list-templates: + $(verbose) @echo Available templates: + $(verbose) printf " %s\n" $(sort $(patsubst tpl_%,%,$(filter tpl_%,$(.VARIABLES)))) + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-c_src distclean-c_src-env + +# Configuration. + +C_SRC_DIR ?= $(CURDIR)/c_src +C_SRC_ENV ?= $(C_SRC_DIR)/env.mk +C_SRC_OUTPUT ?= $(CURDIR)/priv/$(PROJECT) +C_SRC_TYPE ?= shared + +# System type and C compiler/flags. + +ifeq ($(PLATFORM),msys2) + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= .exe + C_SRC_OUTPUT_SHARED_EXTENSION ?= .dll +else + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= + C_SRC_OUTPUT_SHARED_EXTENSION ?= .so +endif + +ifeq ($(C_SRC_TYPE),shared) + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_SHARED_EXTENSION) +else + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_EXECUTABLE_EXTENSION) +endif + +ifeq ($(PLATFORM),msys2) +# We hardcode the compiler used on MSYS2. The default CC=cc does +# not produce working code. The "gcc" MSYS2 package also doesn't. + CC = /mingw64/bin/gcc + export CC + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),darwin) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -arch x86_64 -Wall + LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress +else ifeq ($(PLATFORM),freebsd) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),linux) + CC ?= gcc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +endif + +ifneq ($(PLATFORM),msys2) + CFLAGS += -fPIC + CXXFLAGS += -fPIC +endif + +CFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" +CXXFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" + +LDLIBS += -L"$(ERL_INTERFACE_LIB_DIR)" -lerl_interface -lei + +# Verbosity. + +c_verbose_0 = @echo " C " $(?F); +c_verbose = $(c_verbose_$(V)) + +cpp_verbose_0 = @echo " CPP " $(?F); +cpp_verbose = $(cpp_verbose_$(V)) + +link_verbose_0 = @echo " LD " $(@F); +link_verbose = $(link_verbose_$(V)) + +# Targets. + +ifeq ($(wildcard $(C_SRC_DIR)),) +else ifneq ($(wildcard $(C_SRC_DIR)/Makefile),) +app:: app-c_src + +test-build:: app-c_src + +app-c_src: + $(MAKE) -C $(C_SRC_DIR) + +clean:: + $(MAKE) -C $(C_SRC_DIR) clean + +else + +ifeq ($(SOURCES),) +SOURCES := $(sort $(foreach pat,*.c *.C *.cc *.cpp,$(call core_find,$(C_SRC_DIR)/,$(pat)))) +endif +OBJECTS = $(addsuffix .o, $(basename $(SOURCES))) + +COMPILE_C = $(c_verbose) $(CC) $(CFLAGS) $(CPPFLAGS) -c +COMPILE_CPP = $(cpp_verbose) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c + +app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +$(C_SRC_OUTPUT_FILE): $(OBJECTS) + $(verbose) mkdir -p priv/ + $(link_verbose) $(CC) $(OBJECTS) \ + $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ + -o $(C_SRC_OUTPUT_FILE) + +$(OBJECTS): $(MAKEFILE_LIST) $(C_SRC_ENV) + +%.o: %.c + $(COMPILE_C) $(OUTPUT_OPTION) $< + +%.o: %.cc + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.C + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.cpp + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +clean:: clean-c_src + +clean-c_src: + $(gen_verbose) rm -f $(C_SRC_OUTPUT_FILE) $(OBJECTS) + +endif + +ifneq ($(wildcard $(C_SRC_DIR)),) +ERL_ERTS_DIR = $(shell $(ERL) -eval 'io:format("~s~n", [code:lib_dir(erts)]), halt().') + +$(C_SRC_ENV): + $(verbose) $(ERL) -eval "file:write_file(\"$(call core_native_path,$(C_SRC_ENV))\", \ + io_lib:format( \ + \"# Generated by Erlang.mk. Edit at your own risk!~n~n\" \ + \"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \ + \"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \ + \"ERL_INTERFACE_LIB_DIR ?= ~s~n\" \ + \"ERTS_DIR ?= $(ERL_ERTS_DIR)~n\", \ + [code:root_dir(), erlang:system_info(version), \ + code:lib_dir(erl_interface, include), \ + code:lib_dir(erl_interface, lib)])), \ + halt()." + +distclean:: distclean-c_src-env + +distclean-c_src-env: + $(gen_verbose) rm -f $(C_SRC_ENV) + +-include $(C_SRC_ENV) + +ifneq ($(ERL_ERTS_DIR),$(ERTS_DIR)) +$(shell rm -f $(C_SRC_ENV)) +endif +endif + +# Templates. + +define bs_c_nif +#include "erl_nif.h" + +static int loads = 0; + +static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) +{ + /* Initialize private data. */ + *priv_data = NULL; + + loads++; + + return 0; +} + +static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info) +{ + /* Convert the private data to the new version. */ + *priv_data = *old_priv_data; + + loads++; + + return 0; +} + +static void unload(ErlNifEnv* env, void* priv_data) +{ + if (loads == 1) { + /* Destroy the private data. */ + } + + loads--; +} + +static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + if (enif_is_atom(env, argv[0])) { + return enif_make_tuple2(env, + enif_make_atom(env, "hello"), + argv[0]); + } + + return enif_make_tuple2(env, + enif_make_atom(env, "error"), + enif_make_atom(env, "badarg")); +} + +static ErlNifFunc nif_funcs[] = { + {"hello", 1, hello} +}; + +ERL_NIF_INIT($n, nif_funcs, load, NULL, upgrade, unload) +endef + +define bs_erl_nif +-module($n). + +-export([hello/1]). + +-on_load(on_load/0). +on_load() -> + PrivDir = case code:priv_dir(?MODULE) of + {error, _} -> + AppPath = filename:dirname(filename:dirname(code:which(?MODULE))), + filename:join(AppPath, "priv"); + Path -> + Path + end, + erlang:load_nif(filename:join(PrivDir, atom_to_list(?MODULE)), 0). + +hello(_) -> + erlang:nif_error({not_loaded, ?MODULE}). +endef + +new-nif: +ifneq ($(wildcard $(C_SRC_DIR)/$n.c),) + $(error Error: $(C_SRC_DIR)/$n.c already exists) +endif +ifneq ($(wildcard src/$n.erl),) + $(error Error: src/$n.erl already exists) +endif +ifndef n + $(error Usage: $(MAKE) new-nif n=NAME [in=APP]) +endif +ifdef in + $(verbose) $(MAKE) -C $(APPS_DIR)/$(in)/ new-nif n=$n in= +else + $(verbose) mkdir -p $(C_SRC_DIR) src/ + $(verbose) $(call core_render,bs_c_nif,$(C_SRC_DIR)/$n.c) + $(verbose) $(call core_render,bs_erl_nif,src/$n.erl) +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ci ci-prepare ci-setup + +CI_OTP ?= +CI_HIPE ?= +CI_ERLLVM ?= + +ifeq ($(CI_VM),native) +ERLC_OPTS += +native +TEST_ERLC_OPTS += +native +else ifeq ($(CI_VM),erllvm) +ERLC_OPTS += +native +'{hipe, [to_llvm]}' +TEST_ERLC_OPTS += +native +'{hipe, [to_llvm]}' +endif + +ifeq ($(strip $(CI_OTP) $(CI_HIPE) $(CI_ERLLVM)),) +ci:: +else + +ci:: $(addprefix ci-,$(CI_OTP) $(addsuffix -native,$(CI_HIPE)) $(addsuffix -erllvm,$(CI_ERLLVM))) + +ci-prepare: $(addprefix $(KERL_INSTALL_DIR)/,$(CI_OTP) $(addsuffix -native,$(CI_HIPE))) + +ci-setup:: + $(verbose) : + +ci-extra:: + $(verbose) : + +ci_verbose_0 = @echo " CI " $(1); +ci_verbose = $(ci_verbose_$(V)) + +define ci_target +ci-$1: $(KERL_INSTALL_DIR)/$2 + $(verbose) $(MAKE) --no-print-directory clean + $(ci_verbose) \ + PATH="$(KERL_INSTALL_DIR)/$2/bin:$(PATH)" \ + CI_OTP_RELEASE="$1" \ + CT_OPTS="-label $1" \ + CI_VM="$3" \ + $(MAKE) ci-setup tests + $(verbose) $(MAKE) --no-print-directory ci-extra +endef + +$(foreach otp,$(CI_OTP),$(eval $(call ci_target,$(otp),$(otp),otp))) +$(foreach otp,$(CI_HIPE),$(eval $(call ci_target,$(otp)-native,$(otp)-native,native))) +$(foreach otp,$(CI_ERLLVM),$(eval $(call ci_target,$(otp)-erllvm,$(otp)-native,erllvm))) + +$(foreach otp,$(filter-out $(ERLANG_OTP),$(CI_OTP)),$(eval $(call kerl_otp_target,$(otp)))) +$(foreach otp,$(filter-out $(ERLANG_HIPE),$(sort $(CI_HIPE) $(CI_ERLLLVM))),$(eval $(call kerl_hipe_target,$(otp)))) + +help:: + $(verbose) printf "%s\n" "" \ + "Continuous Integration targets:" \ + " ci Run '$(MAKE) tests' on all configured Erlang versions." \ + "" \ + "The CI_OTP variable must be defined with the Erlang versions" \ + "that must be tested. For example: CI_OTP = OTP-17.3.4 OTP-17.5.3" + +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ct apps-ct distclean-ct + +# Configuration. + +CT_OPTS ?= + +ifneq ($(wildcard $(TEST_DIR)),) +ifndef CT_SUITES +CT_SUITES := $(sort $(subst _SUITE.erl,,$(notdir $(call core_find,$(TEST_DIR)/,*_SUITE.erl)))) +endif +endif +CT_SUITES ?= +CT_LOGS_DIR ?= $(CURDIR)/logs + +# Core targets. + +tests:: ct + +ifndef KEEP_LOGS +distclean:: distclean-ct +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Common_test targets:" \ + " ct Run all the common_test suites for this project" \ + "" \ + "All your common_test suites have their associated targets." \ + "A suite named http_SUITE can be ran using the ct-http target." + +# Plugin-specific targets. + +CT_RUN = ct_run \ + -no_auto_compile \ + -noinput \ + -pa $(CURDIR)/ebin $(TEST_DIR) \ + -dir $(TEST_DIR) \ + -logdir $(CT_LOGS_DIR) + +ifeq ($(CT_SUITES),) +ct: $(if $(IS_APP)$(ROOT_DIR),,apps-ct) +else +# We do not run tests if we are in an apps/* with no test directory. +ifneq ($(IS_APP)$(wildcard $(TEST_DIR)),1) +ct: test-build $(if $(IS_APP)$(ROOT_DIR),,apps-ct) + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(CT_SUITES)) $(CT_OPTS) +endif +endif + +ifneq ($(ALL_APPS_DIRS),) +define ct_app_target +apps-ct-$1: test-build + $$(MAKE) -C $1 ct IS_APP=1 +endef + +$(foreach app,$(ALL_APPS_DIRS),$(eval $(call ct_app_target,$(app)))) + +apps-ct: $(addprefix apps-ct-,$(ALL_APPS_DIRS)) +endif + +ifdef t +ifeq (,$(findstring :,$t)) +CT_EXTRA = -group $t +else +t_words = $(subst :, ,$t) +CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words)) +endif +else +ifdef c +CT_EXTRA = -case $c +else +CT_EXTRA = +endif +endif + +define ct_suite_target +ct-$(1): test-build + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose_esc) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(1)) $(CT_EXTRA) $(CT_OPTS) +endef + +$(foreach test,$(CT_SUITES),$(eval $(call ct_suite_target,$(test)))) + +distclean-ct: + $(gen_verbose) rm -rf $(CT_LOGS_DIR) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: plt distclean-plt dialyze + +# Configuration. + +DIALYZER_PLT ?= $(CURDIR)/.$(PROJECT).plt +export DIALYZER_PLT + +PLT_APPS ?= +DIALYZER_DIRS ?= --src -r $(wildcard src) $(ALL_APPS_DIRS) +DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs +DIALYZER_PLT_OPTS ?= + +# Core targets. + +check:: dialyze + +distclean:: distclean-plt + +help:: + $(verbose) printf "%s\n" "" \ + "Dialyzer targets:" \ + " plt Build a PLT file for this project" \ + " dialyze Analyze the project using Dialyzer" + +# Plugin-specific targets. + +define filter_opts.erl + Opts = init:get_plain_arguments(), + {Filtered, _} = lists:foldl(fun + (O, {Os, true}) -> {[O|Os], false}; + (O = "-D", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$D, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-I", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$I, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-pa", {Os, _}) -> {[O|Os], true}; + (_, Acc) -> Acc + end, {[], false}, Opts), + io:format("~s~n", [string:join(lists:reverse(Filtered), " ")]), + halt(). +endef + +# DIALYZER_PLT is a variable understood directly by Dialyzer. +# +# We append the path to erts at the end of the PLT. This works +# because the PLT file is in the external term format and the +# function binary_to_term/1 ignores any trailing data. +$(DIALYZER_PLT): deps app + $(eval DEPS_LOG := $(shell test -f $(ERLANG_MK_TMP)/deps.log && \ + while read p; do test -d $$p/ebin && echo $$p/ebin; done <$(ERLANG_MK_TMP)/deps.log)) + $(verbose) dialyzer --build_plt $(DIALYZER_PLT_OPTS) --apps \ + erts kernel stdlib $(PLT_APPS) $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS_LOG) || test $$? -eq 2 + $(verbose) $(ERL) -eval 'io:format("~n~s~n", [code:lib_dir(erts)]), halt().' >> $@ + +plt: $(DIALYZER_PLT) + +distclean-plt: + $(gen_verbose) rm -f $(DIALYZER_PLT) + +ifneq ($(wildcard $(DIALYZER_PLT)),) +dialyze: $(if $(filter --src,$(DIALYZER_DIRS)),,deps app) + $(verbose) if ! tail -n1 $(DIALYZER_PLT) | \ + grep -q "^`$(ERL) -eval 'io:format("~s", [code:lib_dir(erts)]), halt().'`$$"; then \ + rm $(DIALYZER_PLT); \ + $(MAKE) plt; \ + fi +else +dialyze: $(DIALYZER_PLT) +endif + $(verbose) dialyzer --no_native `$(ERL) \ + -eval "$(subst $(newline),,$(call escape_dquotes,$(call filter_opts.erl)))" \ + -extra $(ERLC_OPTS)` $(DIALYZER_DIRS) $(DIALYZER_OPTS) $(if $(wildcard ebin/),-pa ebin/) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-edoc edoc + +# Configuration. + +EDOC_OPTS ?= +EDOC_SRC_DIRS ?= +EDOC_OUTPUT ?= doc + +define edoc.erl + SrcPaths = lists:foldl(fun(P, Acc) -> + filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc + end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]), + DefaultOpts = [{dir, "$(EDOC_OUTPUT)"}, {source_path, SrcPaths}, {subpackages, false}], + edoc:application($(1), ".", [$(2)] ++ DefaultOpts), + halt(0). +endef + +# Core targets. + +ifneq ($(strip $(EDOC_SRC_DIRS)$(wildcard doc/overview.edoc)),) +docs:: edoc +endif + +distclean:: distclean-edoc + +# Plugin-specific targets. + +edoc: distclean-edoc doc-deps + $(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS))) + +distclean-edoc: + $(gen_verbose) rm -f $(EDOC_OUTPUT)/*.css $(EDOC_OUTPUT)/*.html $(EDOC_OUTPUT)/*.png $(EDOC_OUTPUT)/edoc-info + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Configuration. + +DTL_FULL_PATH ?= +DTL_PATH ?= templates/ +DTL_PREFIX ?= +DTL_SUFFIX ?= _dtl +DTL_OPTS ?= + +# Verbosity. + +dtl_verbose_0 = @echo " DTL " $(filter %.dtl,$(?F)); +dtl_verbose = $(dtl_verbose_$(V)) + +# Core targets. + +DTL_PATH := $(abspath $(DTL_PATH)) +DTL_FILES := $(sort $(call core_find,$(DTL_PATH),*.dtl)) + +ifneq ($(DTL_FILES),) + +DTL_NAMES = $(addprefix $(DTL_PREFIX),$(addsuffix $(DTL_SUFFIX),$(DTL_FILES:$(DTL_PATH)/%.dtl=%))) +DTL_MODULES = $(if $(DTL_FULL_PATH),$(subst /,_,$(DTL_NAMES)),$(notdir $(DTL_NAMES))) +BEAM_FILES += $(addsuffix .beam,$(addprefix ebin/,$(DTL_MODULES))) + +ifneq ($(words $(DTL_FILES)),0) +# Rebuild templates when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change-erlydtl: $(MAKEFILE_LIST) | $(ERLANG_MK_TMP) + $(verbose) if test -f $@; then \ + touch $(DTL_FILES); \ + fi + $(verbose) touch $@ + +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change-erlydtl +endif + +define erlydtl_compile.erl + [begin + Module0 = case "$(strip $(DTL_FULL_PATH))" of + "" -> + filename:basename(F, ".dtl"); + _ -> + "$(DTL_PATH)/" ++ F2 = filename:rootname(F, ".dtl"), + re:replace(F2, "/", "_", [{return, list}, global]) + end, + Module = list_to_atom("$(DTL_PREFIX)" ++ string:to_lower(Module0) ++ "$(DTL_SUFFIX)"), + case erlydtl:compile(F, Module, [$(DTL_OPTS)] ++ [{out_dir, "ebin/"}, return_errors]) of + ok -> ok; + {ok, _} -> ok + end + end || F <- string:tokens("$(1)", " ")], + halt(). +endef + +ebin/$(PROJECT).app:: $(DTL_FILES) | ebin/ + $(if $(strip $?),\ + $(dtl_verbose) $(call erlang,$(call erlydtl_compile.erl,$(call core_native_path,$?)),\ + -pa ebin/)) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2014, Dave Cottlehuber +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-escript escript escript-zip + +# Configuration. + +ESCRIPT_NAME ?= $(PROJECT) +ESCRIPT_FILE ?= $(ESCRIPT_NAME) + +ESCRIPT_SHEBANG ?= /usr/bin/env escript +ESCRIPT_COMMENT ?= This is an -*- erlang -*- file +ESCRIPT_EMU_ARGS ?= -escript main $(ESCRIPT_NAME) + +ESCRIPT_ZIP ?= 7z a -tzip -mx=9 -mtc=off $(if $(filter-out 0,$(V)),,> /dev/null) +ESCRIPT_ZIP_FILE ?= $(ERLANG_MK_TMP)/escript.zip + +# Core targets. + +distclean:: distclean-escript + +help:: + $(verbose) printf "%s\n" "" \ + "Escript targets:" \ + " escript Build an executable escript archive" \ + +# Plugin-specific targets. + +escript-zip:: FULL=1 +escript-zip:: deps app + $(verbose) mkdir -p $(dir $(ESCRIPT_ZIP)) + $(verbose) rm -f $(ESCRIPT_ZIP_FILE) + $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(PROJECT)/ebin/* +ifneq ($(DEPS),) + $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) \ + $(subst $(DEPS_DIR)/,,$(addsuffix /*,$(wildcard \ + $(addsuffix /ebin,$(shell cat $(ERLANG_MK_TMP)/deps.log))))) +endif + +escript:: escript-zip + $(gen_verbose) printf "%s\n" \ + "#!$(ESCRIPT_SHEBANG)" \ + "%% $(ESCRIPT_COMMENT)" \ + "%%! $(ESCRIPT_EMU_ARGS)" > $(ESCRIPT_FILE) + $(verbose) cat $(ESCRIPT_ZIP_FILE) >> $(ESCRIPT_FILE) + $(verbose) chmod +x $(ESCRIPT_FILE) + +distclean-escript: + $(gen_verbose) rm -f $(ESCRIPT_FILE) + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, Enrique Fernandez +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: eunit apps-eunit + +# Configuration + +EUNIT_OPTS ?= +EUNIT_ERL_OPTS ?= + +# Core targets. + +tests:: eunit + +help:: + $(verbose) printf "%s\n" "" \ + "EUnit targets:" \ + " eunit Run all the EUnit tests for this project" + +# Plugin-specific targets. + +define eunit.erl + $(call cover.erl) + CoverSetup(), + case eunit:test($1, [$(EUNIT_OPTS)]) of + ok -> ok; + error -> halt(2) + end, + CoverExport("$(COVER_DATA_DIR)/eunit.coverdata"), + halt() +endef + +EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(CURDIR)/ebin + +ifdef t +ifeq (,$(findstring :,$(t))) +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS)) +else +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS)) +endif +else +EUNIT_EBIN_MODS = $(notdir $(basename $(ERL_FILES) $(BEAM_FILES))) +EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl))) + +EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \ + $(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)') + +eunit: test-build $(if $(IS_APP)$(ROOT_DIR),,apps-eunit) cover-data-dir +ifneq ($(wildcard src/ $(TEST_DIR)),) + $(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS)) +endif + +ifneq ($(ALL_APPS_DIRS),) +apps-eunit: test-build + $(verbose) eunit_retcode=0 ; for app in $(ALL_APPS_DIRS); do $(MAKE) -C $$app eunit IS_APP=1; \ + [ $$? -ne 0 ] && eunit_retcode=1 ; done ; \ + exit $$eunit_retcode +endif +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter proper,$(DEPS) $(TEST_DEPS)),proper) +.PHONY: proper + +# Targets. + +tests:: proper + +define proper_check.erl + $(call cover.erl) + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + Module = fun(M) -> + [true] =:= lists:usort([ + case atom_to_list(F) of + "prop_" ++ _ -> + io:format("Testing ~p:~p/0~n", [M, F]), + proper:quickcheck(M:F(), nocolors); + _ -> + true + end + || {F, 0} <- M:module_info(exports)]) + end, + try begin + CoverSetup(), + Res = case $(1) of + all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]); + module -> Module($(2)); + function -> proper:quickcheck($(2), nocolors) + end, + CoverExport("$(COVER_DATA_DIR)/proper.coverdata"), + Res + end of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +proper: test-build cover-data-dir + $(verbose) $(call erlang,$(call proper_check.erl,module,$(t))) +else +proper: test-build cover-data-dir + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call proper_check.erl,function,$(t)())) +endif +else +proper: test-build cover-data-dir + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call proper_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Verbosity. + +proto_verbose_0 = @echo " PROTO " $(filter %.proto,$(?F)); +proto_verbose = $(proto_verbose_$(V)) + +# Core targets. + +ifneq ($(wildcard src/),) +PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) +ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) + +ifeq ($(PROTO_FILES),) +$(ERLANG_MK_TMP)/last-makefile-change-protobuffs: + $(verbose) : +else +# Rebuild proto files when the Makefile changes. +# We exclude $(PROJECT).d to avoid a circular dependency. +$(ERLANG_MK_TMP)/last-makefile-change-protobuffs: $(filter-out $(PROJECT).d,$(MAKEFILE_LIST)) | $(ERLANG_MK_TMP) + $(verbose) if test -f $@; then \ + touch $(PROTO_FILES); \ + fi + $(verbose) touch $@ + +$(PROJECT).d:: $(ERLANG_MK_TMP)/last-makefile-change-protobuffs +endif + +ifeq ($(filter gpb,$(BUILD_DEPS) $(DEPS)),) +define compile_proto.erl + [begin + protobuffs_compile:generate_source(F, [ + {output_include_dir, "./include"}, + {output_src_dir, "./src"}]) + end || F <- string:tokens("$1", " ")], + halt(). +endef +else +define compile_proto.erl + [begin + gpb_compile:file(F, [ + {include_as_lib, true}, + {module_name_suffix, "_pb"}, + {o_hrl, "./include"}, + {o_erl, "./src"}]) + end || F <- string:tokens("$1", " ")], + halt(). +endef +endif + +ifneq ($(PROTO_FILES),) +$(PROJECT).d:: $(PROTO_FILES) + $(verbose) mkdir -p ebin/ include/ + $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) +endif +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: relx-rel relx-relup distclean-relx-rel run + +# Configuration. + +RELX ?= $(ERLANG_MK_TMP)/relx +RELX_CONFIG ?= $(CURDIR)/relx.config + +RELX_URL ?= https://erlang.mk/res/relx-v3.27.0 +RELX_OPTS ?= +RELX_OUTPUT_DIR ?= _rel +RELX_REL_EXT ?= +RELX_TAR ?= 1 + +ifdef SFX + RELX_TAR = 1 +endif + +ifeq ($(firstword $(RELX_OPTS)),-o) + RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS)) +else + RELX_OPTS += -o $(RELX_OUTPUT_DIR) +endif + +# Core targets. + +ifeq ($(IS_DEP),) +ifneq ($(wildcard $(RELX_CONFIG)),) +rel:: relx-rel + +relup:: relx-relup +endif +endif + +distclean:: distclean-relx-rel + +# Plugin-specific targets. + +$(RELX): | $(ERLANG_MK_TMP) + $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL)) + $(verbose) chmod +x $(RELX) + +relx-rel: $(RELX) rel-deps app + $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release + $(verbose) $(MAKE) relx-post-rel +ifeq ($(RELX_TAR),1) + $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) tar +endif + +relx-relup: $(RELX) rel-deps app + $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release + $(MAKE) relx-post-rel + $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) relup $(if $(filter 1,$(RELX_TAR)),tar) + +distclean-relx-rel: + $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR) + +# Default hooks. +relx-post-rel:: + $(verbose) : + +# Run target. + +ifeq ($(wildcard $(RELX_CONFIG)),) +run:: +else + +define get_relx_release.erl + {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"), + {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config), + Vsn = case Vsn0 of + {cmd, Cmd} -> os:cmd(Cmd); + semver -> ""; + {semver, _} -> ""; + VsnStr -> Vsn0 + end, + Extended = case lists:keyfind(extended_start_script, 1, Config) of + {_, true} -> "1"; + _ -> "" + end, + io:format("~s ~s ~s", [Name, Vsn, Extended]), + halt(0). +endef + +RELX_REL := $(shell $(call erlang,$(get_relx_release.erl))) +RELX_REL_NAME := $(word 1,$(RELX_REL)) +RELX_REL_VSN := $(word 2,$(RELX_REL)) +RELX_REL_CMD := $(if $(word 3,$(RELX_REL)),console) + +ifeq ($(PLATFORM),msys2) +RELX_REL_EXT := .cmd +endif + +run:: all + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) $(RELX_REL_CMD) + +ifdef RELOAD +rel:: + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \ + eval "io:format(\"~p~n\", [c:lm()])" +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Relx targets:" \ + " run Compile the project, build the release and run it" + +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, M Robert Martin +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: shell + +# Configuration. + +SHELL_ERL ?= erl +SHELL_PATHS ?= $(CURDIR)/ebin $(TEST_DIR) +SHELL_OPTS ?= + +ALL_SHELL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(SHELL_DEPS)) + +# Core targets + +help:: + $(verbose) printf "%s\n" "" \ + "Shell targets:" \ + " shell Run an erlang shell with SHELL_OPTS or reasonable default" + +# Plugin-specific targets. + +$(foreach dep,$(SHELL_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +build-shell-deps: +else +build-shell-deps: $(ALL_SHELL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_SHELL_DEPS_DIRS) ; do \ + if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ + :; \ + else \ + $(MAKE) -C $$dep IS_DEP=1; \ + if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ + fi \ + done +endif + +shell:: build-shell-deps + $(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS) + +# Copyright 2017, Stanislaw Klekot +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-sphinx sphinx + +# Configuration. + +SPHINX_BUILD ?= sphinx-build +SPHINX_SOURCE ?= doc +SPHINX_CONFDIR ?= +SPHINX_FORMATS ?= html +SPHINX_DOCTREES ?= $(ERLANG_MK_TMP)/sphinx.doctrees +SPHINX_OPTS ?= + +#sphinx_html_opts = +#sphinx_html_output = html +#sphinx_man_opts = +#sphinx_man_output = man +#sphinx_latex_opts = +#sphinx_latex_output = latex + +# Helpers. + +sphinx_build_0 = @echo " SPHINX" $1; $(SPHINX_BUILD) -N -q +sphinx_build_1 = $(SPHINX_BUILD) -N +sphinx_build_2 = set -x; $(SPHINX_BUILD) +sphinx_build = $(sphinx_build_$(V)) + +define sphinx.build +$(call sphinx_build,$1) -b $1 -d $(SPHINX_DOCTREES) $(if $(SPHINX_CONFDIR),-c $(SPHINX_CONFDIR)) $(SPHINX_OPTS) $(sphinx_$1_opts) -- $(SPHINX_SOURCE) $(call sphinx.output,$1) + +endef + +define sphinx.output +$(if $(sphinx_$1_output),$(sphinx_$1_output),$1) +endef + +# Targets. + +ifneq ($(wildcard $(if $(SPHINX_CONFDIR),$(SPHINX_CONFDIR),$(SPHINX_SOURCE))/conf.py),) +docs:: sphinx +distclean:: distclean-sphinx +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Sphinx targets:" \ + " sphinx Generate Sphinx documentation." \ + "" \ + "ReST sources and 'conf.py' file are expected in directory pointed by" \ + "SPHINX_SOURCE ('doc' by default). SPHINX_FORMATS lists formats to build (only" \ + "'html' format is generated by default); target directory can be specified by" \ + 'setting sphinx_$${format}_output, for example: sphinx_html_output = output/html' \ + "Additional Sphinx options can be set in SPHINX_OPTS." + +# Plugin-specific targets. + +sphinx: + $(foreach F,$(SPHINX_FORMATS),$(call sphinx.build,$F)) + +distclean-sphinx: + $(gen_verbose) rm -rf $(filter-out $(SPHINX_SOURCE),$(foreach F,$(SPHINX_FORMATS),$(call sphinx.output,$F))) + +# Copyright (c) 2017, Jean-Sébastien Pédron +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: show-ERL_LIBS show-ERLC_OPTS show-TEST_ERLC_OPTS + +show-ERL_LIBS: + @echo $(ERL_LIBS) + +show-ERLC_OPTS: + @$(foreach opt,$(ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +show-TEST_ERLC_OPTS: + @$(foreach opt,$(TEST_ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter triq,$(DEPS) $(TEST_DEPS)),triq) +.PHONY: triq + +# Targets. + +tests:: triq + +define triq_check.erl + $(call cover.erl) + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + try begin + CoverSetup(), + Res = case $(1) of + all -> [true] =:= lists:usort([triq:check(M) || M <- [$(call comma_list,$(3))]]); + module -> triq:check($(2)); + function -> triq:check($(2)) + end, + CoverExport("$(COVER_DATA_DIR)/triq.coverdata"), + Res + end of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +triq: test-build cover-data-dir + $(verbose) $(call erlang,$(call triq_check.erl,module,$(t))) +else +triq: test-build cover-data-dir + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call triq_check.erl,function,$(t)())) +endif +else +triq: test-build cover-data-dir + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call triq_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Erlang Solutions Ltd. +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: xref distclean-xref + +# Configuration. + +ifeq ($(XREF_CONFIG),) + XREFR_ARGS := +else + XREFR_ARGS := -c $(XREF_CONFIG) +endif + +XREFR ?= $(CURDIR)/xrefr +export XREFR + +XREFR_URL ?= https://github.com/inaka/xref_runner/releases/download/1.1.0/xrefr + +# Core targets. + +help:: + $(verbose) printf '%s\n' '' \ + 'Xref targets:' \ + ' xref Run Xrefr using $$XREF_CONFIG as config file if defined' + +distclean:: distclean-xref + +# Plugin-specific targets. + +$(XREFR): + $(gen_verbose) $(call core_http_get,$(XREFR),$(XREFR_URL)) + $(verbose) chmod +x $(XREFR) + +xref: deps app $(XREFR) + $(gen_verbose) $(XREFR) $(XREFR_ARGS) + +distclean-xref: + $(gen_verbose) rm -rf $(XREFR) + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +COVER_REPORT_DIR ?= cover +COVER_DATA_DIR ?= $(COVER_REPORT_DIR) + +ifdef COVER +COVER_APPS ?= $(notdir $(ALL_APPS_DIRS)) +COVER_DEPS ?= +endif + +# Code coverage for Common Test. + +ifdef COVER +ifdef CT_RUN +ifneq ($(wildcard $(TEST_DIR)),) +test-build:: $(TEST_DIR)/ct.cover.spec + +$(TEST_DIR)/ct.cover.spec: cover-data-dir + $(gen_verbose) printf "%s\n" \ + "{incl_app, '$(PROJECT)', details}." \ + "{incl_dirs, '$(PROJECT)', [\"$(CURDIR)/ebin\" \ + $(foreach a,$(COVER_APPS),$(comma) \"$(APPS_DIR)/$a/ebin\") \ + $(foreach d,$(COVER_DEPS),$(comma) \"$(DEPS_DIR)/$d/ebin\")]}." \ + '{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@ + +CT_RUN += -cover $(TEST_DIR)/ct.cover.spec +endif +endif +endif + +# Code coverage for other tools. + +ifdef COVER +define cover.erl + CoverSetup = fun() -> + Dirs = ["$(CURDIR)/ebin" + $(foreach a,$(COVER_APPS),$(comma) "$(APPS_DIR)/$a/ebin") + $(foreach d,$(COVER_DEPS),$(comma) "$(DEPS_DIR)/$d/ebin")], + [begin + case filelib:is_dir(Dir) of + false -> false; + true -> + case cover:compile_beam_directory(Dir) of + {error, _} -> halt(1); + _ -> true + end + end + end || Dir <- Dirs] + end, + CoverExport = fun(Filename) -> cover:export(Filename) end, +endef +else +define cover.erl + CoverSetup = fun() -> ok end, + CoverExport = fun(_) -> ok end, +endef +endif + +# Core targets + +ifdef COVER +ifneq ($(COVER_REPORT_DIR),) +tests:: + $(verbose) $(MAKE) --no-print-directory cover-report +endif + +cover-data-dir: | $(COVER_DATA_DIR) + +$(COVER_DATA_DIR): + $(verbose) mkdir -p $(COVER_DATA_DIR) +else +cover-data-dir: +endif + +clean:: coverdata-clean + +ifneq ($(COVER_REPORT_DIR),) +distclean:: cover-report-clean +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Cover targets:" \ + " cover-report Generate a HTML coverage report from previously collected" \ + " cover data." \ + " all.coverdata Merge all coverdata files into all.coverdata." \ + "" \ + "If COVER=1 is set, coverage data is generated by the targets eunit and ct. The" \ + "target tests additionally generates a HTML coverage report from the combined" \ + "coverdata files from each of these testing tools. HTML reports can be disabled" \ + "by setting COVER_REPORT_DIR to empty." + +# Plugin specific targets + +COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata)) + +.PHONY: coverdata-clean +coverdata-clean: + $(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec + +# Merge all coverdata files into one. +define cover_export.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + cover:export("$(COVER_DATA_DIR)/$@"), halt(0). +endef + +all.coverdata: $(COVERDATA) cover-data-dir + $(gen_verbose) $(call erlang,$(cover_export.erl)) + +# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to +# empty if you want the coverdata files but not the HTML report. +ifneq ($(COVER_REPORT_DIR),) + +.PHONY: cover-report-clean cover-report + +cover-report-clean: + $(gen_verbose) rm -rf $(COVER_REPORT_DIR) +ifneq ($(COVER_REPORT_DIR),$(COVER_DATA_DIR)) + $(if $(shell ls -A $(COVER_DATA_DIR)/),,$(verbose) rmdir $(COVER_DATA_DIR)) +endif + +ifeq ($(COVERDATA),) +cover-report: +else + +# Modules which include eunit.hrl always contain one line without coverage +# because eunit defines test/0 which is never called. We compensate for this. +EUNIT_HRL_MODS = $(subst $(space),$(comma),$(shell \ + grep -H -e '^\s*-include.*include/eunit\.hrl"' src/*.erl \ + | sed "s/^src\/\(.*\)\.erl:.*/'\1'/" | uniq)) + +define cover_report.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + Ms = cover:imported_modules(), + [cover:analyse_to_file(M, "$(COVER_REPORT_DIR)/" ++ atom_to_list(M) + ++ ".COVER.html", [html]) || M <- Ms], + Report = [begin {ok, R} = cover:analyse(M, module), R end || M <- Ms], + EunitHrlMods = [$(EUNIT_HRL_MODS)], + Report1 = [{M, {Y, case lists:member(M, EunitHrlMods) of + true -> N - 1; false -> N end}} || {M, {Y, N}} <- Report], + TotalY = lists:sum([Y || {_, {Y, _}} <- Report1]), + TotalN = lists:sum([N || {_, {_, N}} <- Report1]), + Perc = fun(Y, N) -> case Y + N of 0 -> 100; S -> round(100 * Y / S) end end, + TotalPerc = Perc(TotalY, TotalN), + {ok, F} = file:open("$(COVER_REPORT_DIR)/index.html", [write]), + io:format(F, "~n" + "~n" + "Coverage report~n" + "~n", []), + io:format(F, "

Coverage

~n

Total: ~p%

~n", [TotalPerc]), + io:format(F, "~n", []), + [io:format(F, "" + "~n", + [M, M, Perc(Y, N)]) || {M, {Y, N}} <- Report1], + How = "$(subst $(space),$(comma)$(space),$(basename $(COVERDATA)))", + Date = "$(shell date -u "+%Y-%m-%dT%H:%M:%SZ")", + io:format(F, "
ModuleCoverage
~p~p%
~n" + "

Generated using ~s and erlang.mk on ~s.

~n" + "", [How, Date]), + halt(). +endef + +cover-report: + $(verbose) mkdir -p $(COVER_REPORT_DIR) + $(gen_verbose) $(call erlang,$(cover_report.erl)) + +endif +endif # ifneq ($(COVER_REPORT_DIR),) + +# Copyright (c) 2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: sfx + +ifdef RELX_REL +ifdef SFX + +# Configuration. + +SFX_ARCHIVE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/$(RELX_REL_NAME)-$(RELX_REL_VSN).tar.gz +SFX_OUTPUT_FILE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME).run + +# Core targets. + +rel:: sfx + +# Plugin-specific targets. + +define sfx_stub +#!/bin/sh + +TMPDIR=`mktemp -d` +ARCHIVE=`awk '/^__ARCHIVE_BELOW__$$/ {print NR + 1; exit 0;}' $$0` +FILENAME=$$(basename $$0) +REL=$${FILENAME%.*} + +tail -n+$$ARCHIVE $$0 | tar -xzf - -C $$TMPDIR + +$$TMPDIR/bin/$$REL console +RET=$$? + +rm -rf $$TMPDIR + +exit $$RET + +__ARCHIVE_BELOW__ +endef + +sfx: + $(verbose) $(call core_render,sfx_stub,$(SFX_OUTPUT_FILE)) + $(gen_verbose) cat $(SFX_ARCHIVE) >> $(SFX_OUTPUT_FILE) + $(verbose) chmod +x $(SFX_OUTPUT_FILE) + +endif +endif + +# Copyright (c) 2013-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# External plugins. + +DEP_PLUGINS ?= + +$(foreach p,$(DEP_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/plugins.mk,$p)))) + +help:: help-plugins + +help-plugins:: + $(verbose) : + +# Copyright (c) 2013-2015, Loïc Hoguin +# Copyright (c) 2015-2016, Jean-Sébastien Pédron +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Fetch dependencies recursively (without building them). + +.PHONY: fetch-deps fetch-doc-deps fetch-rel-deps fetch-test-deps \ + fetch-shell-deps + +.PHONY: $(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +fetch-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +fetch-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +fetch-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +fetch-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +fetch-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +ifneq ($(SKIP_DEPS),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): + $(verbose) :> $@ +else +# By default, we fetch "normal" dependencies. They are also included no +# matter the type of requested dependencies. +# +# $(ALL_DEPS_DIRS) includes $(BUILD_DEPS). + +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_DOC_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_REL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_TEST_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_SHELL_DEPS_DIRS) + +# Allow to use fetch-deps and $(DEP_TYPES) to fetch multiple types of +# dependencies with a single target. +ifneq ($(filter doc,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DOC_DEPS_DIRS) +endif +ifneq ($(filter rel,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_REL_DEPS_DIRS) +endif +ifneq ($(filter test,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_TEST_DEPS_DIRS) +endif +ifneq ($(filter shell,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_SHELL_DEPS_DIRS) +endif + +ERLANG_MK_RECURSIVE_TMP_LIST := $(abspath $(ERLANG_MK_TMP)/recursive-tmp-deps.log) + +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): | $(ERLANG_MK_TMP) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +ifndef IS_APP + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep $@ \ + IS_APP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + done +endif + $(verbose) set -e; for dep in $^ ; do \ + if ! grep -qs ^$$dep$$ $(ERLANG_MK_RECURSIVE_TMP_LIST); then \ + echo $$dep >> $(ERLANG_MK_RECURSIVE_TMP_LIST); \ + if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \ + $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \ + $(MAKE) -C $$dep fetch-deps \ + IS_DEP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + fi \ + fi \ + done +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) sort < $(ERLANG_MK_RECURSIVE_TMP_LIST) | uniq > $@ + $(verbose) rm $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +endif # ifneq ($(SKIP_DEPS),) + +# List dependencies recursively. + +.PHONY: list-deps list-doc-deps list-rel-deps list-test-deps \ + list-shell-deps + +list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +list-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +list-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +list-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: + $(verbose) cat $^ diff --git a/erlang/new_task.erl b/erlang/new_task.erl index 8b5ad0f9..26df1587 100755 --- a/erlang/new_task.erl +++ b/erlang/new_task.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive.erl b/erlang/receive.erl index 640b4295..1f990e03 100755 --- a/erlang/receive.erl +++ b/erlang/receive.erl @@ -1,26 +1,25 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). main(_) -> {ok, Connection} = - amqp_connection:start(#amqp_params_network{host = "localhost"}), + amqp_connection:start(#amqp_params_network{host = "localhost", heartbeat = 30}), {ok, Channel} = amqp_connection:open_channel(Connection), amqp_channel:call(Channel, #'queue.declare'{queue = <<"hello">>}), io:format(" [*] Waiting for messages. To exit press CTRL+C~n"), - amqp_channel:subscribe(Channel, #'basic.consume'{queue = <<"hello">>, - no_ack = true}, self()), - receive - #'basic.consume_ok'{} -> ok - end, + Method = #'basic.consume'{queue = <<"hello">>, no_ack = true}, + amqp_channel:subscribe(Channel, Method, self()), loop(Channel). - loop(Channel) -> receive + #'basic.consume_ok'{} -> + io:format(" [x] Saw basic.consume_ok~n"), + loop(Channel); {#'basic.deliver'{}, #amqp_msg{payload = Body}} -> io:format(" [x] Received ~p~n", [Body]), loop(Channel) diff --git a/erlang/receive_logs.erl b/erlang/receive_logs.erl index 25b2b852..79edbb79 100755 --- a/erlang/receive_logs.erl +++ b/erlang/receive_logs.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_direct.erl b/erlang/receive_logs_direct.erl index 956653f6..6651b580 100755 --- a/erlang/receive_logs_direct.erl +++ b/erlang/receive_logs_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_topic.erl b/erlang/receive_logs_topic.erl index 3c01fe70..ba8c288e 100755 --- a/erlang/receive_logs_topic.erl +++ b/erlang/receive_logs_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/send.erl b/erlang/send.erl index f5a0f4e2..61b7239c 100755 --- a/erlang/send.erl +++ b/erlang/send.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/worker.erl b/erlang/worker.erl index 866397a9..b2a7fbfd 100755 --- a/erlang/worker.erl +++ b/erlang/worker.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin ./recon/ebin +%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin -include_lib("amqp_client/include/amqp_client.hrl"). From 264e8d6d1acbabeb84701da4c3cbbbd8b21e7b22 Mon Sep 17 00:00:00 2001 From: Spring Operator Date: Mon, 11 Mar 2019 21:56:13 -0500 Subject: [PATCH 121/659] URL Cleanup This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). # HTTP URLs that Could Not Be Fixed These URLs were unable to be fixed. Please review them to see if they can be manually resolved. * http://smartbearsoftware.com/repository/maven2 (301) could not be migrated: ([https](https://smartbearsoftware.com/repository/maven2) result SSLHandshakeException). # Fixed URLs ## Fixed Success These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * http://www.apache.org/licenses/LICENSE-2.0 migrated to: https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200). # Ignored These URLs were intentionally ignored. * http://maven.apache.org/POM/4.0.0 * http://maven.apache.org/maven-v4_0_0.xsd * http://maven.apache.org/xsd/maven-4.0.0.xsd * http://www.w3.org/2001/XMLSchema-instance --- scala/mvnw | 2 +- scala/mvnw.cmd | 2 +- soapui/mvnw | 2 +- soapui/mvnw.cmd | 2 +- soapui/pom.xml | 2 +- spring-amqp/mvnw | 2 +- spring-amqp/mvnw.cmd | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scala/mvnw b/scala/mvnw index 5551fde8..8b9da3b8 100755 --- a/scala/mvnw +++ b/scala/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an diff --git a/scala/mvnw.cmd b/scala/mvnw.cmd index 48363fa6..a5284c79 100755 --- a/scala/mvnw.cmd +++ b/scala/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an diff --git a/soapui/mvnw b/soapui/mvnw index 5551fde8..8b9da3b8 100755 --- a/soapui/mvnw +++ b/soapui/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an diff --git a/soapui/mvnw.cmd b/soapui/mvnw.cmd index 48363fa6..a5284c79 100755 --- a/soapui/mvnw.cmd +++ b/soapui/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an diff --git a/soapui/pom.xml b/soapui/pom.xml index 83911c55..e1c2d12d 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -11,7 +11,7 @@ smartbear-repository - http://smartbearsoftware.com/repository/maven2 + http://smartbearsoftware.com/repository/maven2/ diff --git a/spring-amqp/mvnw b/spring-amqp/mvnw index 5551fde8..8b9da3b8 100755 --- a/spring-amqp/mvnw +++ b/spring-amqp/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an diff --git a/spring-amqp/mvnw.cmd b/spring-amqp/mvnw.cmd index 48363fa6..a5284c79 100755 --- a/spring-amqp/mvnw.cmd +++ b/spring-amqp/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an From 6ff2a1d7e1134436db8779b0f4e39e236bd9636c Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Tue, 12 Mar 2019 17:32:42 +0100 Subject: [PATCH 122/659] Publish tasks as persistent messages in the php-amqp tutorial --- php-amqp/new_task.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php-amqp/new_task.php b/php-amqp/new_task.php index 04bb3d48..2640ef3f 100644 --- a/php-amqp/new_task.php +++ b/php-amqp/new_task.php @@ -33,7 +33,7 @@ $message = "Hello World!"; $exchange = new AMQPExchange($channel); -$exchange->publish($message, $routing_key); +$exchange->publish($message, $routing_key, AMQP_NOPARAM, array('delivery_mode' => 2)); echo " [x] Sent {$message}", PHP_EOL; From 67c944254931e87a2a65bcf34838d827fc1ba0fd Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 12 Mar 2019 20:32:51 +0300 Subject: [PATCH 123/659] php-amqplib tutorial: bump dependency version --- php/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/composer.json b/php/composer.json index 39288364..7cf5c32f 100644 --- a/php/composer.json +++ b/php/composer.json @@ -1,5 +1,5 @@ { "require": { - "php-amqplib/php-amqplib": ">=2.6.1" + "php-amqplib/php-amqplib": ">=v2.8.2-rc3" } } From 25940605c845b937f015fb5c2f0a8207ab02513a Mon Sep 17 00:00:00 2001 From: Spring Operator Date: Tue, 19 Mar 2019 20:11:49 -0500 Subject: [PATCH 124/659] URL Cleanup This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). # HTTP URLs that Could Not Be Fixed These URLs were unable to be fixed. Please review them to see if they can be manually resolved. * http://smartbearsoftware.com/repository/maven2/ (200) with 1 occurrences could not be migrated: ([https](https://smartbearsoftware.com/repository/maven2/) result SSLHandshakeException). # Fixed URLs ## Fixed But Review Recommended These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended. * http://eviware.com/soapui/config (ReadTimeoutException) with 1 occurrences migrated to: https://eviware.com/soapui/config ([https](https://eviware.com/soapui/config) result SSLHandshakeException). ## Fixed Success These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * http://maven.apache.org/xsd/maven-4.0.0.xsd with 3 occurrences migrated to: https://maven.apache.org/xsd/maven-4.0.0.xsd ([https](https://maven.apache.org/xsd/maven-4.0.0.xsd) result 200). * http://maven.apache.org/maven-v4_0_0.xsd with 1 occurrences migrated to: https://maven.apache.org/maven-v4_0_0.xsd ([https](https://maven.apache.org/maven-v4_0_0.xsd) result 301). # Ignored These URLs were intentionally ignored. * http://maven.apache.org/POM/4.0.0 with 8 occurrences * http://www.w3.org/2001/XMLSchema-instance with 4 occurrences --- java-mvn/pom.xml | 2 +- scala/pom.xml | 2 +- soapui/RabbitMQ-tutorials-soapui-project.xml | 2 +- soapui/pom.xml | 2 +- spring-amqp/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index fa456ce5..14be8e41 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.rabbitmq diff --git a/scala/pom.xml b/scala/pom.xml index b75678ce..5ef6561e 100644 --- a/scala/pom.xml +++ b/scala/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.rabbitmq rabbitmq-tutorial-scala diff --git a/soapui/RabbitMQ-tutorials-soapui-project.xml b/soapui/RabbitMQ-tutorials-soapui-project.xml index ec72137d..c011ab9b 100644 --- a/soapui/RabbitMQ-tutorials-soapui-project.xml +++ b/soapui/RabbitMQ-tutorials-soapui-project.xml @@ -1,5 +1,5 @@ - + The simplest thing that does something diff --git a/soapui/pom.xml b/soapui/pom.xml index e1c2d12d..98ab68cd 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 com.rabbitmq diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 848b833d..9fd187e8 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.amqp From 5436636673ba048e1bd2e363597697c11cb52775 Mon Sep 17 00:00:00 2001 From: Spring Operator Date: Wed, 20 Mar 2019 03:25:16 -0500 Subject: [PATCH 125/659] URL Cleanup This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). # HTTP URLs that Could Not Be Fixed These URLs were unable to be fixed. Please review them to see if they can be manually resolved. * http://blog.listincomprehension.com/search/label/procket (200) with 1 occurrences could not be migrated: ([https](https://blog.listincomprehension.com/search/label/procket) result ClosedChannelException). * http://central.maven.org/maven2/com/rabbitmq/amqp-client/4.0.2/amqp-client-4.0.2.jar (200) with 1 occurrences could not be migrated: ([https](https://central.maven.org/maven2/com/rabbitmq/amqp-client/4.0.2/amqp-client-4.0.2.jar) result SSLHandshakeException). * http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar (200) with 1 occurrences could not be migrated: ([https](https://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar) result SSLHandshakeException). * http://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.22/slf4j-simple-1.7.22.jar (200) with 1 occurrences could not be migrated: ([https](https://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.22/slf4j-simple-1.7.22.jar) result SSLHandshakeException). * http://clojurerabbitmq.info (200) with 1 occurrences could not be migrated: ([https](https://clojurerabbitmq.info) result AnnotatedConnectException). * http://dozzie.jarowit.net/trac/wiki/TOML (200) with 1 occurrences could not be migrated: ([https](https://dozzie.jarowit.net/trac/wiki/TOML) result SSLHandshakeException). * http://dozzie.jarowit.net/trac/wiki/subproc (200) with 1 occurrences could not be migrated: ([https](https://dozzie.jarowit.net/trac/wiki/subproc) result SSLHandshakeException). * http://e2project.org (200) with 1 occurrences could not be migrated: ([https](https://e2project.org) result AnnotatedConnectException). * http://nitrogenproject.com/ (200) with 2 occurrences could not be migrated: ([https](https://nitrogenproject.com/) result ConnectTimeoutException). * http://proper.softlab.ntua.gr (200) with 1 occurrences could not be migrated: ([https](https://proper.softlab.ntua.gr) result SSLHandshakeException). * http://rubybunny.info (200) with 2 occurrences could not be migrated: ([https](https://rubybunny.info) result AnnotatedConnectException). * http://yaws.hyber.org (200) with 1 occurrences could not be migrated: ([https](https://yaws.hyber.org) result AnnotatedConnectException). * http://schemas.microsoft.com/developer/msbuild/2003 (404) with 13 occurrences could not be migrated: ([https](https://schemas.microsoft.com/developer/msbuild/2003) result AnnotatedConnectException). * http://choven.ca (503) with 1 occurrences could not be migrated: ([https](https://choven.ca) result ConnectTimeoutException). # Fixed URLs ## Fixed But Review Recommended These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended. * http://fixprotocol.org/ (301) with 1 occurrences migrated to: https://fixtrading.org ([https](https://fixprotocol.org/) result SSLHandshakeException). * http://cl-rabbit.io/cl-bunny (UnknownHostException) with 2 occurrences migrated to: https://cl-rabbit.io/cl-bunny ([https](https://cl-rabbit.io/cl-bunny) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/ (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/ ([https](https://cl-rabbit.io/cl-bunny/tutorials/) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html) result UnknownHostException). * http://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html (UnknownHostException) with 1 occurrences migrated to: https://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html ([https](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html) result UnknownHostException). * http://erldb.org (UnknownHostException) with 1 occurrences migrated to: https://erldb.org ([https](https://erldb.org) result UnknownHostException). * http://hg.rabbitmq.com/rabbitmq-erlang-client/ (UnknownHostException) with 1 occurrences migrated to: https://hg.rabbitmq.com/rabbitmq-erlang-client/ ([https](https://hg.rabbitmq.com/rabbitmq-erlang-client/) result UnknownHostException). * http://elixir-lang.org/docs/stable/mix/Mix.html (301) with 1 occurrences migrated to: https://elixir-lang.org/docs/stable/mix/Mix.html ([https](https://elixir-lang.org/docs/stable/mix/Mix.html) result 404). ## Fixed Success These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * http://cloudi.org/ with 27 occurrences migrated to: https://cloudi.org/ ([https](https://cloudi.org/) result 200). * http://docs.spring.io/spring-amqp/reference/html/ with 1 occurrences migrated to: https://docs.spring.io/spring-amqp/reference/html/ ([https](https://docs.spring.io/spring-amqp/reference/html/) result 200). * http://elixir-lang.org with 1 occurrences migrated to: https://elixir-lang.org ([https](https://elixir-lang.org) result 200). * http://elixir-lang.org/install.html with 1 occurrences migrated to: https://elixir-lang.org/install.html ([https](https://elixir-lang.org/install.html) result 200). * http://erlware.org/ with 1 occurrences migrated to: https://erlware.org/ ([https](https://erlware.org/) result 200). * http://getcomposer.org with 2 occurrences migrated to: https://getcomposer.org ([https](https://getcomposer.org) result 200). * http://github.com/rabbitmq/rabbitmq-tutorials with 1 occurrences migrated to: https://github.com/rabbitmq/rabbitmq-tutorials ([https](https://github.com/rabbitmq/rabbitmq-tutorials) result 200). * http://hackage.haskell.org/package/amqp with 1 occurrences migrated to: https://hackage.haskell.org/package/amqp ([https](https://hackage.haskell.org/package/amqp) result 200). * http://inaka.github.io/cowboy-trails/ with 1 occurrences migrated to: https://inaka.github.io/cowboy-trails/ ([https](https://inaka.github.io/cowboy-trails/) result 200). * http://leiningen.org with 1 occurrences migrated to: https://leiningen.org ([https](https://leiningen.org) result 200). * http://ninenines.eu with 6 occurrences migrated to: https://ninenines.eu ([https](https://ninenines.eu) result 200). * http://www.actordb.com/ with 2 occurrences migrated to: https://www.actordb.com/ ([https](https://www.actordb.com/) result 200). * http://www.apple.com/DTDs/PropertyList-1.0.dtd with 10 occurrences migrated to: https://www.apple.com/DTDs/PropertyList-1.0.dtd ([https](https://www.apple.com/DTDs/PropertyList-1.0.dtd) result 200). * http://www.cliki.net/fibonacci with 1 occurrences migrated to: https://www.cliki.net/fibonacci ([https](https://www.cliki.net/fibonacci) result 200). * http://www.cs.kent.ac.uk/projects/wrangler/Home.html with 1 occurrences migrated to: https://www.cs.kent.ac.uk/projects/wrangler/Home.html ([https](https://www.cs.kent.ac.uk/projects/wrangler/Home.html) result 200). * http://www.eclipse.org/legal/epl-v10.html with 1 occurrences migrated to: https://www.eclipse.org/legal/epl-v10.html ([https](https://www.eclipse.org/legal/epl-v10.html) result 200). * http://www.rabbitmq.com/download.html with 1 occurrences migrated to: https://www.rabbitmq.com/download.html ([https](https://www.rabbitmq.com/download.html) result 200). * http://www.rabbitmq.com/erlang-client-user-guide.html with 1 occurrences migrated to: https://www.rabbitmq.com/erlang-client-user-guide.html ([https](https://www.rabbitmq.com/erlang-client-user-guide.html) result 200). * http://www.rabbitmq.com/getstarted.html with 20 occurrences migrated to: https://www.rabbitmq.com/getstarted.html ([https](https://www.rabbitmq.com/getstarted.html) result 200). * http://www.rabbitmq.com/releases/rabbitmq-server/ with 1 occurrences migrated to: https://www.rabbitmq.com/releases/rabbitmq-server/ ([https](https://www.rabbitmq.com/releases/rabbitmq-server/) result 200). * http://www.rabbitmq.com/tutorials/tutorial-five-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-five-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-five-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-five-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-five-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-five-php.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-four-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-four-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-four-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-four-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-four-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-four-php.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-one-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-one-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-one-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-one-php.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-six-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-six-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-six-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-six-php.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-three-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-three-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-three-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-three-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-three-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-three-php.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-two-javascript.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html ([https](https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html) result 200). * http://www.rabbitmq.com/tutorials/tutorial-two-php.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials/tutorial-two-php.html ([https](https://www.rabbitmq.com/tutorials/tutorial-two-php.html) result 200). * http://www.rebar3.org with 1 occurrences migrated to: https://www.rebar3.org ([https](https://www.rebar3.org) result 200). * http://inaka.github.com/apns4erl with 1 occurrences migrated to: https://inaka.github.com/apns4erl ([https](https://inaka.github.com/apns4erl) result 301). * http://inaka.github.com/edis/ with 1 occurrences migrated to: https://inaka.github.com/edis/ ([https](https://inaka.github.com/edis/) result 301). * http://lasp-lang.org/ with 1 occurrences migrated to: https://lasp-lang.org/ ([https](https://lasp-lang.org/) result 301). * http://rabbitmq.com/download.html with 1 occurrences migrated to: https://rabbitmq.com/download.html ([https](https://rabbitmq.com/download.html) result 301). * http://saleyn.github.com/erlexec with 1 occurrences migrated to: https://saleyn.github.com/erlexec ([https](https://saleyn.github.com/erlexec) result 301). * http://erlang.org/download.html (302) with 1 occurrences migrated to: https://www.erlang.org/download.html ([https](https://erlang.org/download.html) result 301). * http://www.erlang.org/download/otp_src_R14B03.tar.gz with 1 occurrences migrated to: https://www.erlang.org/download/otp_src_R14B03.tar.gz ([https](https://www.erlang.org/download/otp_src_R14B03.tar.gz) result 301). * http://www.rabbitmq.com/releases with 1 occurrences migrated to: https://www.rabbitmq.com/releases ([https](https://www.rabbitmq.com/releases) result 301). * http://www.rabbitmq.com/tutorial-five-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-five-dotnet.html ([https](https://www.rabbitmq.com/tutorial-five-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-five-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-five-go.html ([https](https://www.rabbitmq.com/tutorial-five-go.html) result 301). * http://www.rabbitmq.com/tutorial-five-java.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-five-java.html ([https](https://www.rabbitmq.com/tutorial-five-java.html) result 301). * http://www.rabbitmq.com/tutorial-five-python.html with 4 occurrences migrated to: https://www.rabbitmq.com/tutorial-five-python.html ([https](https://www.rabbitmq.com/tutorial-five-python.html) result 301). * http://www.rabbitmq.com/tutorial-five-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-five-ruby.html ([https](https://www.rabbitmq.com/tutorial-five-ruby.html) result 301). * http://www.rabbitmq.com/tutorial-four-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-four-dotnet.html ([https](https://www.rabbitmq.com/tutorial-four-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-four-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-four-go.html ([https](https://www.rabbitmq.com/tutorial-four-go.html) result 301). * http://www.rabbitmq.com/tutorial-four-java.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-four-java.html ([https](https://www.rabbitmq.com/tutorial-four-java.html) result 301). * http://www.rabbitmq.com/tutorial-four-python.html with 4 occurrences migrated to: https://www.rabbitmq.com/tutorial-four-python.html ([https](https://www.rabbitmq.com/tutorial-four-python.html) result 301). * http://www.rabbitmq.com/tutorial-four-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-four-ruby.html ([https](https://www.rabbitmq.com/tutorial-four-ruby.html) result 301). * http://www.rabbitmq.com/tutorial-one-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-one-dotnet.html ([https](https://www.rabbitmq.com/tutorial-one-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-one-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-one-go.html ([https](https://www.rabbitmq.com/tutorial-one-go.html) result 301). * http://www.rabbitmq.com/tutorial-one-java.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-one-java.html ([https](https://www.rabbitmq.com/tutorial-one-java.html) result 301). * http://www.rabbitmq.com/tutorial-one-python.html with 4 occurrences migrated to: https://www.rabbitmq.com/tutorial-one-python.html ([https](https://www.rabbitmq.com/tutorial-one-python.html) result 301). * http://www.rabbitmq.com/tutorial-one-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-one-ruby.html ([https](https://www.rabbitmq.com/tutorial-one-ruby.html) result 301). * http://www.rabbitmq.com/tutorial-six-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-six-dotnet.html ([https](https://www.rabbitmq.com/tutorial-six-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-six-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-six-go.html ([https](https://www.rabbitmq.com/tutorial-six-go.html) result 301). * http://www.rabbitmq.com/tutorial-six-java.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-six-java.html ([https](https://www.rabbitmq.com/tutorial-six-java.html) result 301). * http://www.rabbitmq.com/tutorial-six-python.html with 3 occurrences migrated to: https://www.rabbitmq.com/tutorial-six-python.html ([https](https://www.rabbitmq.com/tutorial-six-python.html) result 301). * http://www.rabbitmq.com/tutorial-six-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-six-ruby.html ([https](https://www.rabbitmq.com/tutorial-six-ruby.html) result 301). * http://www.rabbitmq.com/tutorial-three-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-three-dotnet.html ([https](https://www.rabbitmq.com/tutorial-three-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-three-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-three-go.html ([https](https://www.rabbitmq.com/tutorial-three-go.html) result 301). * http://www.rabbitmq.com/tutorial-three-java.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-three-java.html ([https](https://www.rabbitmq.com/tutorial-three-java.html) result 301). * http://www.rabbitmq.com/tutorial-three-python.html with 4 occurrences migrated to: https://www.rabbitmq.com/tutorial-three-python.html ([https](https://www.rabbitmq.com/tutorial-three-python.html) result 301). * http://www.rabbitmq.com/tutorial-three-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-three-ruby.html ([https](https://www.rabbitmq.com/tutorial-three-ruby.html) result 301). * http://www.rabbitmq.com/tutorial-two-dotnet.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-two-dotnet.html ([https](https://www.rabbitmq.com/tutorial-two-dotnet.html) result 301). * http://www.rabbitmq.com/tutorial-two-go.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-two-go.html ([https](https://www.rabbitmq.com/tutorial-two-go.html) result 301). * http://www.rabbitmq.com/tutorial-two-java.html with 2 occurrences migrated to: https://www.rabbitmq.com/tutorial-two-java.html ([https](https://www.rabbitmq.com/tutorial-two-java.html) result 301). * http://www.rabbitmq.com/tutorial-two-python.html with 4 occurrences migrated to: https://www.rabbitmq.com/tutorial-two-python.html ([https](https://www.rabbitmq.com/tutorial-two-python.html) result 301). * http://www.rabbitmq.com/tutorial-two-ruby.html with 1 occurrences migrated to: https://www.rabbitmq.com/tutorial-two-ruby.html ([https](https://www.rabbitmq.com/tutorial-two-ruby.html) result 301). * http://www.rabbitmq.com/tutorials with 1 occurrences migrated to: https://www.rabbitmq.com/tutorials ([https](https://www.rabbitmq.com/tutorials) result 301). * http://zhongwencool.github.io/observer_cli with 1 occurrences migrated to: https://zhongwencool.github.io/observer_cli ([https](https://zhongwencool.github.io/observer_cli) result 301). * http://go.microsoft.com/fwlink/?LinkID=322105 with 12 occurrences migrated to: https://go.microsoft.com/fwlink/?LinkID=322105 ([https](https://go.microsoft.com/fwlink/?LinkID=322105) result 302). --- Makefile | 6 +- README.md | 6 +- clojure/README.md | 16 ++-- clojure/project.clj | 4 +- common-lisp/README.md | 18 ++-- common-lisp/rpc-server.lisp | 2 +- dart/README.md | 2 +- .../1_Receive/1_Receive.csproj | 2 +- dotnet-visual-studio/1_Send/1_Send.csproj | 2 +- .../2_NewTask/2_NewTask.csproj | 2 +- dotnet-visual-studio/2_Worker/2_Worker.csproj | 2 +- .../3_EmitLog/3_EmitLog.csproj | 2 +- .../3_ReceiveLogs/3_ReceiveLogs.csproj | 2 +- .../4_EmitLogDirect/4_EmitLogDirect.csproj | 2 +- .../4_ReceiveLogsDirect.csproj | 2 +- .../5_EmitLogTopic/5_EmitLogTopic.csproj | 2 +- .../5_ReceiveLogsTopic.csproj | 2 +- .../6_RPCClient/6_RPCClient.csproj | 2 +- .../6_RPCServer/6_RPCServer.csproj | 2 +- dotnet-visual-studio/README.md | 14 +-- dotnet/README.md | 14 +-- elixir/README.md | 8 +- erlang/README.md | 18 ++-- erlang/erlang.mk | 92 +++++++++---------- go/README.md | 14 +-- haskell/README.md | 16 ++-- java/README.md | 8 +- javascript-nodejs/README.md | 14 +-- kotlin/README.md | 2 +- objective-c/README.md | 2 +- objective-c/tutorial1/tutorial1/Info.plist | 2 +- objective-c/tutorial2/tutorial2/Info.plist | 2 +- objective-c/tutorial3/tutorial3/Info.plist | 2 +- objective-c/tutorial4/tutorial4/Info.plist | 2 +- objective-c/tutorial5/tutorial5/Info.plist | 2 +- perl/README.md | 14 +-- php-interop/README.md | 2 +- php/README.md | 16 ++-- python/README.md | 14 +-- ruby/README.md | 14 +-- soapui/README.md | 4 +- spring-amqp/README.md | 4 +- swift/README.md | 2 +- swift/tutorial1/tutorial1/Info.plist | 2 +- swift/tutorial2/tutorial2/Info.plist | 2 +- swift/tutorial3/tutorial3/Info.plist | 2 +- swift/tutorial4/tutorial4/Info.plist | 2 +- swift/tutorial5/tutorial5/Info.plist | 2 +- 48 files changed, 185 insertions(+), 185 deletions(-) diff --git a/Makefile b/Makefile index e51e6781..5e2a2eef 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ all: # this commands: # cd /usr/src # apt-get -y install libncurses-dev libssl-dev -# [ -e otp_src_R14B03.tar.gz ] || wget http://www.erlang.org/download/otp_src_R14B03.tar.gz +# [ -e otp_src_R14B03.tar.gz ] || wget https://www.erlang.org/download/otp_src_R14B03.tar.gz # [ -e otp_src_R14B03 ] || tar xzf otp_src_R14B03.tar.gz # cd otp_src_R14B03/ # ./configure @@ -41,8 +41,8 @@ test: setup test-travisci: setup-travisci SLOWNESS=4 RUBY=ruby python travisci.py -RABBITVER:=$(shell curl -s "http://www.rabbitmq.com/releases/rabbitmq-server/" | grep -oE '([0-9\.]{5,})' | tail -n 1) -R=http://www.rabbitmq.com/releases +RABBITVER:=$(shell curl -s "https://www.rabbitmq.com/releases/rabbitmq-server/" | grep -oE '([0-9\.]{5,})' | tail -n 1) +R=https://www.rabbitmq.com/releases # Default value assumes CI environment RUBY?=ruby1.9.1 diff --git a/README.md b/README.md index 9dfe9bb5..f45c833b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # RabbitMQ Tutorials -This project contains code for [RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html) with +This project contains code for [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html) with their ports to various languages. -This repository only contains runnable code. Please consult [tutorials on the site](http://www.rabbitmq.com/getstarted.html) -to learn more about [the concepts](http://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. +This repository only contains runnable code. Please consult [tutorials on the site](https://www.rabbitmq.com/getstarted.html) +to learn more about [the concepts](https://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. A please check out the rest of [RabbitMQ documentation](https://www.rabbitmq.com/documentation.html)! diff --git a/clojure/README.md b/clojure/README.md index 7287a2a5..08e3341b 100644 --- a/clojure/README.md +++ b/clojure/README.md @@ -1,11 +1,11 @@ # Clojure code for RabbitMQ tutorials Here you can find Clojure code examples from -[RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +[RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements -To run this code you need [Leiningen](http://leiningen.org). +To run this code you need [Leiningen](https://leiningen.org). These tutorials will work on JDK 6 through 8 (Oracle or OpenJDK). @@ -13,32 +13,32 @@ These tutorials will work on JDK 6 through 8 (Oracle or OpenJDK). Code examples are executed via `lein run`: -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-java.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-java.html): lein run -m rabbitmq.tutorials.send lein run -m rabbitmq.tutorials.receive -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-java.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): lein run -m rabbitmq.tutorials.new-task lein run -m rabbitmq.tutorials.worker -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-java.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) lein run -m rabbitmq.tutorials.receive-logs lein run -m rabbitmq.tutorials.emit-log -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-java.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-java.html) lein run -m rabbitmq.tutorials.receive-logs-direct lein run -m rabbitmq.tutorials.emit-log-direct info -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-java.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-java.html) lein run -m rabbitmq.tutorials.receive-logs-topic lein run -m rabbitmq.tutorials.emit-log-topic info -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-java.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-java.html) lein run -m rabbitmq.tutorials.rpc-server lein run -m rabbitmq.tutorials.rpc-client diff --git a/clojure/project.clj b/clojure/project.clj index 46eb44e7..f93131d0 100644 --- a/clojure/project.clj +++ b/clojure/project.clj @@ -1,7 +1,7 @@ (defproject com.rabbitmq/tutorials "1.0.0-SNAPSHOT" :description "RabbitMQ tutorials using Langohr" - :url "http://github.com/rabbitmq/rabbitmq-tutorials" + :url "https://github.com/rabbitmq/rabbitmq-tutorials" :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} + :url "https://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.6.0"] [com.novemberain/langohr "3.3.0"]]) diff --git a/common-lisp/README.md b/common-lisp/README.md index 8ed6dac3..bd057e90 100644 --- a/common-lisp/README.md +++ b/common-lisp/README.md @@ -1,11 +1,11 @@ # Common Lisp code for RabbitMQ tutorials Here you can find Common Lisp code examples from -[RabbitMQ tutorials](http://cl-rabbit.io/cl-bunny/tutorials/). +[RabbitMQ tutorials](https://cl-rabbit.io/cl-bunny/tutorials/). ## Requirements -To run this code you need [Cl-Bunny](http://cl-rabbit.io/cl-bunny). +To run this code you need [Cl-Bunny](https://cl-rabbit.io/cl-bunny). You can install it via Quicklisp: @@ -17,34 +17,34 @@ All our examples are in fact executable sbcl scripts. You can run them from comm ## Code -[Tutorial one: "Hello World!"](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html): +[Tutorial one: "Hello World!"](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html): ./send.lisp ./receive.lisp -[Tutorial two: Work Queues](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html): +[Tutorial two: Work Queues](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html): ./new-task.lisp ./worker.lisp -[Tutorial three: Publish/Subscribe](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html) +[Tutorial three: Publish/Subscribe](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html) ./receive-logs.lisp ./emit-log.lisp -[Tutorial four: Routing](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html) +[Tutorial four: Routing](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html) ./receive-logs-direct.lisp ./emit-log-direct.lisp -[Tutorial five: Topics](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html) +[Tutorial five: Topics](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html) ./receive-logs-topic.lisp ./emit-log-topic.lisp -[Tutorial six: RPC](http://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html) +[Tutorial six: RPC](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html) ./rpc-server.lisp ./rpc-client.lisp -To learn more, visit [Cl-Bunny documentation](http://cl-rabbit.io/cl-bunny) site. +To learn more, visit [Cl-Bunny documentation](https://cl-rabbit.io/cl-bunny) site. diff --git a/common-lisp/rpc-server.lisp b/common-lisp/rpc-server.lisp index 15a19b94..73111a8f 100755 --- a/common-lisp/rpc-server.lisp +++ b/common-lisp/rpc-server.lisp @@ -12,7 +12,7 @@ sbcl --noinform --noprint < - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index 5afb784d..0a80e87b 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index 1d292fd7..5e6573d6 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index 6cab67db..e462be9f 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 4c51e6be..49da4458 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index 1c04746d..eab2b508 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index 4aa32e33..4ae6cf7f 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index fccca452..408f4ae8 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index 308527da..de41f89f 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index 25a9820c..7b33d08f 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index edb26969..839a5236 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -62,7 +62,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index 545f1816..b866f687 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -61,7 +61,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. diff --git a/dotnet-visual-studio/README.md b/dotnet-visual-studio/README.md index 4eca3dcd..c11b0398 100644 --- a/dotnet-visual-studio/README.md +++ b/dotnet-visual-studio/README.md @@ -1,7 +1,7 @@ # .NET C# Visual Studio Solution for RabbitMQ tutorials Here you can find the C# code examples for [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html) compiled +tutorials](https://www.rabbitmq.com/getstarted.html) compiled into a Visual Studio solution. To successfully use the examples you will need a running RabbitMQ server. @@ -13,32 +13,32 @@ time opening it in order to get the .NET RabbitMQ dependency from NuGet. ## Code -#### [Tutorial 1: "Hello World!"](http://www.rabbitmq.com/tutorial-one-dotnet.html) +#### [Tutorial 1: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) - 1_Receive - 1_Send -#### [Tutorial 2: Work Queues](http://www.rabbitmq.com/tutorial-two-dotnet.html) +#### [Tutorial 2: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) - 2_Worker - 2_NewTask -#### [Tutorial 3: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-dotnet.html) +#### [Tutorial 3: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) - 3_ReceiveLogs - 3_EmitLog -#### [Tutorial 4: Routing](http://www.rabbitmq.com/tutorial-four-dotnet.html) +#### [Tutorial 4: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) - 4_ReceiveLogsDirect - 4_EmitLogDirect -#### [Tutorial 5: Topics](http://www.rabbitmq.com/tutorial-five-dotnet.html) +#### [Tutorial 5: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) - 5_ReceiveLogsTopic - 5_EmitLogTopic -#### [Tutorial 6: RPC](http://www.rabbitmq.com/tutorial-six-dotnet.html) +#### [Tutorial 6: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) - 6_RPCServer - 6_RPCClient diff --git a/dotnet/README.md b/dotnet/README.md index 848f3df3..a8b30f3a 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -1,7 +1,7 @@ # Dotnet C# code for RabbitMQ tutorials Here you can find the C# code examples for [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -28,32 +28,32 @@ First run the `recompile.sh` script. This will run `dotnet restore` and build each project which is required before they can be run. Alternatively or if you are on windows cd into each project and run `dotnet restore` manually. -#### [Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-dotnet.html) +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) dotnet run -p Receive/Receive.csproj dotnet run -p Send/Send.csproj -#### [Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-dotnet.html) +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) dotnet run -p Worker/Worker.csproj dotnet run -p NewTask/NewTask.csproj -#### [Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-dotnet.html) +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) dotnet run -p ReceiveLogs/ReceiveLogs.csproj dotnet run -p EmitLog/EmitLog.csproj -#### [Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-dotnet.html) +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info dotnet run -p EmitLogDirect/EmitLogDirect.csproj -#### [Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-dotnet.html) +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info dotnet run -p EmitLogTopic/EmitLogTopic.csproj -#### [Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-dotnet.html) +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) dotnet run -p RPCServer/RPCServer.csproj dotnet run -p RPCClient/RPCClient.csproj diff --git a/elixir/README.md b/elixir/README.md index 5ed63119..e7a4350f 100644 --- a/elixir/README.md +++ b/elixir/README.md @@ -1,12 +1,12 @@ # Elixir code for RabbitMQ tutorials -Here you can find an [Elixir](http://elixir-lang.org) port of -[RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +Here you can find an [Elixir](https://elixir-lang.org) port of +[RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements -To run this code you need a [recent Elixir version installed](http://elixir-lang.org/install.html), -which should include [Mix, the Elixir build tool](http://elixir-lang.org/docs/stable/mix/Mix.html). +To run this code you need a [recent Elixir version installed](https://elixir-lang.org/install.html), +which should include [Mix, the Elixir build tool](https://elixir-lang.org/docs/stable/mix/Mix.html). These tutorials use [Elixir AMQP 0-9-1 client](https://github.com/pma/amqp) built on top of the official [RabbitMQ Erlang client](https://www.rabbitmq.com/erlang-client-user-guide.html). diff --git a/erlang/README.md b/erlang/README.md index da5bf681..a97f685b 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -1,16 +1,16 @@ # Erlang code for RabbitMQ tutorials # Here you can find a Erlang code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). This code is using [RabbitMQ Erlang -Client](http://hg.rabbitmq.com/rabbitmq-erlang-client/) ([User -Guide](http://www.rabbitmq.com/erlang-client-user-guide.html)). +Client](https://hg.rabbitmq.com/rabbitmq-erlang-client/) ([User +Guide](https://www.rabbitmq.com/erlang-client-user-guide.html)). ## Requirements To run this code you need at least [Erlang -R13B03](http://erlang.org/download.html), on Ubuntu you can get it +R13B03](https://www.erlang.org/download.html), on Ubuntu you can get it using apt: sudo apt-get install erlang @@ -21,27 +21,27 @@ You need Erlang Client binaries: ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): ./send.erl ./receive.erl -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): ./new_task.erl "A very hard task which takes two seconds.." ./worker.erl -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-python.html): +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): ./receive_logs.erl ./emit_log.erl "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-python.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): ./receive_logs_direct.erl info ./emit_log_direct.erl info Hello -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-python.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): ./receive_logs_topic.erl "*.rabbit" ./emit_log_topic.erl red.rabbit Hello diff --git a/erlang/erlang.mk b/erlang/erlang.mk index 227477b1..09506d22 100644 --- a/erlang/erlang.mk +++ b/erlang/erlang.mk @@ -330,7 +330,7 @@ pkg_active_commit = master PACKAGES += actordb_core pkg_actordb_core_name = actordb_core pkg_actordb_core_description = ActorDB main source -pkg_actordb_core_homepage = http://www.actordb.com/ +pkg_actordb_core_homepage = https://www.actordb.com/ pkg_actordb_core_fetch = git pkg_actordb_core_repo = https://github.com/biokoda/actordb_core pkg_actordb_core_commit = master @@ -338,7 +338,7 @@ pkg_actordb_core_commit = master PACKAGES += actordb_thrift pkg_actordb_thrift_name = actordb_thrift pkg_actordb_thrift_description = Thrift API for ActorDB -pkg_actordb_thrift_homepage = http://www.actordb.com/ +pkg_actordb_thrift_homepage = https://www.actordb.com/ pkg_actordb_thrift_fetch = git pkg_actordb_thrift_repo = https://github.com/biokoda/actordb_thrift pkg_actordb_thrift_commit = master @@ -386,7 +386,7 @@ pkg_antidote_commit = master PACKAGES += apns pkg_apns_name = apns pkg_apns_description = Apple Push Notification Server for Erlang -pkg_apns_homepage = http://inaka.github.com/apns4erl +pkg_apns_homepage = https://inaka.github.com/apns4erl pkg_apns_fetch = git pkg_apns_repo = https://github.com/inaka/apns4erl pkg_apns_commit = master @@ -554,7 +554,7 @@ pkg_bson_commit = master PACKAGES += bullet pkg_bullet_name = bullet pkg_bullet_description = Simple, reliable, efficient streaming for Cowboy. -pkg_bullet_homepage = http://ninenines.eu +pkg_bullet_homepage = https://ninenines.eu pkg_bullet_fetch = git pkg_bullet_repo = https://github.com/ninenines/bullet pkg_bullet_commit = master @@ -658,7 +658,7 @@ pkg_clique_commit = develop PACKAGES += cloudi_core pkg_cloudi_core_name = cloudi_core pkg_cloudi_core_description = CloudI internal service runtime -pkg_cloudi_core_homepage = http://cloudi.org/ +pkg_cloudi_core_homepage = https://cloudi.org/ pkg_cloudi_core_fetch = git pkg_cloudi_core_repo = https://github.com/CloudI/cloudi_core pkg_cloudi_core_commit = master @@ -666,7 +666,7 @@ pkg_cloudi_core_commit = master PACKAGES += cloudi_service_api_requests pkg_cloudi_service_api_requests_name = cloudi_service_api_requests pkg_cloudi_service_api_requests_description = CloudI Service API requests (JSON-RPC/Erlang-term support) -pkg_cloudi_service_api_requests_homepage = http://cloudi.org/ +pkg_cloudi_service_api_requests_homepage = https://cloudi.org/ pkg_cloudi_service_api_requests_fetch = git pkg_cloudi_service_api_requests_repo = https://github.com/CloudI/cloudi_service_api_requests pkg_cloudi_service_api_requests_commit = master @@ -674,7 +674,7 @@ pkg_cloudi_service_api_requests_commit = master PACKAGES += cloudi_service_db pkg_cloudi_service_db_name = cloudi_service_db pkg_cloudi_service_db_description = CloudI Database (in-memory/testing/generic) -pkg_cloudi_service_db_homepage = http://cloudi.org/ +pkg_cloudi_service_db_homepage = https://cloudi.org/ pkg_cloudi_service_db_fetch = git pkg_cloudi_service_db_repo = https://github.com/CloudI/cloudi_service_db pkg_cloudi_service_db_commit = master @@ -682,7 +682,7 @@ pkg_cloudi_service_db_commit = master PACKAGES += cloudi_service_db_cassandra pkg_cloudi_service_db_cassandra_name = cloudi_service_db_cassandra pkg_cloudi_service_db_cassandra_description = Cassandra CloudI Service -pkg_cloudi_service_db_cassandra_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_homepage = https://cloudi.org/ pkg_cloudi_service_db_cassandra_fetch = git pkg_cloudi_service_db_cassandra_repo = https://github.com/CloudI/cloudi_service_db_cassandra pkg_cloudi_service_db_cassandra_commit = master @@ -690,7 +690,7 @@ pkg_cloudi_service_db_cassandra_commit = master PACKAGES += cloudi_service_db_cassandra_cql pkg_cloudi_service_db_cassandra_cql_name = cloudi_service_db_cassandra_cql pkg_cloudi_service_db_cassandra_cql_description = Cassandra CQL CloudI Service -pkg_cloudi_service_db_cassandra_cql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_cql_homepage = https://cloudi.org/ pkg_cloudi_service_db_cassandra_cql_fetch = git pkg_cloudi_service_db_cassandra_cql_repo = https://github.com/CloudI/cloudi_service_db_cassandra_cql pkg_cloudi_service_db_cassandra_cql_commit = master @@ -698,7 +698,7 @@ pkg_cloudi_service_db_cassandra_cql_commit = master PACKAGES += cloudi_service_db_couchdb pkg_cloudi_service_db_couchdb_name = cloudi_service_db_couchdb pkg_cloudi_service_db_couchdb_description = CouchDB CloudI Service -pkg_cloudi_service_db_couchdb_homepage = http://cloudi.org/ +pkg_cloudi_service_db_couchdb_homepage = https://cloudi.org/ pkg_cloudi_service_db_couchdb_fetch = git pkg_cloudi_service_db_couchdb_repo = https://github.com/CloudI/cloudi_service_db_couchdb pkg_cloudi_service_db_couchdb_commit = master @@ -706,7 +706,7 @@ pkg_cloudi_service_db_couchdb_commit = master PACKAGES += cloudi_service_db_elasticsearch pkg_cloudi_service_db_elasticsearch_name = cloudi_service_db_elasticsearch pkg_cloudi_service_db_elasticsearch_description = elasticsearch CloudI Service -pkg_cloudi_service_db_elasticsearch_homepage = http://cloudi.org/ +pkg_cloudi_service_db_elasticsearch_homepage = https://cloudi.org/ pkg_cloudi_service_db_elasticsearch_fetch = git pkg_cloudi_service_db_elasticsearch_repo = https://github.com/CloudI/cloudi_service_db_elasticsearch pkg_cloudi_service_db_elasticsearch_commit = master @@ -714,7 +714,7 @@ pkg_cloudi_service_db_elasticsearch_commit = master PACKAGES += cloudi_service_db_memcached pkg_cloudi_service_db_memcached_name = cloudi_service_db_memcached pkg_cloudi_service_db_memcached_description = memcached CloudI Service -pkg_cloudi_service_db_memcached_homepage = http://cloudi.org/ +pkg_cloudi_service_db_memcached_homepage = https://cloudi.org/ pkg_cloudi_service_db_memcached_fetch = git pkg_cloudi_service_db_memcached_repo = https://github.com/CloudI/cloudi_service_db_memcached pkg_cloudi_service_db_memcached_commit = master @@ -722,7 +722,7 @@ pkg_cloudi_service_db_memcached_commit = master PACKAGES += cloudi_service_db_mysql pkg_cloudi_service_db_mysql_name = cloudi_service_db_mysql pkg_cloudi_service_db_mysql_description = MySQL CloudI Service -pkg_cloudi_service_db_mysql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_mysql_homepage = https://cloudi.org/ pkg_cloudi_service_db_mysql_fetch = git pkg_cloudi_service_db_mysql_repo = https://github.com/CloudI/cloudi_service_db_mysql pkg_cloudi_service_db_mysql_commit = master @@ -730,7 +730,7 @@ pkg_cloudi_service_db_mysql_commit = master PACKAGES += cloudi_service_db_pgsql pkg_cloudi_service_db_pgsql_name = cloudi_service_db_pgsql pkg_cloudi_service_db_pgsql_description = PostgreSQL CloudI Service -pkg_cloudi_service_db_pgsql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_pgsql_homepage = https://cloudi.org/ pkg_cloudi_service_db_pgsql_fetch = git pkg_cloudi_service_db_pgsql_repo = https://github.com/CloudI/cloudi_service_db_pgsql pkg_cloudi_service_db_pgsql_commit = master @@ -738,7 +738,7 @@ pkg_cloudi_service_db_pgsql_commit = master PACKAGES += cloudi_service_db_riak pkg_cloudi_service_db_riak_name = cloudi_service_db_riak pkg_cloudi_service_db_riak_description = Riak CloudI Service -pkg_cloudi_service_db_riak_homepage = http://cloudi.org/ +pkg_cloudi_service_db_riak_homepage = https://cloudi.org/ pkg_cloudi_service_db_riak_fetch = git pkg_cloudi_service_db_riak_repo = https://github.com/CloudI/cloudi_service_db_riak pkg_cloudi_service_db_riak_commit = master @@ -746,7 +746,7 @@ pkg_cloudi_service_db_riak_commit = master PACKAGES += cloudi_service_db_tokyotyrant pkg_cloudi_service_db_tokyotyrant_name = cloudi_service_db_tokyotyrant pkg_cloudi_service_db_tokyotyrant_description = Tokyo Tyrant CloudI Service -pkg_cloudi_service_db_tokyotyrant_homepage = http://cloudi.org/ +pkg_cloudi_service_db_tokyotyrant_homepage = https://cloudi.org/ pkg_cloudi_service_db_tokyotyrant_fetch = git pkg_cloudi_service_db_tokyotyrant_repo = https://github.com/CloudI/cloudi_service_db_tokyotyrant pkg_cloudi_service_db_tokyotyrant_commit = master @@ -754,7 +754,7 @@ pkg_cloudi_service_db_tokyotyrant_commit = master PACKAGES += cloudi_service_filesystem pkg_cloudi_service_filesystem_name = cloudi_service_filesystem pkg_cloudi_service_filesystem_description = Filesystem CloudI Service -pkg_cloudi_service_filesystem_homepage = http://cloudi.org/ +pkg_cloudi_service_filesystem_homepage = https://cloudi.org/ pkg_cloudi_service_filesystem_fetch = git pkg_cloudi_service_filesystem_repo = https://github.com/CloudI/cloudi_service_filesystem pkg_cloudi_service_filesystem_commit = master @@ -762,7 +762,7 @@ pkg_cloudi_service_filesystem_commit = master PACKAGES += cloudi_service_http_client pkg_cloudi_service_http_client_name = cloudi_service_http_client pkg_cloudi_service_http_client_description = HTTP client CloudI Service -pkg_cloudi_service_http_client_homepage = http://cloudi.org/ +pkg_cloudi_service_http_client_homepage = https://cloudi.org/ pkg_cloudi_service_http_client_fetch = git pkg_cloudi_service_http_client_repo = https://github.com/CloudI/cloudi_service_http_client pkg_cloudi_service_http_client_commit = master @@ -770,7 +770,7 @@ pkg_cloudi_service_http_client_commit = master PACKAGES += cloudi_service_http_cowboy pkg_cloudi_service_http_cowboy_name = cloudi_service_http_cowboy pkg_cloudi_service_http_cowboy_description = cowboy HTTP/HTTPS CloudI Service -pkg_cloudi_service_http_cowboy_homepage = http://cloudi.org/ +pkg_cloudi_service_http_cowboy_homepage = https://cloudi.org/ pkg_cloudi_service_http_cowboy_fetch = git pkg_cloudi_service_http_cowboy_repo = https://github.com/CloudI/cloudi_service_http_cowboy pkg_cloudi_service_http_cowboy_commit = master @@ -778,7 +778,7 @@ pkg_cloudi_service_http_cowboy_commit = master PACKAGES += cloudi_service_http_elli pkg_cloudi_service_http_elli_name = cloudi_service_http_elli pkg_cloudi_service_http_elli_description = elli HTTP CloudI Service -pkg_cloudi_service_http_elli_homepage = http://cloudi.org/ +pkg_cloudi_service_http_elli_homepage = https://cloudi.org/ pkg_cloudi_service_http_elli_fetch = git pkg_cloudi_service_http_elli_repo = https://github.com/CloudI/cloudi_service_http_elli pkg_cloudi_service_http_elli_commit = master @@ -786,7 +786,7 @@ pkg_cloudi_service_http_elli_commit = master PACKAGES += cloudi_service_map_reduce pkg_cloudi_service_map_reduce_name = cloudi_service_map_reduce pkg_cloudi_service_map_reduce_description = Map/Reduce CloudI Service -pkg_cloudi_service_map_reduce_homepage = http://cloudi.org/ +pkg_cloudi_service_map_reduce_homepage = https://cloudi.org/ pkg_cloudi_service_map_reduce_fetch = git pkg_cloudi_service_map_reduce_repo = https://github.com/CloudI/cloudi_service_map_reduce pkg_cloudi_service_map_reduce_commit = master @@ -794,7 +794,7 @@ pkg_cloudi_service_map_reduce_commit = master PACKAGES += cloudi_service_oauth1 pkg_cloudi_service_oauth1_name = cloudi_service_oauth1 pkg_cloudi_service_oauth1_description = OAuth v1.0 CloudI Service -pkg_cloudi_service_oauth1_homepage = http://cloudi.org/ +pkg_cloudi_service_oauth1_homepage = https://cloudi.org/ pkg_cloudi_service_oauth1_fetch = git pkg_cloudi_service_oauth1_repo = https://github.com/CloudI/cloudi_service_oauth1 pkg_cloudi_service_oauth1_commit = master @@ -802,7 +802,7 @@ pkg_cloudi_service_oauth1_commit = master PACKAGES += cloudi_service_queue pkg_cloudi_service_queue_name = cloudi_service_queue pkg_cloudi_service_queue_description = Persistent Queue Service -pkg_cloudi_service_queue_homepage = http://cloudi.org/ +pkg_cloudi_service_queue_homepage = https://cloudi.org/ pkg_cloudi_service_queue_fetch = git pkg_cloudi_service_queue_repo = https://github.com/CloudI/cloudi_service_queue pkg_cloudi_service_queue_commit = master @@ -810,7 +810,7 @@ pkg_cloudi_service_queue_commit = master PACKAGES += cloudi_service_quorum pkg_cloudi_service_quorum_name = cloudi_service_quorum pkg_cloudi_service_quorum_description = CloudI Quorum Service -pkg_cloudi_service_quorum_homepage = http://cloudi.org/ +pkg_cloudi_service_quorum_homepage = https://cloudi.org/ pkg_cloudi_service_quorum_fetch = git pkg_cloudi_service_quorum_repo = https://github.com/CloudI/cloudi_service_quorum pkg_cloudi_service_quorum_commit = master @@ -818,7 +818,7 @@ pkg_cloudi_service_quorum_commit = master PACKAGES += cloudi_service_router pkg_cloudi_service_router_name = cloudi_service_router pkg_cloudi_service_router_description = CloudI Router Service -pkg_cloudi_service_router_homepage = http://cloudi.org/ +pkg_cloudi_service_router_homepage = https://cloudi.org/ pkg_cloudi_service_router_fetch = git pkg_cloudi_service_router_repo = https://github.com/CloudI/cloudi_service_router pkg_cloudi_service_router_commit = master @@ -826,7 +826,7 @@ pkg_cloudi_service_router_commit = master PACKAGES += cloudi_service_tcp pkg_cloudi_service_tcp_name = cloudi_service_tcp pkg_cloudi_service_tcp_description = TCP CloudI Service -pkg_cloudi_service_tcp_homepage = http://cloudi.org/ +pkg_cloudi_service_tcp_homepage = https://cloudi.org/ pkg_cloudi_service_tcp_fetch = git pkg_cloudi_service_tcp_repo = https://github.com/CloudI/cloudi_service_tcp pkg_cloudi_service_tcp_commit = master @@ -834,7 +834,7 @@ pkg_cloudi_service_tcp_commit = master PACKAGES += cloudi_service_timers pkg_cloudi_service_timers_name = cloudi_service_timers pkg_cloudi_service_timers_description = Timers CloudI Service -pkg_cloudi_service_timers_homepage = http://cloudi.org/ +pkg_cloudi_service_timers_homepage = https://cloudi.org/ pkg_cloudi_service_timers_fetch = git pkg_cloudi_service_timers_repo = https://github.com/CloudI/cloudi_service_timers pkg_cloudi_service_timers_commit = master @@ -842,7 +842,7 @@ pkg_cloudi_service_timers_commit = master PACKAGES += cloudi_service_udp pkg_cloudi_service_udp_name = cloudi_service_udp pkg_cloudi_service_udp_description = UDP CloudI Service -pkg_cloudi_service_udp_homepage = http://cloudi.org/ +pkg_cloudi_service_udp_homepage = https://cloudi.org/ pkg_cloudi_service_udp_fetch = git pkg_cloudi_service_udp_repo = https://github.com/CloudI/cloudi_service_udp pkg_cloudi_service_udp_commit = master @@ -850,7 +850,7 @@ pkg_cloudi_service_udp_commit = master PACKAGES += cloudi_service_validate pkg_cloudi_service_validate_name = cloudi_service_validate pkg_cloudi_service_validate_description = CloudI Validate Service -pkg_cloudi_service_validate_homepage = http://cloudi.org/ +pkg_cloudi_service_validate_homepage = https://cloudi.org/ pkg_cloudi_service_validate_fetch = git pkg_cloudi_service_validate_repo = https://github.com/CloudI/cloudi_service_validate pkg_cloudi_service_validate_commit = master @@ -858,7 +858,7 @@ pkg_cloudi_service_validate_commit = master PACKAGES += cloudi_service_zeromq pkg_cloudi_service_zeromq_name = cloudi_service_zeromq pkg_cloudi_service_zeromq_description = ZeroMQ CloudI Service -pkg_cloudi_service_zeromq_homepage = http://cloudi.org/ +pkg_cloudi_service_zeromq_homepage = https://cloudi.org/ pkg_cloudi_service_zeromq_fetch = git pkg_cloudi_service_zeromq_repo = https://github.com/CloudI/cloudi_service_zeromq pkg_cloudi_service_zeromq_commit = master @@ -906,7 +906,7 @@ pkg_covertool_commit = master PACKAGES += cowboy pkg_cowboy_name = cowboy pkg_cowboy_description = Small, fast and modular HTTP server. -pkg_cowboy_homepage = http://ninenines.eu +pkg_cowboy_homepage = https://ninenines.eu pkg_cowboy_fetch = git pkg_cowboy_repo = https://github.com/ninenines/cowboy pkg_cowboy_commit = 1.0.4 @@ -922,7 +922,7 @@ pkg_cowdb_commit = master PACKAGES += cowlib pkg_cowlib_name = cowlib pkg_cowlib_description = Support library for manipulating Web protocols. -pkg_cowlib_homepage = http://ninenines.eu +pkg_cowlib_homepage = https://ninenines.eu pkg_cowlib_fetch = git pkg_cowlib_repo = https://github.com/ninenines/cowlib pkg_cowlib_commit = 1.0.2 @@ -1114,7 +1114,7 @@ pkg_edgar_commit = master PACKAGES += edis pkg_edis_name = edis pkg_edis_description = An Erlang implementation of Redis KV Store -pkg_edis_homepage = http://inaka.github.com/edis/ +pkg_edis_homepage = https://inaka.github.com/edis/ pkg_edis_fetch = git pkg_edis_repo = https://github.com/inaka/edis pkg_edis_commit = master @@ -1450,7 +1450,7 @@ pkg_erlcron_commit = master PACKAGES += erldb pkg_erldb_name = erldb pkg_erldb_description = ORM (Object-relational mapping) application implemented in Erlang -pkg_erldb_homepage = http://erldb.org +pkg_erldb_homepage = https://erldb.org pkg_erldb_fetch = git pkg_erldb_repo = https://github.com/erldb/erldb pkg_erldb_commit = master @@ -1714,7 +1714,7 @@ pkg_evum_commit = master PACKAGES += exec pkg_exec_name = erlexec pkg_exec_description = Execute and control OS processes from Erlang/OTP. -pkg_exec_homepage = http://saleyn.github.com/erlexec +pkg_exec_homepage = https://saleyn.github.com/erlexec pkg_exec_fetch = git pkg_exec_repo = https://github.com/saleyn/erlexec pkg_exec_commit = master @@ -1809,7 +1809,7 @@ pkg_find_crate_commit = master PACKAGES += fix pkg_fix_name = fix -pkg_fix_description = http://fixprotocol.org/ implementation. +pkg_fix_description = https://fixtrading.org implementation. pkg_fix_homepage = https://github.com/maxlapshin/fix pkg_fix_fetch = git pkg_fix_repo = https://github.com/maxlapshin/fix @@ -2474,7 +2474,7 @@ pkg_lambdapad_commit = master PACKAGES += lasp pkg_lasp_name = lasp pkg_lasp_description = A Language for Distributed, Eventually Consistent Computations -pkg_lasp_homepage = http://lasp-lang.org/ +pkg_lasp_homepage = https://lasp-lang.org/ pkg_lasp_fetch = git pkg_lasp_repo = https://github.com/lasp-lang/lasp pkg_lasp_commit = master @@ -2522,7 +2522,7 @@ pkg_ling_commit = master PACKAGES += live pkg_live_name = live pkg_live_description = Automated module and configuration reloader. -pkg_live_homepage = http://ninenines.eu +pkg_live_homepage = https://ninenines.eu pkg_live_fetch = git pkg_live_repo = https://github.com/ninenines/live pkg_live_commit = master @@ -2938,7 +2938,7 @@ pkg_oauth2_commit = master PACKAGES += observer_cli pkg_observer_cli_name = observer_cli pkg_observer_cli_description = Visualize Erlang/Elixir Nodes On The Command Line -pkg_observer_cli_homepage = http://zhongwencool.github.io/observer_cli +pkg_observer_cli_homepage = https://zhongwencool.github.io/observer_cli pkg_observer_cli_fetch = git pkg_observer_cli_repo = https://github.com/zhongwencool/observer_cli pkg_observer_cli_commit = master @@ -3274,7 +3274,7 @@ pkg_rafter_commit = master PACKAGES += ranch pkg_ranch_name = ranch pkg_ranch_description = Socket acceptor pool for TCP protocols. -pkg_ranch_homepage = http://ninenines.eu +pkg_ranch_homepage = https://ninenines.eu pkg_ranch_fetch = git pkg_ranch_repo = https://github.com/ninenines/ranch pkg_ranch_commit = 1.2.1 @@ -3290,7 +3290,7 @@ pkg_rbeacon_commit = master PACKAGES += rebar pkg_rebar_name = rebar pkg_rebar_description = Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. -pkg_rebar_homepage = http://www.rebar3.org +pkg_rebar_homepage = https://www.rebar3.org pkg_rebar_fetch = git pkg_rebar_repo = https://github.com/rebar/rebar3 pkg_rebar_commit = master @@ -3370,7 +3370,7 @@ pkg_relx_commit = master PACKAGES += resource_discovery pkg_resource_discovery_name = resource_discovery pkg_resource_discovery_description = An application used to dynamically discover resources present in an Erlang node cluster. -pkg_resource_discovery_homepage = http://erlware.org/ +pkg_resource_discovery_homepage = https://erlware.org/ pkg_resource_discovery_fetch = git pkg_resource_discovery_repo = https://github.com/erlware/resource_discovery pkg_resource_discovery_commit = master @@ -3538,7 +3538,7 @@ pkg_seestar_commit = master PACKAGES += service pkg_service_name = service pkg_service_description = A minimal Erlang behavior for creating CloudI internal services -pkg_service_homepage = http://cloudi.org/ +pkg_service_homepage = https://cloudi.org/ pkg_service_fetch = git pkg_service_repo = https://github.com/CloudI/service pkg_service_commit = master @@ -3578,7 +3578,7 @@ pkg_sgte_commit = master PACKAGES += sheriff pkg_sheriff_name = sheriff pkg_sheriff_description = Parse transform for type based validation. -pkg_sheriff_homepage = http://ninenines.eu +pkg_sheriff_homepage = https://ninenines.eu pkg_sheriff_fetch = git pkg_sheriff_repo = https://github.com/extend/sheriff pkg_sheriff_commit = master @@ -3930,7 +3930,7 @@ pkg_traffic_tools_commit = master PACKAGES += trails pkg_trails_name = trails pkg_trails_description = A couple of improvements over Cowboy Routes -pkg_trails_homepage = http://inaka.github.io/cowboy-trails/ +pkg_trails_homepage = https://inaka.github.io/cowboy-trails/ pkg_trails_fetch = git pkg_trails_repo = https://github.com/inaka/cowboy-trails pkg_trails_commit = master @@ -4146,7 +4146,7 @@ pkg_worker_pool_commit = master PACKAGES += wrangler pkg_wrangler_name = wrangler pkg_wrangler_description = Import of the Wrangler svn repository. -pkg_wrangler_homepage = http://www.cs.kent.ac.uk/projects/wrangler/Home.html +pkg_wrangler_homepage = https://www.cs.kent.ac.uk/projects/wrangler/Home.html pkg_wrangler_fetch = git pkg_wrangler_repo = https://github.com/RefactoringTools/wrangler pkg_wrangler_commit = master diff --git a/go/README.md b/go/README.md index de103646..10798d42 100644 --- a/go/README.md +++ b/go/README.md @@ -1,7 +1,7 @@ # Go code for RabbitMQ tutorials -Here you can find Go code examples from [RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +Here you can find Go code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements @@ -15,32 +15,32 @@ To run this code you need [Go RabbitMQ client](https://github.com/streadway/amqp Code examples are executed via `go run`: -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-go.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-go.html): go run send.go go run receive.go -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-go.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-go.html): go run new_task.go hello world go run worker.go -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-go.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-go.html) go run receive_logs.go go run emit_log.go hello world -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-go.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-go.html) go run receive_logs_direct.go info warn go run emit_log_direct.go warn "a warning" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-go.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-go.html) go run receive_logs_topic.go "kern.*" "*.critical" go run emit_log_topic.go kern.critical "A critical kernel error" -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-go.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-go.html) go run rpc_server.go go run rpc_client.go 10 diff --git a/haskell/README.md b/haskell/README.md index ae2a0feb..c0a4a4b2 100644 --- a/haskell/README.md +++ b/haskell/README.md @@ -1,11 +1,11 @@ # Haskell code for RabbitMQ tutorials Here you can find Haskell code examples from -[RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +[RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements -To run this code you need [Network.AMQP](http://hackage.haskell.org/package/amqp). +To run this code you need [Network.AMQP](https://hackage.haskell.org/package/amqp). ### Running the examples with `stack` @@ -16,32 +16,32 @@ To run this code you need [Network.AMQP](http://hackage.haskell.org/package/amqp Code examples are executed via `runhaskell`: -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): runhaskell send.hs runhaskell receive.hs -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): runhaskell newTask.hs hello world runhaskell worker.hs -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-python.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html) runhaskell receiveLogs.hs runhaskell emitLog.hs hello world -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-python.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html) runhaskell receiveLogsDirect.hs info warn runhaskell emitLogDirect.hs warn "a warning" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-python.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html) runhaskell receiveLogsTopic.hs info warn runhaskell emitLogTopic.hs warn "a warning" -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-python.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html) runhaskell rpcServer.hs runhaskell rpcClient.hs diff --git a/java/README.md b/java/README.md index bcdbc3f6..6259fb04 100644 --- a/java/README.md +++ b/java/README.md @@ -1,7 +1,7 @@ # Java code for RabbitMQ tutorials Here you can find the Java code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -35,21 +35,21 @@ use a semicolon instead of a colon to separate items in the classpath. ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-java.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-java.html): $ javac -cp amqp-client-4.0.2.jar Send.java Recv.java $ java -cp .:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar Send $ java -cp .:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar Recv -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-java.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): $ javac -cp amqp-client-4.0.2.jar NewTask.java Worker.java $ java -cp $CP NewTask $ java -cp $CP Worker -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-java.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) $ javac -cp amqp-client-4.0.2.jar EmitLog.java ReceiveLogs.java diff --git a/javascript-nodejs/README.md b/javascript-nodejs/README.md index d1e76043..ad08cb84 100644 --- a/javascript-nodejs/README.md +++ b/javascript-nodejs/README.md @@ -1,7 +1,7 @@ # Node.js code for RabbitMQ tutorials Here you can find JavaScript (Node) code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -21,35 +21,35 @@ To install `amqp.node` using npm: ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorials/tutorial-one-javascript.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html): node src/send.js node src/receive.js -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorials/tutorial-two-javascript.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html): node src/new_task.js "A very hard task which takes two seconds.." node src/worker.js -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorials/tutorial-three-javascript.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-javascript.html) node src/receive_logs.js node src/emit_log.js "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorials/tutorial-four-javascript.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-javascript.html): node src/receive_logs_direct.js info node src/emit_log_direct.js info "The message" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorials/tutorial-five-javascript.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-javascript.html): node src/receive_logs_topic.js "*.rabbit" node src/emit_log_topic.js red.rabbit Hello -[Tutorial six: RPC](http://www.rabbitmq.com/tutorials/tutorial-six-javascript.html): +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html): node src/rpc_server.js node src/rpc_client.js diff --git a/kotlin/README.md b/kotlin/README.md index aa52deb3..91b51dec 100644 --- a/kotlin/README.md +++ b/kotlin/README.md @@ -1,6 +1,6 @@ # RabbitMQ Tutorials in Kotlin -This is a minimalistic Kotlin port of the [RabbitMQ tutorials in Java](http://www.rabbitmq.com/getstarted.html). +This is a minimalistic Kotlin port of the [RabbitMQ tutorials in Java](https://www.rabbitmq.com/getstarted.html). The port is admittedly quite close to Java in terms of code style. diff --git a/objective-c/README.md b/objective-c/README.md index 4914383e..46e92572 100644 --- a/objective-c/README.md +++ b/objective-c/README.md @@ -1,6 +1,6 @@ # Objective-C code for RabbitMQ tutorials -Objective-C code examples for the [RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +Objective-C code examples for the [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements diff --git a/objective-c/tutorial1/tutorial1/Info.plist b/objective-c/tutorial1/tutorial1/Info.plist index fd284d97..1dd422df 100644 --- a/objective-c/tutorial1/tutorial1/Info.plist +++ b/objective-c/tutorial1/tutorial1/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/objective-c/tutorial2/tutorial2/Info.plist b/objective-c/tutorial2/tutorial2/Info.plist index 40c6215d..27322bf3 100644 --- a/objective-c/tutorial2/tutorial2/Info.plist +++ b/objective-c/tutorial2/tutorial2/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/objective-c/tutorial3/tutorial3/Info.plist b/objective-c/tutorial3/tutorial3/Info.plist index 40c6215d..27322bf3 100644 --- a/objective-c/tutorial3/tutorial3/Info.plist +++ b/objective-c/tutorial3/tutorial3/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/objective-c/tutorial4/tutorial4/Info.plist b/objective-c/tutorial4/tutorial4/Info.plist index 40c6215d..27322bf3 100644 --- a/objective-c/tutorial4/tutorial4/Info.plist +++ b/objective-c/tutorial4/tutorial4/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/objective-c/tutorial5/tutorial5/Info.plist b/objective-c/tutorial5/tutorial5/Info.plist index 40c6215d..27322bf3 100644 --- a/objective-c/tutorial5/tutorial5/Info.plist +++ b/objective-c/tutorial5/tutorial5/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/perl/README.md b/perl/README.md index 7f124199..6e99ca06 100644 --- a/perl/README.md +++ b/perl/README.md @@ -1,7 +1,7 @@ # Perl code for RabbitMQ tutorials Here you can find Perl code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -27,37 +27,37 @@ On Ubuntu: ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): perl send.pl perl receive.pl -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): perl new_task.pl "A very hard task which takes two seconds.." perl worker.pl -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-python.html): +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): perl receive_logs.pl perl emit_log.pl "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-python.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): perl receive_logs_direct.pl info perl emit_log_direct.pl info "The message" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-python.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): perl receive_logs_topic.pl "*.rabbit" perl emit_log_topic.pl red.rabbit Hello -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-python.html): +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html): perl rpc_server.pl perl rpc_client.pl diff --git a/php-interop/README.md b/php-interop/README.md index c397f765..d5c2e834 100644 --- a/php-interop/README.md +++ b/php-interop/README.md @@ -21,7 +21,7 @@ Then [install Composer](https://getcomposer.org/download/) per instructions on t ### Client Library -Then you can, for example, install `enqueue/amqp-bunny` using [Composer](http://getcomposer.org). +Then you can, for example, install `enqueue/amqp-bunny` using [Composer](https://getcomposer.org). To do that install Composer and add it to your path, then run the following command inside this project folder: diff --git a/php/README.md b/php/README.md index b66946fb..6266f521 100644 --- a/php/README.md +++ b/php/README.md @@ -1,7 +1,7 @@ # PHP code for RabbitMQ tutorials Here you can find PHP code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -22,7 +22,7 @@ Then [install Composer](https://getcomposer.org/download/) per instructions on t ### Client Library -Then you can install `php-amqplib` using [Composer](http://getcomposer.org). +Then you can install `php-amqplib` using [Composer](https://getcomposer.org). To do that install Composer and add it to your path, then run the following command inside this project folder: @@ -35,35 +35,35 @@ Or you can require it to the existing project using a command: ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorials/tutorial-one-php.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-php.html): php send.php php receive.php -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorials/tutorial-two-php.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-php.html): php new_task.php "A very hard task which takes two seconds.." php worker.php -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorials/tutorial-three-php.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-php.html) php receive_logs.php php emit_log.php "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorials/tutorial-four-php.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-php.html): php receive_logs_direct.php info php emit_log_direct.php info "The message" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorials/tutorial-five-php.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-php.html): php receive_logs_topic.php "*.rabbit" php emit_log_topic.php red.rabbit Hello -[Tutorial six: RPC](http://www.rabbitmq.com/tutorials/tutorial-six-php.html): +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-php.html): php rpc_server.php php rpc_client.php diff --git a/python/README.md b/python/README.md index a607520a..d3f2a664 100644 --- a/python/README.md +++ b/python/README.md @@ -1,7 +1,7 @@ # Python code for RabbitMQ tutorials Here you can find Python code examples from [RabbitMQ -tutorials](http://www.rabbitmq.com/getstarted.html). +tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a running RabbitMQ server. @@ -18,37 +18,37 @@ You may first need to run ## Code -[Tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): python send.py python receive.py -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): python new_task.py "A very hard task which takes two seconds.." python worker.py -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-python.html): +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): python receive_logs.py python emit_log.py "info: This is the log message" -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-python.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): python receive_logs_direct.py info python emit_log_direct.py info "The message" -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-python.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): python receive_logs_topic.py "*.rabbit" python emit_log_topic.py red.rabbit Hello -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-python.html): +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html): python rpc_server.py python rpc_client.py diff --git a/ruby/README.md b/ruby/README.md index 2b926d7e..5ae6fa29 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -1,7 +1,7 @@ # Ruby code for RabbitMQ tutorials Here you can find Ruby code examples from -[RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +[RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements @@ -16,42 +16,42 @@ bundle install ## Code -To run [tutorial one: "Hello World!"](http://www.rabbitmq.com/tutorial-one-ruby.html): +To run [tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-ruby.html): ``` sh bundle exec ruby send.rb bundle exec ruby receive.rb ``` -[Tutorial two: Work Queues](http://www.rabbitmq.com/tutorial-two-ruby.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-ruby.html): ``` sh bundle exec ruby new_task.rb bundle exec ruby worker.rb ``` -[Tutorial three: Publish/Subscribe](http://www.rabbitmq.com/tutorial-three-ruby.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-ruby.html) ``` sh bundle exec ruby receive_logs.rb bundle exec ruby emit_log.rb ``` -[Tutorial four: Routing](http://www.rabbitmq.com/tutorial-four-ruby.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-ruby.html) ``` sh bundle exec ruby receive_logs_direct.rb bundle exec ruby emit_log_direct.rb ``` -[Tutorial five: Topics](http://www.rabbitmq.com/tutorial-five-ruby.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-ruby.html) ``` sh bundle exec ruby receive_logs_topic.rb bundle exec ruby emit_log_topic.rb ``` -[Tutorial six: RPC](http://www.rabbitmq.com/tutorial-six-ruby.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-ruby.html) ``` sh bundle exec ruby rpc_server.rb diff --git a/soapui/README.md b/soapui/README.md index 99502c74..b9ca4177 100644 --- a/soapui/README.md +++ b/soapui/README.md @@ -1,12 +1,12 @@ # RabbitMQ tutorials ported to SoapUI -The code is based on the [Java tutorials](http://www.rabbitmq.com/tutorials), +The code is based on the [Java tutorials](https://www.rabbitmq.com/tutorials), with slight modifications to make it work in SoapUI. ## Prerequisites * [SoapUI](https://www.soapui.org/downloads/soapui.html) or [ReadyAPI](https://smartbear.com/product/ready-api/overview/) - with the [Java Client](http://www.rabbitmq.com/download.html#clients) JAR file in the `bin/ext` directory. + with the [Java Client](https://www.rabbitmq.com/download.html#clients) JAR file in the `bin/ext` directory. * local RabbitMQ broker instance running with all the defaults ## Running diff --git a/spring-amqp/README.md b/spring-amqp/README.md index 2a1a39df..689a9b48 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -8,7 +8,7 @@ sender, receiver, and configuration. [1]: https://www.rabbitmq.com/getstarted.html ## Prerequisites -These tutorials assume RabbitMQ is [installed](http://rabbitmq.com/download.html) and running +These tutorials assume RabbitMQ is [installed](https://rabbitmq.com/download.html) and running on `localhost` using the standard port (`5672`). In case you use a different host, port or credentials, connections settings would require adjusting. @@ -78,5 +78,5 @@ spring: To use this at runtime create a file called `application-remote.yml` (or properties) and set the properties in there. Then set the remote profile as in the example above. See the [Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) -and [Spring AMQP documentation](http://docs.spring.io/spring-amqp/reference/html/) for more information on setting application +and [Spring AMQP documentation](https://docs.spring.io/spring-amqp/reference/html/) for more information on setting application properties and AMQP properties specifically. diff --git a/swift/README.md b/swift/README.md index b33c71b3..b8eb559d 100644 --- a/swift/README.md +++ b/swift/README.md @@ -1,6 +1,6 @@ # Swift code for RabbitMQ tutorials -Swift code examples for the [RabbitMQ tutorials](http://www.rabbitmq.com/getstarted.html). +Swift code examples for the [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). ## Requirements diff --git a/swift/tutorial1/tutorial1/Info.plist b/swift/tutorial1/tutorial1/Info.plist index 40c6215d..27322bf3 100644 --- a/swift/tutorial1/tutorial1/Info.plist +++ b/swift/tutorial1/tutorial1/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/swift/tutorial2/tutorial2/Info.plist b/swift/tutorial2/tutorial2/Info.plist index 40c6215d..27322bf3 100644 --- a/swift/tutorial2/tutorial2/Info.plist +++ b/swift/tutorial2/tutorial2/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/swift/tutorial3/tutorial3/Info.plist b/swift/tutorial3/tutorial3/Info.plist index 40c6215d..27322bf3 100644 --- a/swift/tutorial3/tutorial3/Info.plist +++ b/swift/tutorial3/tutorial3/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/swift/tutorial4/tutorial4/Info.plist b/swift/tutorial4/tutorial4/Info.plist index 40c6215d..27322bf3 100644 --- a/swift/tutorial4/tutorial4/Info.plist +++ b/swift/tutorial4/tutorial4/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion diff --git a/swift/tutorial5/tutorial5/Info.plist b/swift/tutorial5/tutorial5/Info.plist index 40c6215d..27322bf3 100644 --- a/swift/tutorial5/tutorial5/Info.plist +++ b/swift/tutorial5/tutorial5/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion From ef1c764f953abce93512dd4495768d944b4e0a5e Mon Sep 17 00:00:00 2001 From: Spring Operator Date: Thu, 21 Mar 2019 03:27:15 -0500 Subject: [PATCH 126/659] URL Cleanup This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). # Fixed URLs ## Fixed Success These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to: https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200). * [ ] http://www.apache.org/licenses/LICENSE-2.0 with 24 occurrences migrated to: https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200). * [ ] http://www.apache.org/licenses/LICENSE-2.0.txt with 1 occurrences migrated to: https://www.apache.org/licenses/LICENSE-2.0.txt ([https](https://www.apache.org/licenses/LICENSE-2.0.txt) result 200). --- LICENSE.txt | 4 ++-- README.md | 2 +- scala/.mvn/wrapper/MavenWrapperDownloader.java | 2 +- soapui/.mvn/wrapper/MavenWrapperDownloader.java | 2 +- spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java | 2 +- .../amqp/tutorials/RabbitAmqpTutorialsApplication.java | 2 +- .../amqp/tutorials/RabbitAmqpTutorialsRunner.java | 2 +- .../org/springframework/amqp/tutorials/tut1/Tut1Config.java | 2 +- .../org/springframework/amqp/tutorials/tut1/Tut1Receiver.java | 2 +- .../org/springframework/amqp/tutorials/tut1/Tut1Sender.java | 2 +- .../org/springframework/amqp/tutorials/tut2/Tut2Config.java | 2 +- .../org/springframework/amqp/tutorials/tut2/Tut2Receiver.java | 2 +- .../org/springframework/amqp/tutorials/tut2/Tut2Sender.java | 2 +- .../org/springframework/amqp/tutorials/tut3/Tut3Config.java | 2 +- .../org/springframework/amqp/tutorials/tut3/Tut3Receiver.java | 2 +- .../org/springframework/amqp/tutorials/tut3/Tut3Sender.java | 2 +- .../org/springframework/amqp/tutorials/tut4/Tut4Config.java | 2 +- .../org/springframework/amqp/tutorials/tut4/Tut4Receiver.java | 2 +- .../org/springframework/amqp/tutorials/tut4/Tut4Sender.java | 2 +- .../org/springframework/amqp/tutorials/tut5/Tut5Config.java | 2 +- .../org/springframework/amqp/tutorials/tut5/Tut5Receiver.java | 2 +- .../org/springframework/amqp/tutorials/tut5/Tut5Sender.java | 2 +- .../org/springframework/amqp/tutorials/tut6/Tut6Client.java | 2 +- .../org/springframework/amqp/tutorials/tut6/Tut6Config.java | 2 +- .../org/springframework/amqp/tutorials/tut6/Tut6Server.java | 2 +- 25 files changed, 26 insertions(+), 26 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 06697641..d537e228 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,7 +1,7 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -193,7 +193,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/README.md b/README.md index f45c833b..6c0c1a7f 100644 --- a/README.md +++ b/README.md @@ -52,4 +52,4 @@ The following ports are available: ## License -Released under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt). +Released under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt). diff --git a/scala/.mvn/wrapper/MavenWrapperDownloader.java b/scala/.mvn/wrapper/MavenWrapperDownloader.java index fa4f7b49..2e394d5b 100755 --- a/scala/.mvn/wrapper/MavenWrapperDownloader.java +++ b/scala/.mvn/wrapper/MavenWrapperDownloader.java @@ -7,7 +7,7 @@ Licensed to the Apache Software Foundation (ASF) under one "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an diff --git a/soapui/.mvn/wrapper/MavenWrapperDownloader.java b/soapui/.mvn/wrapper/MavenWrapperDownloader.java index fa4f7b49..2e394d5b 100755 --- a/soapui/.mvn/wrapper/MavenWrapperDownloader.java +++ b/soapui/.mvn/wrapper/MavenWrapperDownloader.java @@ -7,7 +7,7 @@ Licensed to the Apache Software Foundation (ASF) under one "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an diff --git a/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java b/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java index fa4f7b49..2e394d5b 100755 --- a/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java +++ b/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java @@ -7,7 +7,7 @@ Licensed to the Apache Software Foundation (ASF) under one "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java index 95da0dce..5b760151 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java index be9b04be..1b536c54 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java index bbf17095..1a5fc038 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java index fc5721c7..27b278eb 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java index d1010ae5..c8b9af8b 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java index 9a950c09..42887ec0 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java index 058309dd..a3396ee9 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java index 548a044d..fa2ac843 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java index 26fca0ff..58f3ab7e 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java index f2bbe8cb..170a4584 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Receiver.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java index 9b30ad14..a1f0ad93 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut3/Tut3Sender.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java index 4f5b311e..c746240f 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java index fa384c14..9239a719 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Receiver.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java index 4afd2b2f..14cf4aa0 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut4/Tut4Sender.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java index 10253b8a..1846af3c 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java index 26460f83..0c0231ef 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Receiver.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java index 255d0105..de1027c4 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut5/Tut5Sender.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java index 3ebaded7..7b7a894a 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Client.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java index ded22fee..e95053fd 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Config.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java index 1c83acfc..5d6ff8e6 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut6/Tut6Server.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, From ee00b6fd71e7fd7a59360bcdbc6e752a033c9fe9 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 27 Mar 2019 19:27:42 +0300 Subject: [PATCH 127/659] Java client: README updates, closes #217 --- java/README.md | 77 ++++++++++++++++++++++++++++++----------------- java/recompile.sh | 2 +- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/java/README.md b/java/README.md index 6259fb04..9d4822a0 100644 --- a/java/README.md +++ b/java/README.md @@ -3,57 +3,78 @@ Here you can find the Java code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). -To successfully use the examples you will need a running RabbitMQ server. +To successfully use the examples you will need a RabbitMQ node running locally. ## Requirements You'll need to download the following JAR files from Maven Central: - - * [RabbitMQ Java Client](http://central.maven.org/maven2/com/rabbitmq/amqp-client/4.0.2/amqp-client-4.0.2.jar) - * [SLF4J API](http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar) - * [SLF4J Simple](http://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.22/slf4j-simple-1.7.22.jar) -Copy those files in your working directory, along the tutorials Java files. + * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0//amqp-client-5.6.0.jar) + * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar) + * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar) + +For example, with `wget`: -To compile you only need the Rabbitmq Java Client jar on the classpath. +``` shell +wget https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0/amqp-client-5.6.0.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar +``` +Copy those files in your working directory, along the tutorials Java files. + +To compile you only need the Rabbitmq Java client jar on the classpath. To run them you'll need all the dependencies, see examples below. -Note: If you're on Windows, -use a semicolon instead of a colon to separate items in the classpath. +You can set an environment variable for the jar files on the classpath e.g. + +``` +export CP=.:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar +java -cp $CP Send +``` -> You can set an environment variable for the jar files on the classpath e.g. -> -> $ export CP=.:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar -> $ java -cp $CP Send -> -> or on Windows: -> -> > set CP=.;amqp-client-4.0.2.jar;slf4j-api-1.7.21.jar;slf4j-simple-1.7.22.jar -> > java -cp %CP% Send +On Windows, use a semicolon instead of a colon to separate items in the classpath: + +``` +set CP=.;amqp-client-5.6.0.jar;slf4j-api-1.7.25.jar;slf4j-simple-1.7.25.jar +java -cp %CP% Send +``` ## Code [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-java.html): - $ javac -cp amqp-client-4.0.2.jar Send.java Recv.java +``` +javac -cp amqp-client-5.6.0.jar Send.java Recv.java + +# terminal tab 1 +java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Send - $ java -cp .:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar Send - $ java -cp .:amqp-client-4.0.2.jar:slf4j-api-1.7.21.jar:slf4j-simple-1.7.22.jar Recv +# terminal tab 2 +java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Recv +``` [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): - $ javac -cp amqp-client-4.0.2.jar NewTask.java Worker.java +``` +javac -cp amqp-client-5.6.0.jar NewTask.java Worker.java - $ java -cp $CP NewTask - $ java -cp $CP Worker +# terminal tab 1 +java -cp $CP NewTask -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) +# terminal tab 2 +java -cp $CP Worker +``` - $ javac -cp amqp-client-4.0.2.jar EmitLog.java ReceiveLogs.java +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) - $ java -cp $CP ReceiveLogs - $ java -cp $CP EmitLog +``` shell +javac -cp amqp-client-5.6.0.jar EmitLog.java ReceiveLogs.java +# terminal tab 1 +java -cp $CP ReceiveLogs +# terminal tab 2 +java -cp $CP EmitLog +``` diff --git a/java/recompile.sh b/java/recompile.sh index 3e117ab9..42bc6309 100755 --- a/java/recompile.sh +++ b/java/recompile.sh @@ -1,3 +1,3 @@ #!/bin/sh -javac -cp .:amqp-client-5.5.1.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar *.java +javac -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar *.java From d96a1b92f20422a5ec15156b4cc8e70ed0306552 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 27 Mar 2019 19:27:42 +0300 Subject: [PATCH 128/659] Recommend starting consumer first --- java/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/README.md b/java/README.md index 9d4822a0..e06695e5 100644 --- a/java/README.md +++ b/java/README.md @@ -49,10 +49,10 @@ java -cp %CP% Send javac -cp amqp-client-5.6.0.jar Send.java Recv.java # terminal tab 1 -java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Send +java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Recv # terminal tab 2 -java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Recv +java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Send ``` [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): From 4d50239cebbfb25c39d21693c5936b4a9ce169a1 Mon Sep 17 00:00:00 2001 From: Paul Muriel Biya-Bi Date: Sat, 30 Mar 2019 20:06:25 -0400 Subject: [PATCH 129/659] Avoid ArrayIndexOutOfBoundsException in EmitLogDirect It is true that the EmitLogDirect.getMessage() method only calls the EmitLogDirect.joinStrings() method when the length of the strings array argument is at least 2. However, it is safe make our method more robust by avoiding the ArrayIndexOutOfBoundsException exception as much as we can. Who knows? Maybe the EmitLogDirect.joinStrings() method could be extracted in a utility class and used in cases where the startIndex could potentially be equal to the length of the passed array. --- java/EmitLogDirect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/EmitLogDirect.java b/java/EmitLogDirect.java index 91943910..653d646c 100644 --- a/java/EmitLogDirect.java +++ b/java/EmitLogDirect.java @@ -37,7 +37,7 @@ private static String getMessage(String[] strings) { private static String joinStrings(String[] strings, String delimiter, int startIndex) { int length = strings.length; if (length == 0) return ""; - if (length < startIndex) return ""; + if (length <= startIndex) return ""; StringBuilder words = new StringBuilder(strings[startIndex]); for (int i = startIndex + 1; i < length; i++) { words.append(delimiter).append(strings[i]); From 01bb66eeeb752e2402a5d0b5f8b682a7f3b3620c Mon Sep 17 00:00:00 2001 From: Slim Hmidi Date: Fri, 19 Apr 2019 16:10:01 +0200 Subject: [PATCH 130/659] update the varibales names update the Readme.md Update amqplib dependency, run js-beautify and jshint on emit_log.js run js-beautify and jshint on send.js, receive.js run js-beautify and jshint on all js files --- javascript-nodejs/README.md | 2 +- javascript-nodejs/package-lock.json | 277 +++++++++++++++++-- javascript-nodejs/package.json | 3 +- javascript-nodejs/src/emit_log.js | 29 +- javascript-nodejs/src/emit_log_direct.js | 33 ++- javascript-nodejs/src/emit_log_topic.js | 33 ++- javascript-nodejs/src/new_task.js | 31 ++- javascript-nodejs/src/receive.js | 33 ++- javascript-nodejs/src/receive_logs.js | 41 ++- javascript-nodejs/src/receive_logs_direct.js | 53 ++-- javascript-nodejs/src/receive_logs_topic.js | 53 ++-- javascript-nodejs/src/rpc_client.js | 64 +++-- javascript-nodejs/src/rpc_server.js | 57 ++-- javascript-nodejs/src/send.js | 33 ++- javascript-nodejs/src/worker.js | 34 ++- 15 files changed, 580 insertions(+), 196 deletions(-) diff --git a/javascript-nodejs/README.md b/javascript-nodejs/README.md index ad08cb84..025a64c2 100644 --- a/javascript-nodejs/README.md +++ b/javascript-nodejs/README.md @@ -52,4 +52,4 @@ To install `amqp.node` using npm: [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html): node src/rpc_server.js - node src/rpc_client.js + node src/rpc_client.js 30 diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 85d71454..a00c04c2 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -4,65 +4,300 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "amqplib": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.3.2.tgz", - "integrity": "sha1-532Ps4QuvK54zxyTDEkNHpVPQpc=", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.3.tgz", + "integrity": "sha512-ZOdUhMxcF+u62rPI+hMtU1NBXSDFQ3eCJJrenamtdQ7YYwh7RZJHOIM1gonVbZ5PyVdYH4xqBPje9OYqk7fnqw==", "requires": { - "bitsyntax": "0.0.4", - "buffer-more-ints": "0.0.2", - "readable-stream": "1.1.14", - "when": "3.6.4" + "bitsyntax": "~0.1.0", + "bluebird": "^3.5.2", + "buffer-more-ints": "~1.0.0", + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "~5.1.2", + "url-parse": "~1.4.3" } }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, "bitsyntax": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", - "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", + "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", "requires": { - "buffer-more-ints": "0.0.2" + "buffer-more-ints": "~1.0.0", + "debug": "~2.6.9", + "safe-buffer": "~5.1.2" + } + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "buffer-more-ints": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", - "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", + "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, + "js-beautify": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.1.tgz", + "integrity": "sha512-oxxvVZdOdUfzk8IOLBF2XUZvl2GoBEfA+b0of4u2EBY/46NlXasi8JdFvazA5lCrf9/lQhTjyVy2QCUW7iq0MQ==", + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.2", + "glob": "^7.1.3", + "mkdirp": "~0.5.0", + "nopt": "~4.0.1" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=" + "url-parse": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", + "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", + "requires": { + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } } diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index e5c72ac2..3eda701d 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "RabbitMQ amqp.node tutorial ", "dependencies": { - "amqplib": "^0.3.2" + "amqplib": "latest", + "js-beautify": "^1.9.1" } } diff --git a/javascript-nodejs/src/emit_log.js b/javascript-nodejs/src/emit_log.js index fcb8ccba..e5991e84 100755 --- a/javascript-nodejs/src/emit_log.js +++ b/javascript-nodejs/src/emit_log.js @@ -2,15 +2,26 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'logs'; - var msg = process.argv.slice(2).join(' ') || 'Hello World!'; +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'logs'; + var msg = process.argv.slice(2).join(' ') || 'Hello World!'; - ch.assertExchange(ex, 'fanout', {durable: false}); - ch.publish(ex, '', new Buffer(msg)); - console.log(" [x] Sent %s", msg); - }); + channel.assertExchange(exchange, 'fanout', { + durable: false + }); + channel.publish(exchange, '', Buffer.from(msg)); + console.log(" [x] Sent %s", msg); + }); - setTimeout(function() { conn.close(); process.exit(0) }, 500); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); }); diff --git a/javascript-nodejs/src/emit_log_direct.js b/javascript-nodejs/src/emit_log_direct.js index 37abf341..4aa8e003 100755 --- a/javascript-nodejs/src/emit_log_direct.js +++ b/javascript-nodejs/src/emit_log_direct.js @@ -2,17 +2,28 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'direct_logs'; - var args = process.argv.slice(2); - var msg = args.slice(1).join(' ') || 'Hello World!'; - var severity = (args.length > 0) ? args[0] : 'info'; +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'direct_logs'; + var args = process.argv.slice(2); + var msg = args.slice(1).join(' ') || 'Hello World!'; + var severity = (args.length > 0) ? args[0] : 'info'; - ch.assertExchange(ex, 'direct', {durable: false}); - ch.publish(ex, severity, new Buffer(msg)); - console.log(" [x] Sent %s: '%s'", severity, msg); - }); + channel.assertExchange(exchange, 'direct', { + durable: false + }); + channel.publish(exchange, severity, Buffer.from(msg)); + console.log(" [x] Sent %s: '%s'", severity, msg); + }); - setTimeout(function() { conn.close(); process.exit(0) }, 500); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); }); diff --git a/javascript-nodejs/src/emit_log_topic.js b/javascript-nodejs/src/emit_log_topic.js index 2418c107..2682eea1 100755 --- a/javascript-nodejs/src/emit_log_topic.js +++ b/javascript-nodejs/src/emit_log_topic.js @@ -2,17 +2,28 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'topic_logs'; - var args = process.argv.slice(2); - var key = (args.length > 0) ? args[0] : 'anonymous.info'; - var msg = args.slice(1).join(' ') || 'Hello World!'; +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'topic_logs'; + var args = process.argv.slice(2); + var key = (args.length > 0) ? args[0] : 'anonymous.info'; + var msg = args.slice(1).join(' ') || 'Hello World!'; - ch.assertExchange(ex, 'topic', {durable: false}); - ch.publish(ex, key, new Buffer(msg)); - console.log(" [x] Sent %s: '%s'", key, msg); - }); + channel.assertExchange(exchange, 'topic', { + durable: false + }); + channel.publish(exchange, key, Buffer.from(msg)); + console.log(" [x] Sent %s: '%s'", key, msg); + }); - setTimeout(function() { conn.close(); process.exit(0) }, 500); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); }); diff --git a/javascript-nodejs/src/new_task.js b/javascript-nodejs/src/new_task.js index b6739127..2e227e0b 100755 --- a/javascript-nodejs/src/new_task.js +++ b/javascript-nodejs/src/new_task.js @@ -2,14 +2,27 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var q = 'task_queue'; - var msg = process.argv.slice(2).join(' ') || "Hello World!"; +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var queue = 'task_queue'; + var msg = process.argv.slice(2).join(' ') || "Hello World!"; - ch.assertQueue(q, {durable: true}); - ch.sendToQueue(q, new Buffer(msg), {persistent: true}); - console.log(" [x] Sent '%s'", msg); - }); - setTimeout(function() { conn.close(); process.exit(0) }, 500); + channel.assertQueue(queue, { + durable: true + }); + channel.sendToQueue(queue, Buffer.from(msg), { + persistent: true + }); + console.log(" [x] Sent '%s'", msg); + }); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); }); diff --git a/javascript-nodejs/src/receive.js b/javascript-nodejs/src/receive.js index ef0419b2..5d1d95b8 100755 --- a/javascript-nodejs/src/receive.js +++ b/javascript-nodejs/src/receive.js @@ -2,14 +2,27 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var q = 'hello'; - - ch.assertQueue(q, {durable: false}); - console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q); - ch.consume(q, function(msg) { - console.log(" [x] Received %s", msg.content.toString()); - }, {noAck: true}); - }); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + + var queue = 'hello'; + + channel.assertQueue(queue, { + durable: false + }); + + console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue); + + channel.consume(queue, function(msg) { + console.log(" [x] Received %s", msg.content.toString()); + }, { + noAck: true + }); + }); }); diff --git a/javascript-nodejs/src/receive_logs.js b/javascript-nodejs/src/receive_logs.js index fc466258..1f400bc4 100755 --- a/javascript-nodejs/src/receive_logs.js +++ b/javascript-nodejs/src/receive_logs.js @@ -2,21 +2,36 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'logs'; +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'logs'; - ch.assertExchange(ex, 'fanout', {durable: false}); + channel.assertExchange(exchange, 'fanout', { + durable: false + }); - ch.assertQueue('', {exclusive: true}, function(err, q) { - console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q.queue); - ch.bindQueue(q.queue, ex, ''); + channel.assertQueue('', { + exclusive: true + }, function(error2, q) { + if (error2) { + throw error2; + } + console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q.queue); + channel.bindQueue(q.queue, exchange, ''); - ch.consume(q.queue, function(msg) { - if(msg.content) { - console.log(" [x] %s", msg.content.toString()); - } - }, {noAck: true}); + channel.consume(q.queue, function(msg) { + if (msg.content) { + console.log(" [x] %s", msg.content.toString()); + } + }, { + noAck: true + }); + }); }); - }); }); diff --git a/javascript-nodejs/src/receive_logs_direct.js b/javascript-nodejs/src/receive_logs_direct.js index bccf0d14..e1fa4aa7 100755 --- a/javascript-nodejs/src/receive_logs_direct.js +++ b/javascript-nodejs/src/receive_logs_direct.js @@ -5,26 +5,41 @@ var amqp = require('amqplib/callback_api'); var args = process.argv.slice(2); if (args.length == 0) { - console.log("Usage: receive_logs_direct.js [info] [warning] [error]"); - process.exit(1); + console.log("Usage: receive_logs_direct.js [info] [warning] [error]"); + process.exit(1); } -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'direct_logs'; - - ch.assertExchange(ex, 'direct', {durable: false}); - - ch.assertQueue('', {exclusive: true}, function(err, q) { - console.log(' [*] Waiting for logs. To exit press CTRL+C'); - - args.forEach(function(severity) { - ch.bindQueue(q.queue, ex, severity); - }); - - ch.consume(q.queue, function(msg) { - console.log(" [x] %s: '%s'", msg.fields.routingKey, msg.content.toString()); - }, {noAck: true}); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'direct_logs'; + + channel.assertExchange(exchange, 'direct', { + durable: false + }); + + channel.assertQueue('', { + exclusive: true + }, function(error2, q) { + if (error2) { + throw error2; + } + console.log(' [*] Waiting for logs. To exit press CTRL+C'); + + args.forEach(function(severity) { + channel.bindQueue(q.queue, exchange, severity); + }); + + channel.consume(q.queue, function(msg) { + console.log(" [x] %s: '%s'", msg.fields.routingKey, msg.content.toString()); + }, { + noAck: true + }); + }); }); - }); }); diff --git a/javascript-nodejs/src/receive_logs_topic.js b/javascript-nodejs/src/receive_logs_topic.js index 4b837f19..713670d0 100755 --- a/javascript-nodejs/src/receive_logs_topic.js +++ b/javascript-nodejs/src/receive_logs_topic.js @@ -5,26 +5,41 @@ var amqp = require('amqplib/callback_api'); var args = process.argv.slice(2); if (args.length == 0) { - console.log("Usage: receive_logs_topic.js ."); - process.exit(1); + console.log("Usage: receive_logs_topic.js ."); + process.exit(1); } -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var ex = 'topic_logs'; - - ch.assertExchange(ex, 'topic', {durable: false}); - - ch.assertQueue('', {exclusive: true}, function(err, q) { - console.log(' [*] Waiting for logs. To exit press CTRL+C'); - - args.forEach(function(key) { - ch.bindQueue(q.queue, ex, key); - }); - - ch.consume(q.queue, function(msg) { - console.log(" [x] %s:'%s'", msg.fields.routingKey, msg.content.toString()); - }, {noAck: true}); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var exchange = 'topic_logs'; + + channel.assertExchange(exchange, 'topic', { + durable: false + }); + + channel.assertQueue('', { + exclusive: true + }, function(error2, q) { + if (error2) { + throw error2; + } + console.log(' [*] Waiting for logs. To exit press CTRL+C'); + + args.forEach(function(key) { + channel.bindQueue(q.queue, exchange, key); + }); + + channel.consume(q.queue, function(msg) { + console.log(" [x] %s:'%s'", msg.fields.routingKey, msg.content.toString()); + }, { + noAck: true + }); + }); }); - }); }); diff --git a/javascript-nodejs/src/rpc_client.js b/javascript-nodejs/src/rpc_client.js index f6fd89ec..555677c6 100755 --- a/javascript-nodejs/src/rpc_client.js +++ b/javascript-nodejs/src/rpc_client.js @@ -5,34 +5,52 @@ var amqp = require('amqplib/callback_api'); var args = process.argv.slice(2); if (args.length === 0) { - console.log("Usage: rpc_client.js num"); - process.exit(1); + console.log("Usage: rpc_client.js num"); + process.exit(1); } -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - ch.assertQueue('', {exclusive: true}, function(err, q) { - var corr = generateUuid(); - var num = parseInt(args[0]); - - console.log(' [x] Requesting fib(%d)', num); - - ch.consume(q.queue, function(msg) { - if (msg.properties.correlationId === corr) { - console.log(' [.] Got %s', msg.content.toString()); - setTimeout(function() { conn.close(); process.exit(0) }, 500); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; } - }, {noAck: true}); - - ch.sendToQueue('rpc_queue', - new Buffer(num.toString()), - { correlationId: corr, replyTo: q.queue }); + channel.assertQueue('', { + exclusive: true + }, function(error2, q) { + if (error2) { + throw error2; + } + var correlationId = generateUuid(); + var num = parseInt(args[0]); + + console.log(' [x] Requesting fib(%d)', num); + + channel.consume(q.queue, function(msg) { + if (msg.properties.correlationId === correlationId) { + console.log(' [.] Got %s', msg.content.toString()); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); + } + }, { + noAck: true + }); + + channel.sendToQueue('rpc_queue', + Buffer.from(num.toString()), { + correlationId: correlationId, + replyTo: q.queue + }); + }); }); - }); }); function generateUuid() { - return Math.random().toString() + - Math.random().toString() + - Math.random().toString(); + return Math.random().toString() + + Math.random().toString() + + Math.random().toString(); } diff --git a/javascript-nodejs/src/rpc_server.js b/javascript-nodejs/src/rpc_server.js index c9e0f121..f5965cb7 100755 --- a/javascript-nodejs/src/rpc_server.js +++ b/javascript-nodejs/src/rpc_server.js @@ -2,32 +2,41 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var q = 'rpc_queue'; - - ch.assertQueue(q, {durable: false}); - ch.prefetch(1); - console.log(' [x] Awaiting RPC requests'); - ch.consume(q, function reply(msg) { - var n = parseInt(msg.content.toString()); - - console.log(" [.] fib(%d)", n); - - var r = fibonacci(n); - - ch.sendToQueue(msg.properties.replyTo, - new Buffer(r.toString()), - {correlationId: msg.properties.correlationId}); - - ch.ack(msg); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + var queue = 'rpc_queue'; + + channel.assertQueue(queue, { + durable: false + }); + channel.prefetch(1); + console.log(' [x] Awaiting RPC requests'); + channel.consume(queue, function reply(msg) { + var n = parseInt(msg.content.toString()); + + console.log(" [.] fib(%d)", n); + + var r = fibonacci(n); + + channel.sendToQueue(msg.properties.replyTo, + Buffer.from(r.toString()), { + correlationId: msg.properties.correlationId + }); + + channel.ack(msg); + }); }); - }); }); function fibonacci(n) { - if (n === 0 || n === 1) - return n; - else - return fibonacci(n - 1) + fibonacci(n - 2); + if (n === 0 || n === 1) + return n; + else + return fibonacci(n - 1) + fibonacci(n - 2); } diff --git a/javascript-nodejs/src/send.js b/javascript-nodejs/src/send.js index 92da2ad6..99f071ea 100755 --- a/javascript-nodejs/src/send.js +++ b/javascript-nodejs/src/send.js @@ -2,14 +2,27 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var q = 'hello'; - var msg = 'Hello World!'; - - ch.assertQueue(q, {durable: false}); - ch.sendToQueue(q, Buffer.from(msg)); - console.log(" [x] Sent %s", msg); - }); - setTimeout(function() { conn.close(); process.exit(0) }, 500); +amqp.connect('amqp://localhost', function(error0, connection) { + if (error0) { + throw error0; + } + connection.createChannel(function(error1, channel) { + if (error1) { + throw error1; + } + + var queue = 'hello'; + var msg = 'Hello World!'; + + channel.assertQueue(queue, { + durable: false + }); + channel.sendToQueue(queue, Buffer.from(msg)); + + console.log(" [x] Sent %s", msg); + }); + setTimeout(function() { + connection.close(); + process.exit(0); + }, 500); }); diff --git a/javascript-nodejs/src/worker.js b/javascript-nodejs/src/worker.js index 40c391fe..00a5e86a 100755 --- a/javascript-nodejs/src/worker.js +++ b/javascript-nodejs/src/worker.js @@ -2,21 +2,25 @@ var amqp = require('amqplib/callback_api'); -amqp.connect('amqp://localhost', function(err, conn) { - conn.createChannel(function(err, ch) { - var q = 'task_queue'; +amqp.connect('amqp://localhost', function(error, connection) { + connection.createChannel(function(error, channel) { + var queue = 'task_queue'; - ch.assertQueue(q, {durable: true}); - ch.prefetch(1); - console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q); - ch.consume(q, function(msg) { - var secs = msg.content.toString().split('.').length - 1; + channel.assertQueue(q, { + durable: true + }); + channel.prefetch(1); + console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q); + channel.consume(queue, function(msg) { + var secs = msg.content.toString().split('.').length - 1; - console.log(" [x] Received %s", msg.content.toString()); - setTimeout(function() { - console.log(" [x] Done"); - ch.ack(msg); - }, secs * 1000); - }, {noAck: false}); - }); + console.log(" [x] Received %s", msg.content.toString()); + setTimeout(function() { + console.log(" [x] Done"); + channel.ack(msg); + }, secs * 1000); + }, { + noAck: false + }); + }); }); From 18b8a6f4e64c2524e55a8e35c3fa65fc507cdc3c Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 19 Apr 2019 23:02:43 +0300 Subject: [PATCH 131/659] Update two more variables --- javascript-nodejs/src/worker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript-nodejs/src/worker.js b/javascript-nodejs/src/worker.js index 00a5e86a..3c2d912e 100755 --- a/javascript-nodejs/src/worker.js +++ b/javascript-nodejs/src/worker.js @@ -6,11 +6,11 @@ amqp.connect('amqp://localhost', function(error, connection) { connection.createChannel(function(error, channel) { var queue = 'task_queue'; - channel.assertQueue(q, { + channel.assertQueue(queue, { durable: true }); channel.prefetch(1); - console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q); + console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue); channel.consume(queue, function(msg) { var secs = msg.content.toString().split('.').length - 1; From d04af199176304d000b5ad0f246c5c32bcca903e Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 25 Apr 2019 19:35:24 +0300 Subject: [PATCH 132/659] Ruby: update dependencies --- ruby/Gemfile | 4 ++-- ruby/Gemfile.lock | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruby/Gemfile b/ruby/Gemfile index ca5036af..db0929c5 100644 --- a/ruby/Gemfile +++ b/ruby/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' -ruby ">= 2.2.0" +ruby ">= 2.5.0" -gem "bunny", ">= 2.12.0", " < 3.0" +gem "bunny", ">= 2.14.2", " < 3.0" diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock index 72c6706d..50b7a56a 100644 --- a/ruby/Gemfile.lock +++ b/ruby/Gemfile.lock @@ -2,17 +2,17 @@ GEM remote: https://rubygems.org/ specs: amq-protocol (2.3.0) - bunny (2.12.0) + bunny (2.14.2) amq-protocol (~> 2.3, >= 2.3.0) PLATFORMS ruby DEPENDENCIES - bunny (>= 2.12.0, < 3.0) + bunny (>= 2.14.2, < 3.0) RUBY VERSION ruby 2.5.1p57 BUNDLED WITH - 1.16.1 + 1.17.2 From 802cf615bfa2c9b65021556751c3efc131ad7795 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 25 Apr 2019 19:36:20 +0300 Subject: [PATCH 133/659] Ruby tutorial 6: avoid using block: true It makes reasoning about connection recovery pretty difficult. The option only exists to make tutorials shorter but sadly some users go straight into production with copy-pasted code :( --- ruby/rpc_server.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ruby/rpc_server.rb b/ruby/rpc_server.rb index 99f1610e..984ee071 100644 --- a/ruby/rpc_server.rb +++ b/ruby/rpc_server.rb @@ -19,14 +19,18 @@ def stop connection.close end + def loop_forever + # This loop only exists to keep the main thread + # alive. Many real world apps won't need this. + loop { sleep 5 } + end + private attr_reader :channel, :exchange, :queue, :connection def subscribe_to_queue - # block: true is only used to keep the main thread - # alive. Please avoid using it in real world applications. - queue.subscribe(block: true) do |_delivery_info, properties, payload| + queue.subscribe do |_delivery_info, properties, payload| result = fibonacci(payload.to_i) exchange.publish( @@ -49,6 +53,7 @@ def fibonacci(value) puts ' [x] Awaiting RPC requests' server.start('rpc_queue') + server.loop_forever rescue Interrupt => _ server.stop end From 0d82db979cba6b7d9a4a4d5c1c1d11068c3a4547 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 25 Apr 2019 19:36:36 +0300 Subject: [PATCH 134/659] Ruby tutorial 6: accept input on the command line --- ruby/rpc_client.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ruby/rpc_client.rb b/ruby/rpc_client.rb index 9c6cd499..6a236946 100644 --- a/ruby/rpc_client.rb +++ b/ruby/rpc_client.rb @@ -62,8 +62,10 @@ def generate_uuid client = FibonacciClient.new('rpc_queue') -puts ' [x] Requesting fib(30)' -response = client.call(30) +n = (ARGV[0] || 30).to_i + +puts " [x] Requesting fib(#{n})" +response = client.call(n) puts " [.] Got #{response}" From 7609ff2dd0056ae2a70fa66f252feb4a93262bc5 Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 17:56:46 +0300 Subject: [PATCH 135/659] Rust: Tutorial 1 - Hello, World --- rust/.gitignore | 78 ++ rust/01-hello-world/Cargo.lock | 1234 ++++++++++++++++++++++++ rust/01-hello-world/Cargo.toml | 15 + rust/01-hello-world/src/bin/receive.rs | 60 ++ rust/01-hello-world/src/bin/send.rs | 46 + rust/README.md | 41 + 6 files changed, 1474 insertions(+) create mode 100644 rust/.gitignore create mode 100644 rust/01-hello-world/Cargo.lock create mode 100644 rust/01-hello-world/Cargo.toml create mode 100644 rust/01-hello-world/src/bin/receive.rs create mode 100644 rust/01-hello-world/src/bin/send.rs create mode 100644 rust/README.md diff --git a/rust/.gitignore b/rust/.gitignore new file mode 100644 index 00000000..374689d6 --- /dev/null +++ b/rust/.gitignore @@ -0,0 +1,78 @@ +# Override the root-level .gitignore +!* + +# Build output +**/build/** +**/target/** +# Clib dependencies +**/deps/** +# VS Code +**/.vscode/** +# Test binaries +*.test +# Test coverage information files +*.gcda +*.gcda.info +*.gcno +# Debugger outputs +*.bin +*.cap +*.trace +# Output screenshots +/*.bmp + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +*.log +*.swp diff --git a/rust/01-hello-world/Cargo.lock b/rust/01-hello-world/Cargo.lock new file mode 100644 index 00000000..99cd6d31 --- /dev/null +++ b/rust/01-hello-world/Cargo.lock @@ -0,0 +1,1234 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-codegen" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie-factory" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "handlebars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-async" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-futures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tutorial-01" +version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" +"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" +"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" +"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" +"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" +"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" +"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" +"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" +"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" +"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" +"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/01-hello-world/Cargo.toml b/rust/01-hello-world/Cargo.toml new file mode 100644 index 00000000..3a716c1d --- /dev/null +++ b/rust/01-hello-world/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "tutorial-01" +version = "0.1.0" +authors = ["Adel Vilkov "] +edition = "2018" + +[dependencies] +failure = "^0.1" +futures = "^0.1" +lapin-futures = "^0.18" +tokio = "^0.1.8" +tokio-codec = "^0.1" +tokio-io = "^0.1" +tokio-sync = "^0.1" +tokio-timer = "^0.2" \ No newline at end of file diff --git a/rust/01-hello-world/src/bin/receive.rs b/rust/01-hello-world/src/bin/receive.rs new file mode 100644 index 00000000..1c3b5e0f --- /dev/null +++ b/rust/01-hello-world/src/bin/receive.rs @@ -0,0 +1,60 @@ +use crate::lapin::channel::{BasicConsumeOptions, QueueDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use futures::stream::Stream; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, heartbeat)| { + // do a heartbeat on a dedicated thread to keep us connected + tokio::spawn(heartbeat.map_err(|_| ())); + // create a channel + client.create_channel().map_err(Error::from) + }) + .and_then(|channel| { + let ch = channel.clone(); + channel + // declare a queue + .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) + .and_then(move |queue| { + // create a message receiver + channel.basic_consume( + &queue, + "consumer", + BasicConsumeOptions::default(), + FieldTable::new(), + ) + }) + .and_then(|stream| { + // print received messages + stream.for_each(move |message| { + println!( + "Received: {:?}", + std::str::from_utf8(&message.data).unwrap() + ); + ch.basic_ack(message.delivery_tag, false) + }) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/01-hello-world/src/bin/send.rs b/rust/01-hello-world/src/bin/send.rs new file mode 100644 index 00000000..ef635a9e --- /dev/null +++ b/rust/01-hello-world/src/bin/send.rs @@ -0,0 +1,46 @@ +use crate::lapin::channel::{BasicProperties, BasicPublishOptions, QueueDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel + .and_then(|channel| { + channel + // declare a new queue + .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) + .and_then(move |_| { + // if successful, send a message + channel + .basic_publish( + "", + "hello", + b"Hello World!".to_vec(), + BasicPublishOptions::default(), + BasicProperties::default(), + ) + .map(|_| println!("Sent a message")) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 00000000..d32780ac --- /dev/null +++ b/rust/README.md @@ -0,0 +1,41 @@ +# Rust code for RabbitMQ tutorials + +Here you can find the Rust code examples for [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +The examples use [lapin](https://github.com/sozu-proxy/lapin) client library. + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +* [Rust and Cargo](https://www.rust-lang.org/tools/install) + +## Code +Each tutorial is a separate crate where each source file corresponds to a +binary executable. + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) +``` +cd 01-hello-world +``` +Start receiver and sender in two separate shells: +``` +cargo run --bin receive +cargo run --bin send +``` + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) +// TODO + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) +// TODO + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) +// TODO + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) +// TODO + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) + From 6cc1274ebaebb807aac2d402c7a006d9e37bb6b5 Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 18:18:52 +0300 Subject: [PATCH 136/659] Rust: Tutorial 2 - Work Queues --- rust/02-work-queues/Cargo.lock | 1250 +++++++++++++++++++++++ rust/02-work-queues/Cargo.toml | 16 + rust/02-work-queues/src/bin/new-task.rs | 52 + rust/02-work-queues/src/bin/worker.rs | 63 ++ rust/README.md | 9 +- 5 files changed, 1389 insertions(+), 1 deletion(-) create mode 100644 rust/02-work-queues/Cargo.lock create mode 100644 rust/02-work-queues/Cargo.toml create mode 100644 rust/02-work-queues/src/bin/new-task.rs create mode 100644 rust/02-work-queues/src/bin/worker.rs diff --git a/rust/02-work-queues/Cargo.lock b/rust/02-work-queues/Cargo.lock new file mode 100644 index 00000000..a0d97662 --- /dev/null +++ b/rust/02-work-queues/Cargo.lock @@ -0,0 +1,1250 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-codegen" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie-factory" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "handlebars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-async" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-futures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tutorial-02" +version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" +"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" +"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" +"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" +"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" +"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" +"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" +"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" +"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" +"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" +"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" +"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/02-work-queues/Cargo.toml b/rust/02-work-queues/Cargo.toml new file mode 100644 index 00000000..44dee4bc --- /dev/null +++ b/rust/02-work-queues/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "tutorial-02" +version = "0.1.0" +authors = ["Adel Vilkov "] +edition = "2018" + +[dependencies] +failure = "^0.1" +futures = "^0.1" +itertools = "^0.8.0" +lapin-futures = "^0.18" +tokio = "^0.1.8" +tokio-codec = "^0.1" +tokio-io = "^0.1" +tokio-sync = "^0.1" +tokio-timer = "^0.2" \ No newline at end of file diff --git a/rust/02-work-queues/src/bin/new-task.rs b/rust/02-work-queues/src/bin/new-task.rs new file mode 100644 index 00000000..79215147 --- /dev/null +++ b/rust/02-work-queues/src/bin/new-task.rs @@ -0,0 +1,52 @@ +use crate::lapin::channel::{BasicProperties, BasicPublishOptions, QueueDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use itertools::free::join; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let message = match args.len() { + 0 => "hello".to_string(), + _ => join(args, " "), + }; + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel + .and_then(|channel| { + channel + // declare a new queue + .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) + .and_then(move |_| { + // if successful, send a message + channel + .basic_publish( + "", + "hello", + message.as_bytes().to_vec(), + BasicPublishOptions::default(), + BasicProperties::default(), + ) + .map(|_| println!("Sent a message")) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/02-work-queues/src/bin/worker.rs b/rust/02-work-queues/src/bin/worker.rs new file mode 100644 index 00000000..6e316623 --- /dev/null +++ b/rust/02-work-queues/src/bin/worker.rs @@ -0,0 +1,63 @@ +use crate::lapin::channel::{BasicConsumeOptions, QueueDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use futures::stream::Stream; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; +use std::thread; +use std::time::Duration; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, heartbeat)| { + // do a heartbeat on a dedicated thread to keep us connected + tokio::spawn(heartbeat.map_err(|_| ())); + // create a channel + client.create_channel().map_err(Error::from) + }) + .and_then(|channel| { + let ch = channel.clone(); + channel + // declare a queue + .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) + .and_then(move |queue| { + // create a message receiver + channel.basic_consume( + &queue, + "consumer", + BasicConsumeOptions::default(), + FieldTable::new(), + ) + }) + .and_then(|stream| { + // print received messages + stream.for_each(move |message| { + let text = std::str::from_utf8(&message.data).unwrap(); + println!("Received: {:?}", text); + // Imitate a second of work per one symbol in message + thread::sleep(Duration::from_secs(text.len() as u64)); + println!("Done"); + ch.basic_ack(message.delivery_tag, false) + }) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/README.md b/rust/README.md index d32780ac..bab69d44 100644 --- a/rust/README.md +++ b/rust/README.md @@ -26,7 +26,14 @@ cargo run --bin send ``` #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) -// TODO +``` +cd 02-work-queues +``` +Start workers and task creator in separate shells: +``` +cargo run --bin worker +cargo run --bin new-task "hi" # specify a custom message +``` #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) // TODO From afc16d8b77dec8fd7b652b1bca9d14d5973c613d Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 19:46:05 +0300 Subject: [PATCH 137/659] Rust: Tutorial 3 - Publish/Subscribe --- rust/03-publish-subscribe/Cargo.lock | 1250 ++++++++++++++++++ rust/03-publish-subscribe/Cargo.toml | 16 + rust/03-publish-subscribe/src/bin/emit.rs | 58 + rust/03-publish-subscribe/src/bin/receive.rs | 95 ++ rust/README.md | 9 +- 5 files changed, 1427 insertions(+), 1 deletion(-) create mode 100644 rust/03-publish-subscribe/Cargo.lock create mode 100644 rust/03-publish-subscribe/Cargo.toml create mode 100644 rust/03-publish-subscribe/src/bin/emit.rs create mode 100644 rust/03-publish-subscribe/src/bin/receive.rs diff --git a/rust/03-publish-subscribe/Cargo.lock b/rust/03-publish-subscribe/Cargo.lock new file mode 100644 index 00000000..da6da6a2 --- /dev/null +++ b/rust/03-publish-subscribe/Cargo.lock @@ -0,0 +1,1250 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-codegen" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie-factory" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "handlebars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-async" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-futures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tutorial-03" +version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" +"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" +"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" +"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" +"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" +"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" +"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" +"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" +"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" +"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" +"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" +"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/03-publish-subscribe/Cargo.toml b/rust/03-publish-subscribe/Cargo.toml new file mode 100644 index 00000000..a4c692a1 --- /dev/null +++ b/rust/03-publish-subscribe/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "tutorial-03" +version = "0.1.0" +authors = ["Adel Vilkov "] +edition = "2018" + +[dependencies] +failure = "^0.1" +futures = "^0.1" +itertools = "^0.8.0" +lapin-futures = "^0.18" +tokio = "^0.1.8" +tokio-codec = "^0.1" +tokio-io = "^0.1" +tokio-sync = "^0.1" +tokio-timer = "^0.2" diff --git a/rust/03-publish-subscribe/src/bin/emit.rs b/rust/03-publish-subscribe/src/bin/emit.rs new file mode 100644 index 00000000..153a9e70 --- /dev/null +++ b/rust/03-publish-subscribe/src/bin/emit.rs @@ -0,0 +1,58 @@ +use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use itertools::free::join; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let message = match args.len() { + 0 => "hello".to_string(), + _ => join(args, " "), + }; + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel + .and_then(move |c| { + let channel = c.clone(); + channel + // declare a new exchange + .exchange_declare( + "logs", + "fanout", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + .and_then(move |ch| { + // if successful, send a message + ch.basic_publish( + "logs", + "", + message.as_bytes().to_vec(), + BasicPublishOptions::default(), + BasicProperties::default(), + ) + .map(|_| println!("Sent a message")) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/03-publish-subscribe/src/bin/receive.rs b/rust/03-publish-subscribe/src/bin/receive.rs new file mode 100644 index 00000000..a4588f4f --- /dev/null +++ b/rust/03-publish-subscribe/src/bin/receive.rs @@ -0,0 +1,95 @@ +use crate::lapin::channel::{ + BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, +}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use futures::stream::Stream; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, heartbeat)| { + // do a heartbeat on a dedicated thread to keep us connected + tokio::spawn(heartbeat.map_err(|_| ())); + // create a channel + client.create_channel().map_err(Error::from) + }) + .and_then(|c| { + let channel = c.clone(); + // generate an queue with a random name which deletes itself after use + // let queue_name = format!("amq.gen-{:?}", Uuid::new_v4()); + let queue_options = QueueDeclareOptions { + durable: false, + exclusive: true, + auto_delete: true, + nowait: false, + passive: false, + ticket: 0u16, + }; + channel + .exchange_declare( + "logs", + "fanout", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + // declare a queue + .and_then(move |ch| { + // declare a queue using specified options + // if name is empty it will be generated + ch.queue_declare("", queue_options, FieldTable::new()) + .map(move |queue| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // bind our queue to declared exchange + let name = queue.name(); + ch.queue_bind( + &name, + "logs", + "", + QueueBindOptions::default(), + FieldTable::new(), + ) + .map(move |_| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // create a message receiver + ch.basic_consume( + &queue, + "consumer", + BasicConsumeOptions::default(), + FieldTable::new(), + ) + .map(move |s| (ch.clone(), s)) + }) + .and_then(move |(ch, stream)| { + // print received messages + stream.for_each(move |message| { + let text = std::str::from_utf8(&message.data).unwrap(); + println!("Received: {:?}", text); + ch.basic_ack(message.delivery_tag, false) + }) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/README.md b/rust/README.md index bab69d44..a8cbd107 100644 --- a/rust/README.md +++ b/rust/README.md @@ -36,7 +36,14 @@ cargo run --bin new-task "hi" # specify a custom message ``` #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) -// TODO +``` +cd 03-publish-subscribe +``` +Start receiver and emitter in separate shells: +``` +cargo run --bin receive +cargo run --bin emit "hi" # specify a custom message +``` #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) // TODO From 06b8e15c5f7f00cbf2368e4cee25d4be3671b1a2 Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 20:41:22 +0300 Subject: [PATCH 138/659] Rust: Tutorial 4 - Routing --- rust/03-publish-subscribe/src/bin/receive.rs | 1 - rust/04-routing/Cargo.lock | 1250 ++++++++++++++++++ rust/04-routing/Cargo.toml | 16 + rust/04-routing/src/bin/emit-direct.rs | 62 + rust/04-routing/src/bin/receive.rs | 103 ++ rust/README.md | 9 +- 6 files changed, 1439 insertions(+), 2 deletions(-) create mode 100644 rust/04-routing/Cargo.lock create mode 100644 rust/04-routing/Cargo.toml create mode 100644 rust/04-routing/src/bin/emit-direct.rs create mode 100644 rust/04-routing/src/bin/receive.rs diff --git a/rust/03-publish-subscribe/src/bin/receive.rs b/rust/03-publish-subscribe/src/bin/receive.rs index a4588f4f..b7ef0ba2 100644 --- a/rust/03-publish-subscribe/src/bin/receive.rs +++ b/rust/03-publish-subscribe/src/bin/receive.rs @@ -34,7 +34,6 @@ fn main() { .and_then(|c| { let channel = c.clone(); // generate an queue with a random name which deletes itself after use - // let queue_name = format!("amq.gen-{:?}", Uuid::new_v4()); let queue_options = QueueDeclareOptions { durable: false, exclusive: true, diff --git a/rust/04-routing/Cargo.lock b/rust/04-routing/Cargo.lock new file mode 100644 index 00000000..81940baf --- /dev/null +++ b/rust/04-routing/Cargo.lock @@ -0,0 +1,1250 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-codegen" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie-factory" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "handlebars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-async" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-futures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tutorial-04" +version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" +"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" +"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" +"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" +"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" +"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" +"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" +"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" +"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" +"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" +"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" +"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/04-routing/Cargo.toml b/rust/04-routing/Cargo.toml new file mode 100644 index 00000000..6ea49f60 --- /dev/null +++ b/rust/04-routing/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "tutorial-04" +version = "0.1.0" +authors = ["Adel Vilkov "] +edition = "2018" + +[dependencies] +failure = "^0.1" +futures = "^0.1" +itertools = "^0.8.0" +lapin-futures = "^0.18" +tokio = "^0.1.8" +tokio-codec = "^0.1" +tokio-io = "^0.1" +tokio-sync = "^0.1" +tokio-timer = "^0.2" diff --git a/rust/04-routing/src/bin/emit-direct.rs b/rust/04-routing/src/bin/emit-direct.rs new file mode 100644 index 00000000..876b9cff --- /dev/null +++ b/rust/04-routing/src/bin/emit-direct.rs @@ -0,0 +1,62 @@ +use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use itertools::free::join; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let severity = match args.len() { + 0 => "info".to_string(), + _ => args.first().unwrap().clone(), + }; + let message = match args.len() { + x if x < 2 => "Hello, world!".to_string(), + _ => join(args[1..].iter(), " "), + }; + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel + .and_then(move |c| { + let channel = c.clone(); + channel + // declare a new exchange + .exchange_declare( + "direct_logs", + "direct", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + .and_then(move |ch| { + // if successful, send a message + ch.basic_publish( + "direct_logs", + &severity, + message.as_bytes().to_vec(), + BasicPublishOptions::default(), + BasicProperties::default(), + ) + .map(|_| println!("Sent a message")) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/04-routing/src/bin/receive.rs b/rust/04-routing/src/bin/receive.rs new file mode 100644 index 00000000..368d81ca --- /dev/null +++ b/rust/04-routing/src/bin/receive.rs @@ -0,0 +1,103 @@ +use crate::lapin::channel::{ + BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, +}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use futures::stream::Stream; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, heartbeat)| { + // do a heartbeat on a dedicated thread to keep us connected + tokio::spawn(heartbeat.map_err(|_| ())); + // create a channel + client.create_channel().map_err(Error::from) + }) + .and_then(|c| { + let channel = c.clone(); + // generate an queue with a random name which deletes itself after use + let queue_options = QueueDeclareOptions { + durable: false, + exclusive: true, + auto_delete: true, + nowait: false, + passive: false, + ticket: 0u16, + }; + channel + .exchange_declare( + "direct_logs", + "direct", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + // declare a queue + .and_then(move |ch| { + // declare a queue using specified options + // if name is empty it will be generated + ch.queue_declare("", queue_options, FieldTable::new()) + .map(move |queue| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // bind our queue to declared exchange + let name = queue.name(); + let c = ch.clone(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let severities = match args.len() { + 0 => vec!["info".to_string()], + _ => args, + }; + let binds = severities.into_iter().map(move |severity| { + c.queue_bind( + &name, + "direct_logs", + &severity, + QueueBindOptions::default(), + FieldTable::new(), + ) + }); + futures::future::join_all(binds).map(move |_| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // create a message receiver + ch.basic_consume( + &queue, + "consumer", + BasicConsumeOptions::default(), + FieldTable::new(), + ) + .map(move |s| (ch.clone(), s)) + }) + .and_then(move |(ch, stream)| { + // print received messages + stream.for_each(move |message| { + let severity = &message.routing_key; + let text = std::str::from_utf8(&message.data).unwrap(); + println!("Received: [{:?}] {:?}", severity, text); + ch.basic_ack(message.delivery_tag, false) + }) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/README.md b/rust/README.md index a8cbd107..63deba5a 100644 --- a/rust/README.md +++ b/rust/README.md @@ -46,7 +46,14 @@ cargo run --bin emit "hi" # specify a custom message ``` #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) -// TODO +``` +cd 04-routing +``` +Start receiver and emitter in separate shells: +``` +cargo run --bin receive info error # specify log levels +cargo run --bin emit-direct error "help!" # specify severity and custom message +``` #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) // TODO From 89d1f348a860396576c60ea01c08dccdaf58f5c0 Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 20:58:12 +0300 Subject: [PATCH 139/659] Rust: Tutorial 5 - Topics --- rust/05-topics/Cargo.lock | 1250 +++++++++++++++++++++++ rust/05-topics/Cargo.toml | 16 + rust/05-topics/src/bin/emit-topic.rs | 62 ++ rust/05-topics/src/bin/receive-topic.rs | 103 ++ rust/README.md | 16 +- 5 files changed, 1439 insertions(+), 8 deletions(-) create mode 100644 rust/05-topics/Cargo.lock create mode 100644 rust/05-topics/Cargo.toml create mode 100644 rust/05-topics/src/bin/emit-topic.rs create mode 100644 rust/05-topics/src/bin/receive-topic.rs diff --git a/rust/05-topics/Cargo.lock b/rust/05-topics/Cargo.lock new file mode 100644 index 00000000..3456df2a --- /dev/null +++ b/rust/05-topics/Cargo.lock @@ -0,0 +1,1250 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-codegen" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "amq-protocol-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "backtrace" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie-factory" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crossbeam-deque" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "failure" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "handlebars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-async" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lapin-futures" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.58" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nom" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_derive" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.15.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-trace-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-uds" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tutorial-05" +version = "0.1.0" +dependencies = [ + "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" +"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" +"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" +"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" +"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" +"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" +"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" +"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" +"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" +"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" +"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" +"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" +"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" +"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" +"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" +"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" +"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" +"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" +"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" +"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" +"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" +"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" +"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" +"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" +"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" +"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" +"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" +"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/05-topics/Cargo.toml b/rust/05-topics/Cargo.toml new file mode 100644 index 00000000..19fc5261 --- /dev/null +++ b/rust/05-topics/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "tutorial-05" +version = "0.1.0" +authors = ["Adel Vilkov "] +edition = "2018" + +[dependencies] +failure = "^0.1" +futures = "^0.1" +itertools = "^0.8.0" +lapin-futures = "^0.18" +tokio = "^0.1.8" +tokio-codec = "^0.1" +tokio-io = "^0.1" +tokio-sync = "^0.1" +tokio-timer = "^0.2" diff --git a/rust/05-topics/src/bin/emit-topic.rs b/rust/05-topics/src/bin/emit-topic.rs new file mode 100644 index 00000000..da6891b4 --- /dev/null +++ b/rust/05-topics/src/bin/emit-topic.rs @@ -0,0 +1,62 @@ +use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use itertools::free::join; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let topic = match args.len() { + 0 => "anonymous.info".to_string(), + _ => args.first().unwrap().clone(), + }; + let message = match args.len() { + x if x < 2 => "Hello, world!".to_string(), + _ => join(args[1..].iter(), " "), + }; + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel + .and_then(move |c| { + let channel = c.clone(); + channel + // declare a new exchange + .exchange_declare( + "topic_logs", + "topic", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + .and_then(move |ch| { + // if successful, send a message + ch.basic_publish( + "topic_logs", + &topic, + message.as_bytes().to_vec(), + BasicPublishOptions::default(), + BasicProperties::default(), + ) + .map(|_| println!("Sent a message")) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/05-topics/src/bin/receive-topic.rs b/rust/05-topics/src/bin/receive-topic.rs new file mode 100644 index 00000000..7d3dedf5 --- /dev/null +++ b/rust/05-topics/src/bin/receive-topic.rs @@ -0,0 +1,103 @@ +use crate::lapin::channel::{ + BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, +}; +use crate::lapin::client::ConnectionOptions; +use crate::lapin::types::FieldTable; +use failure::Error; +use futures::future::Future; +use futures::stream::Stream; +use lapin_futures as lapin; +use tokio; +use tokio::net::TcpStream; +use tokio::runtime::Runtime; + +use lapin::client::Client as AMQPClient; + +fn main() { + let addr = "127.0.0.1:5672".parse().unwrap(); + + Runtime::new() + .unwrap() + .block_on_all( + TcpStream::connect(&addr) // try to initiate a TCP connection + .map_err(Error::from) + .and_then(|stream| { + // if successful, pass it to AMQP client + AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) + }) + .and_then(|(client, heartbeat)| { + // do a heartbeat on a dedicated thread to keep us connected + tokio::spawn(heartbeat.map_err(|_| ())); + // create a channel + client.create_channel().map_err(Error::from) + }) + .and_then(|c| { + let channel = c.clone(); + // generate an queue with a random name which deletes itself after use + let queue_options = QueueDeclareOptions { + durable: false, + exclusive: true, + auto_delete: true, + nowait: false, + passive: false, + ticket: 0u16, + }; + channel + .exchange_declare( + "topic_logs", + "topic", + ExchangeDeclareOptions::default(), + FieldTable::new(), + ) + .map(move |_| channel.clone()) + // declare a queue + .and_then(move |ch| { + // declare a queue using specified options + // if name is empty it will be generated + ch.queue_declare("", queue_options, FieldTable::new()) + .map(move |queue| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // bind our queue to declared exchange + let name = queue.name(); + let c = ch.clone(); + let args: Vec<_> = std::env::args().skip(1).collect(); + let topics = match args.len() { + 0 => vec!["anonymous.info".to_string()], + _ => args, + }; + let binds = topics.into_iter().map(move |topic| { + c.queue_bind( + &name, + "topic_logs", + &topic, + QueueBindOptions::default(), + FieldTable::new(), + ) + }); + futures::future::join_all(binds).map(move |_| (ch.clone(), queue)) + }) + .and_then(move |(ch, queue)| { + // create a message receiver + ch.basic_consume( + &queue, + "consumer", + BasicConsumeOptions::default(), + FieldTable::new(), + ) + .map(move |s| (ch.clone(), s)) + }) + .and_then(move |(ch, stream)| { + // print received messages + stream.for_each(move |message| { + let topic = &message.routing_key; + let text = std::str::from_utf8(&message.data).unwrap(); + println!("Received: [{:?}] {:?}", topic, text); + ch.basic_ack(message.delivery_tag, false) + }) + }) + .map_err(Error::from) + }), + ) + .expect("Failed to create tokio runtime"); +} diff --git a/rust/README.md b/rust/README.md index 63deba5a..d7ecf7a1 100644 --- a/rust/README.md +++ b/rust/README.md @@ -13,13 +13,12 @@ To successfully use the examples you will need a running RabbitMQ server. ## Code Each tutorial is a separate crate where each source file corresponds to a -binary executable. +binary executable. Each cargo command should be launched in a separate shell. #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) ``` cd 01-hello-world ``` -Start receiver and sender in two separate shells: ``` cargo run --bin receive cargo run --bin send @@ -29,7 +28,6 @@ cargo run --bin send ``` cd 02-work-queues ``` -Start workers and task creator in separate shells: ``` cargo run --bin worker cargo run --bin new-task "hi" # specify a custom message @@ -39,7 +37,6 @@ cargo run --bin new-task "hi" # specify a custom message ``` cd 03-publish-subscribe ``` -Start receiver and emitter in separate shells: ``` cargo run --bin receive cargo run --bin emit "hi" # specify a custom message @@ -49,14 +46,17 @@ cargo run --bin emit "hi" # specify a custom message ``` cd 04-routing ``` -Start receiver and emitter in separate shells: ``` cargo run --bin receive info error # specify log levels cargo run --bin emit-direct error "help!" # specify severity and custom message ``` #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) -// TODO - -#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) +``` +cd 05-topics +``` +``` +cargo run --bin receive-topic kern.* # specify topic filter +cargo run --bin emit-topic kern.mem "No memory left!" # specify topic and message +``` From 2bd26d0962cb09c2bd905bb308fe1d0b8e07409b Mon Sep 17 00:00:00 2001 From: Adel Vilkov Date: Tue, 4 Jun 2019 21:03:17 +0300 Subject: [PATCH 140/659] Rust: Renaming and readme cleanup --- rust/03-publish-subscribe/src/bin/{emit.rs => publish.rs} | 0 .../src/bin/{receive.rs => subscribe.rs} | 0 rust/04-routing/src/bin/{receive.rs => receive-direct.rs} | 0 rust/README.md | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) rename rust/03-publish-subscribe/src/bin/{emit.rs => publish.rs} (100%) rename rust/03-publish-subscribe/src/bin/{receive.rs => subscribe.rs} (100%) rename rust/04-routing/src/bin/{receive.rs => receive-direct.rs} (100%) diff --git a/rust/03-publish-subscribe/src/bin/emit.rs b/rust/03-publish-subscribe/src/bin/publish.rs similarity index 100% rename from rust/03-publish-subscribe/src/bin/emit.rs rename to rust/03-publish-subscribe/src/bin/publish.rs diff --git a/rust/03-publish-subscribe/src/bin/receive.rs b/rust/03-publish-subscribe/src/bin/subscribe.rs similarity index 100% rename from rust/03-publish-subscribe/src/bin/receive.rs rename to rust/03-publish-subscribe/src/bin/subscribe.rs diff --git a/rust/04-routing/src/bin/receive.rs b/rust/04-routing/src/bin/receive-direct.rs similarity index 100% rename from rust/04-routing/src/bin/receive.rs rename to rust/04-routing/src/bin/receive-direct.rs diff --git a/rust/README.md b/rust/README.md index d7ecf7a1..312176f6 100644 --- a/rust/README.md +++ b/rust/README.md @@ -5,7 +5,7 @@ tutorials](https://www.rabbitmq.com/getstarted.html). The examples use [lapin](https://github.com/sozu-proxy/lapin) client library. -To successfully use the examples you will need a running RabbitMQ server. +You should have a RabbitMQ server running on default port. ## Requirements @@ -38,8 +38,8 @@ cargo run --bin new-task "hi" # specify a custom message cd 03-publish-subscribe ``` ``` -cargo run --bin receive -cargo run --bin emit "hi" # specify a custom message +cargo run --bin subscribe +cargo run --bin publish "hi" # specify a custom message ``` #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) @@ -47,7 +47,7 @@ cargo run --bin emit "hi" # specify a custom message cd 04-routing ``` ``` -cargo run --bin receive info error # specify log levels +cargo run --bin receive-direct info error # specify log levels cargo run --bin emit-direct error "help!" # specify severity and custom message ``` From a814c87513bd4501340d823e0ef693241141986c Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 5 Jun 2019 00:57:15 +0300 Subject: [PATCH 141/659] Link to the new Rust port in README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6c0c1a7f..b5f3f4f3 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ The following ports are available: * [Perl](./perl) * [Python (with Pika)](./python) * [Ruby (with Bunny)](./ruby) + * [Rust](./rust) * [Scala](./scala) * [Swift](./swift) * [Spring AMQP](./spring-amqp) From ea20da72cc92ed8678ca41c617ad08ec963a232e Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 7 Jun 2019 10:50:59 -0700 Subject: [PATCH 142/659] Explicitly use queue parameter name Part of rabbitmq/rabbitmq-website#780 --- python/receive_logs.py | 2 +- python/receive_logs_direct.py | 2 +- python/receive_logs_topic.py | 2 +- python/rpc_client.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/receive_logs.py b/python/receive_logs.py index fd92f358..fd9bbfb6 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -7,7 +7,7 @@ channel.exchange_declare(exchange='logs', exchange_type='fanout') -result = channel.queue_declare('', exclusive=True) +result = channel.queue_declare(queue='', exclusive=True) queue_name = result.method.queue channel.queue_bind(exchange='logs', queue=queue_name) diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index 25a30649..91128e80 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -8,7 +8,7 @@ channel.exchange_declare(exchange='direct_logs', exchange_type='direct') -result = channel.queue_declare('', exclusive=True) +result = channel.queue_declare(queue='', exclusive=True) queue_name = result.method.queue severities = sys.argv[1:] diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index bb474201..a7255a7a 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -8,7 +8,7 @@ channel.exchange_declare(exchange='topic_logs', exchange_type='topic') -result = channel.queue_declare('', exclusive=True) +result = channel.queue_declare(queue='', exclusive=True) queue_name = result.method.queue binding_keys = sys.argv[1:] diff --git a/python/rpc_client.py b/python/rpc_client.py index 4b47c409..c31ec26b 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -11,7 +11,7 @@ def __init__(self): self.channel = self.connection.channel() - result = self.channel.queue_declare('', exclusive=True) + result = self.channel.queue_declare(queue='', exclusive=True) self.callback_queue = result.method.queue self.channel.basic_consume( From b9ed48f672150b4324cf786403acfbaf66a00708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 13 Jun 2019 14:41:17 +0200 Subject: [PATCH 143/659] Bump dependencies in Java tutorials --- java-mvn/pom.xml | 4 ++-- java/recompile.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 14be8e41..4dd6b676 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,12 +20,12 @@ com.rabbitmq amqp-client - (5.5.0,) + 5.7.1 org.slf4j slf4j-simple - 1.7.25 + 1.7.26 diff --git a/java/recompile.sh b/java/recompile.sh index 42bc6309..e3ff2fd7 100755 --- a/java/recompile.sh +++ b/java/recompile.sh @@ -1,3 +1,3 @@ #!/bin/sh -javac -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar *.java +javac -cp .:amqp-client-5.7.1.jar:slf4j-api-1.7.26.jar:slf4j-simple-1.7.26.jar *.java From cb28bb344be93e4606634cc38683576e0a2e35e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 13 Jun 2019 15:26:18 +0200 Subject: [PATCH 144/659] Add directory for Intellij IDEA --- java-idea/.idea/.name | 1 + java-idea/.idea/libraries/lib.xml | 11 +++++++ java-idea/.idea/misc.xml | 6 ++++ java-idea/.idea/modules.xml | 8 +++++ java-idea/.idea/vcs.xml | 6 ++++ java-idea/.idea/workspace.xml | 41 ++++++++++++++++++++++++++ java-idea/lib/amqp-client-5.7.1.jar | Bin 0 -> 608566 bytes java-idea/lib/slf4j-api-1.7.26.jar | Bin 0 -> 41139 bytes java-idea/lib/slf4j-simple-1.7.26.jar | Bin 0 -> 15206 bytes java-idea/src/EmitLog.java | 1 + java-idea/src/EmitLogDirect.java | 1 + java-idea/src/EmitLogHeader.java | 1 + java-idea/src/EmitLogTopic.java | 1 + java-idea/src/NewTask.java | 1 + java-idea/src/RPCClient.java | 1 + java-idea/src/RPCServer.java | 1 + java-idea/src/ReceiveLogHeader.java | 1 + java-idea/src/ReceiveLogs.java | 1 + java-idea/src/ReceiveLogsDirect.java | 1 + java-idea/src/ReceiveLogsTopic.java | 1 + java-idea/src/Recv.java | 1 + java-idea/src/Send.java | 1 + java-idea/src/Worker.java | 1 + 23 files changed, 87 insertions(+) create mode 100644 java-idea/.idea/.name create mode 100644 java-idea/.idea/libraries/lib.xml create mode 100644 java-idea/.idea/misc.xml create mode 100644 java-idea/.idea/modules.xml create mode 100644 java-idea/.idea/vcs.xml create mode 100644 java-idea/.idea/workspace.xml create mode 100644 java-idea/lib/amqp-client-5.7.1.jar create mode 100644 java-idea/lib/slf4j-api-1.7.26.jar create mode 100644 java-idea/lib/slf4j-simple-1.7.26.jar create mode 120000 java-idea/src/EmitLog.java create mode 120000 java-idea/src/EmitLogDirect.java create mode 120000 java-idea/src/EmitLogHeader.java create mode 120000 java-idea/src/EmitLogTopic.java create mode 120000 java-idea/src/NewTask.java create mode 120000 java-idea/src/RPCClient.java create mode 120000 java-idea/src/RPCServer.java create mode 120000 java-idea/src/ReceiveLogHeader.java create mode 120000 java-idea/src/ReceiveLogs.java create mode 120000 java-idea/src/ReceiveLogsDirect.java create mode 120000 java-idea/src/ReceiveLogsTopic.java create mode 120000 java-idea/src/Recv.java create mode 120000 java-idea/src/Send.java create mode 120000 java-idea/src/Worker.java diff --git a/java-idea/.idea/.name b/java-idea/.idea/.name new file mode 100644 index 00000000..7e8d4c0c --- /dev/null +++ b/java-idea/.idea/.name @@ -0,0 +1 @@ +rabbitmq-tutorials \ No newline at end of file diff --git a/java-idea/.idea/libraries/lib.xml b/java-idea/.idea/libraries/lib.xml new file mode 100644 index 00000000..23e162b2 --- /dev/null +++ b/java-idea/.idea/libraries/lib.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java-idea/.idea/misc.xml b/java-idea/.idea/misc.xml new file mode 100644 index 00000000..e208459b --- /dev/null +++ b/java-idea/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/java-idea/.idea/modules.xml b/java-idea/.idea/modules.xml new file mode 100644 index 00000000..d45e0804 --- /dev/null +++ b/java-idea/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/java-idea/.idea/vcs.xml b/java-idea/.idea/vcs.xml new file mode 100644 index 00000000..6c0b8635 --- /dev/null +++ b/java-idea/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/java-idea/.idea/workspace.xml b/java-idea/.idea/workspace.xml new file mode 100644 index 00000000..20f34f20 --- /dev/null +++ b/java-idea/.idea/workspace.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/java-idea/lib/amqp-client-5.7.1.jar b/java-idea/lib/amqp-client-5.7.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..d08756acf3ade00b7861e449b30e4afd978b4321 GIT binary patch literal 608566 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%0AMjV(Ylb$&)?c5xjEjM};5u|qZ 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≻Nu%82R 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 U4g_GH{miV%Zl0qIaJ(&+xX)KIom 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

N$ahG2eg8P4$1lTyv2srsXIP?t3E{$erJct@ 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 z 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%0DSHMVCyA;2!YCLz1Aac* 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%0Die0=a!f1h%_F_8+3`gMN%f* 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

5Ry(oLH8)<6IjMs&3mzQj2u_^XO(BE`&}G$ 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%0A!Q6n{F)<5jOMS6M28Vlwdq4umVW?pUzCS^c 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 literal 0 HcmV?d00001 diff --git a/java-idea/lib/slf4j-api-1.7.26.jar b/java-idea/lib/slf4j-api-1.7.26.jar new file mode 100644 index 0000000000000000000000000000000000000000..d2f27aceabc93c899bc4a39ba393aa74ec41d7b9 GIT binary patch literal 41139 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 QpuGMdynfID0rTjs+W-In literal 0 HcmV?d00001 diff --git a/java-idea/src/EmitLog.java b/java-idea/src/EmitLog.java new file mode 120000 index 00000000..32bc0191 --- /dev/null +++ b/java-idea/src/EmitLog.java @@ -0,0 +1 @@ +../../java/EmitLog.java \ No newline at end of file diff --git a/java-idea/src/EmitLogDirect.java b/java-idea/src/EmitLogDirect.java new file mode 120000 index 00000000..bc74d66c --- /dev/null +++ b/java-idea/src/EmitLogDirect.java @@ -0,0 +1 @@ +../../java/EmitLogDirect.java \ No newline at end of file diff --git a/java-idea/src/EmitLogHeader.java b/java-idea/src/EmitLogHeader.java new file mode 120000 index 00000000..0f9a266f --- /dev/null +++ b/java-idea/src/EmitLogHeader.java @@ -0,0 +1 @@ +../../java/EmitLogHeader.java \ No newline at end of file diff --git a/java-idea/src/EmitLogTopic.java b/java-idea/src/EmitLogTopic.java new file mode 120000 index 00000000..40c49659 --- /dev/null +++ b/java-idea/src/EmitLogTopic.java @@ -0,0 +1 @@ +../../java/EmitLogTopic.java \ No newline at end of file diff --git a/java-idea/src/NewTask.java b/java-idea/src/NewTask.java new file mode 120000 index 00000000..8e189155 --- /dev/null +++ b/java-idea/src/NewTask.java @@ -0,0 +1 @@ +../../java/NewTask.java \ No newline at end of file diff --git a/java-idea/src/RPCClient.java b/java-idea/src/RPCClient.java new file mode 120000 index 00000000..4f1d2e4d --- /dev/null +++ b/java-idea/src/RPCClient.java @@ -0,0 +1 @@ +../../java/RPCClient.java \ No newline at end of file diff --git a/java-idea/src/RPCServer.java b/java-idea/src/RPCServer.java new file mode 120000 index 00000000..5559abc4 --- /dev/null +++ b/java-idea/src/RPCServer.java @@ -0,0 +1 @@ +../../java/RPCServer.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogHeader.java b/java-idea/src/ReceiveLogHeader.java new file mode 120000 index 00000000..fd5d5b34 --- /dev/null +++ b/java-idea/src/ReceiveLogHeader.java @@ -0,0 +1 @@ +../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogs.java b/java-idea/src/ReceiveLogs.java new file mode 120000 index 00000000..7eaab189 --- /dev/null +++ b/java-idea/src/ReceiveLogs.java @@ -0,0 +1 @@ +../../java/ReceiveLogs.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsDirect.java b/java-idea/src/ReceiveLogsDirect.java new file mode 120000 index 00000000..033cd067 --- /dev/null +++ b/java-idea/src/ReceiveLogsDirect.java @@ -0,0 +1 @@ +../../java/ReceiveLogsDirect.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsTopic.java b/java-idea/src/ReceiveLogsTopic.java new file mode 120000 index 00000000..943ea267 --- /dev/null +++ b/java-idea/src/ReceiveLogsTopic.java @@ -0,0 +1 @@ +../../java/ReceiveLogsTopic.java \ No newline at end of file diff --git a/java-idea/src/Recv.java b/java-idea/src/Recv.java new file mode 120000 index 00000000..bd95286c --- /dev/null +++ b/java-idea/src/Recv.java @@ -0,0 +1 @@ +../../java/Recv.java \ No newline at end of file diff --git a/java-idea/src/Send.java b/java-idea/src/Send.java new file mode 120000 index 00000000..38371d99 --- /dev/null +++ b/java-idea/src/Send.java @@ -0,0 +1 @@ +../../java/Send.java \ No newline at end of file diff --git a/java-idea/src/Worker.java b/java-idea/src/Worker.java new file mode 120000 index 00000000..35bbea07 --- /dev/null +++ b/java-idea/src/Worker.java @@ -0,0 +1 @@ +../../java/Worker.java \ No newline at end of file From 7233339a9552efcd7f127837de1fa89320df65cc Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 13 Jun 2019 16:39:47 +0300 Subject: [PATCH 145/659] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b5f3f4f3..b1e7ca23 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,9 @@ The following ports are available: * [Haskell](./haskell) * [JavaScript (with Node and amqp-node)](./javascript-nodejs) (using callbacks) * [JavaScript (with Node and amqp-node)](https://github.com/squaremo/amqp.node/tree/master/examples) (using promises/futures) - * [Java](./java) + * [Java with Maven](./java-mvn) * [Java (with IntelliJ IDEA)](./java-idea) + * [Java](./java) (with manual dependency management) * [Kotlin](./kotlin) * [PHP (with php-amqplib)](./php) * [PHP (with php-amqp)](./php-amqp) From 3bbcec5e837629c1c81801ab1bae2e2eb06a40d9 Mon Sep 17 00:00:00 2001 From: Andrii Volin Date: Mon, 15 Jul 2019 09:54:00 +0300 Subject: [PATCH 146/659] update php tutorials: avoid usage of deprecated/internal stuff --- php/receive.php | 2 +- php/receive_logs.php | 2 +- php/receive_logs_direct.php | 2 +- php/receive_logs_topic.php | 2 +- php/rpc_server.php | 2 +- php/worker.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/php/receive.php b/php/receive.php index 98ea0552..cbaf5700 100644 --- a/php/receive.php +++ b/php/receive.php @@ -16,7 +16,7 @@ $channel->basic_consume('hello', '', false, true, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } diff --git a/php/receive_logs.php b/php/receive_logs.php index 8a5c8cb6..4b222b8d 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -20,7 +20,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index bbd59d9e..15288956 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -28,7 +28,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index 104cae12..57b7eb2d 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -28,7 +28,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } diff --git a/php/rpc_server.php b/php/rpc_server.php index 613a3908..cd644f0b 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -43,7 +43,7 @@ function fib($n) $channel->basic_qos(null, 1, null); $channel->basic_consume('rpc_queue', '', false, false, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } diff --git a/php/worker.php b/php/worker.php index 3dac06b8..7023d73d 100644 --- a/php/worker.php +++ b/php/worker.php @@ -20,7 +20,7 @@ $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); -while (count($channel->callbacks)) { +while ($channel->is_consuming()) { $channel->wait(); } From 671657df79b61bf5dce1b271b70fdd3223c7e5a3 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 18 Jul 2019 11:19:06 +0300 Subject: [PATCH 147/659] Bug fix The logic of tutorial which goes behind this line is "If you have more than 1 word to be sent, then mark the first as severity (the level of the log msg), and then everything else as the message itself". But with the current implementation, the first word always considered as severity even if no other words were given because `len(sys.argv) > 1` is true when at least one arg was given(then, the sys.argv contains the name of the file and the arg, and length=2) --- python/emit_log_direct.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index 802ef09a..cc5b7a3a 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -8,7 +8,7 @@ channel.exchange_declare(exchange='direct_logs', exchange_type='direct') -severity = sys.argv[1] if len(sys.argv) > 1 else 'info' +severity = sys.argv[1] if len(sys.argv) > 2 else 'info' message = ' '.join(sys.argv[2:]) or 'Hello World!' channel.basic_publish( exchange='direct_logs', routing_key=severity, body=message) From 79f9889ca2209c4c4a70f5210c811f28dd1bff4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Beraud?= Date: Mon, 5 Aug 2019 16:41:22 +0200 Subject: [PATCH 148/659] Bootstrapping the pip installer Prefer to use ensurepip instead of the deprecated easy_install https://docs.python.org/3/library/ensurepip.html https://setuptools.readthedocs.io/en/latest/easy_install.html --- Makefile | 2 +- python/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5e2a2eef..887a4074 100644 --- a/Makefile +++ b/Makefile @@ -93,7 +93,7 @@ PVER=0.10.0 python/.ok: (cd python && \ virtualenv venv && \ - ./venv/bin/easy_install pip && \ + ./venv/bin/python -m ensurepip && \ ./venv/bin/pip install pika==$(PVER) && \ touch .ok) clean:: diff --git a/python/README.md b/python/README.md index ec1db9a1..4cf2e17b 100644 --- a/python/README.md +++ b/python/README.md @@ -13,7 +13,7 @@ To run this code you need to install the `pika` package version `1.0.0` or later You may first need to run - easy_install pip + python -m ensurepip ## Code From 916b37beb0ef9d85a118bab87ec5fc631ffa800d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Beraud?= Date: Mon, 5 Aug 2019 18:38:14 +0200 Subject: [PATCH 149/659] Ensure to always use pip as a module of a given version of python Prefer to use pip as a module, it's avoid error and mistakes during package installation. With this approach we are always sure to to install dependencies in the right python environment. --- python/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/README.md b/python/README.md index 4cf2e17b..c901dfd1 100644 --- a/python/README.md +++ b/python/README.md @@ -9,7 +9,7 @@ To successfully use the examples you will need a running RabbitMQ server. To run this code you need to install the `pika` package version `1.0.0` or later. To install it, run - pip install pika + python -m pip install pika You may first need to run From db21fe7e7cc389b105df5781c296e44e971d22e2 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 5 Aug 2019 20:21:18 +0300 Subject: [PATCH 150/659] Revert "Bootstrapping the pip installer" --- Makefile | 2 +- python/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 887a4074..5e2a2eef 100644 --- a/Makefile +++ b/Makefile @@ -93,7 +93,7 @@ PVER=0.10.0 python/.ok: (cd python && \ virtualenv venv && \ - ./venv/bin/python -m ensurepip && \ + ./venv/bin/easy_install pip && \ ./venv/bin/pip install pika==$(PVER) && \ touch .ok) clean:: diff --git a/python/README.md b/python/README.md index 4cf2e17b..ec1db9a1 100644 --- a/python/README.md +++ b/python/README.md @@ -13,7 +13,7 @@ To run this code you need to install the `pika` package version `1.0.0` or later You may first need to run - python -m ensurepip + easy_install pip ## Code From 895291544b84b203c0435417ae365e824c17979c Mon Sep 17 00:00:00 2001 From: Jan Verhaeghe Date: Mon, 12 Aug 2019 14:34:49 +0200 Subject: [PATCH 151/659] feat: avoid using magic strings --- dotnet-visual-studio/3_EmitLog/Program.cs | 2 +- dotnet-visual-studio/3_ReceiveLogs/Program.cs | 2 +- dotnet/EmitLog/EmitLog.cs | 2 +- dotnet/ReceiveLogs/ReceiveLogs.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dotnet-visual-studio/3_EmitLog/Program.cs b/dotnet-visual-studio/3_EmitLog/Program.cs index 8e5a65e9..371d045e 100644 --- a/dotnet-visual-studio/3_EmitLog/Program.cs +++ b/dotnet-visual-studio/3_EmitLog/Program.cs @@ -10,7 +10,7 @@ public static void Main(string[] args) using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.ExchangeDeclare(exchange: "logs", type: "fanout"); + channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); diff --git a/dotnet-visual-studio/3_ReceiveLogs/Program.cs b/dotnet-visual-studio/3_ReceiveLogs/Program.cs index b01ef1aa..9451549e 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/Program.cs +++ b/dotnet-visual-studio/3_ReceiveLogs/Program.cs @@ -11,7 +11,7 @@ public static void Main() using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.ExchangeDeclare(exchange: "logs", type: "fanout"); + channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); diff --git a/dotnet/EmitLog/EmitLog.cs b/dotnet/EmitLog/EmitLog.cs index ec4a781c..e31a7362 100644 --- a/dotnet/EmitLog/EmitLog.cs +++ b/dotnet/EmitLog/EmitLog.cs @@ -10,7 +10,7 @@ public static void Main(string[] args) using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.ExchangeDeclare(exchange: "logs", type: "fanout"); + channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs index 67200ee2..000ee666 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet/ReceiveLogs/ReceiveLogs.cs @@ -11,7 +11,7 @@ public static void Main() using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.ExchangeDeclare(exchange: "logs", type: "fanout"); + channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); From abc31d8ac8bddb500bf9fbaec48773a13db8de6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 26 Aug 2019 14:30:59 +0200 Subject: [PATCH 152/659] Add Java files for publisher confirms tutorial --- java-idea/src/PublisherConfirms.java | 1 + java-mvn/pom.xml | 101 +++-- java-mvn/src/main/java/PublisherConfirms.java | 1 + .../src/test/java/PublisherConfirmsTest.java | 404 ++++++++++++++++++ java/PublisherConfirms.java | 138 ++++++ 5 files changed, 616 insertions(+), 29 deletions(-) create mode 120000 java-idea/src/PublisherConfirms.java create mode 120000 java-mvn/src/main/java/PublisherConfirms.java create mode 100644 java-mvn/src/test/java/PublisherConfirmsTest.java create mode 100644 java/PublisherConfirms.java diff --git a/java-idea/src/PublisherConfirms.java b/java-idea/src/PublisherConfirms.java new file mode 120000 index 00000000..2b5eec02 --- /dev/null +++ b/java-idea/src/PublisherConfirms.java @@ -0,0 +1 @@ +../../java/PublisherConfirms.java \ No newline at end of file diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4dd6b676..1714f2ff 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -1,31 +1,74 @@ - 4.0.0 - - com.rabbitmq - rabbitmq-tutorial - 1.0-SNAPSHOT - jar - - rabbitmq-tutorial - https://github.com/rabbitmq/rabbitmq-tutorials - - - UTF-8 - 1.8 - 1.8 - - - - - com.rabbitmq - amqp-client - 5.7.1 - - - org.slf4j - slf4j-simple - 1.7.26 - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + com.rabbitmq + rabbitmq-tutorial + 1.0-SNAPSHOT + jar + + rabbitmq-tutorial + https://github.com/rabbitmq/rabbitmq-tutorials + + + UTF-8 + 1.8 + 1.8 + + + + + com.rabbitmq + amqp-client + 5.7.1 + + + org.slf4j + slf4j-simple + 1.7.26 + + + + org.junit.jupiter + junit-jupiter + 5.5.1 + test + + + + io.dropwizard.metrics + metrics-core + 4.1.0 + test + + + + org.assertj + assertj-core + 3.13.2 + test + + + + org.mockito + mockito-core + 3.0.0 + test + + + + + + + + maven-compiler-plugin + 3.8.1 + + + maven-surefire-plugin + 2.22.2 + + + + diff --git a/java-mvn/src/main/java/PublisherConfirms.java b/java-mvn/src/main/java/PublisherConfirms.java new file mode 120000 index 00000000..543c9ceb --- /dev/null +++ b/java-mvn/src/main/java/PublisherConfirms.java @@ -0,0 +1 @@ +../../../../java/PublisherConfirms.java \ No newline at end of file diff --git a/java-mvn/src/test/java/PublisherConfirmsTest.java b/java-mvn/src/test/java/PublisherConfirmsTest.java new file mode 100644 index 00000000..e92c3eea --- /dev/null +++ b/java-mvn/src/test/java/PublisherConfirmsTest.java @@ -0,0 +1,404 @@ +import com.codahale.metrics.Meter; +import com.codahale.metrics.MetricRegistry; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.ConfirmCallback; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import org.junit.jupiter.api.*; + +import java.io.IOException; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BooleanSupplier; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +/** + * Tests to illustrate different ways to handle publisher confirms. + */ +public class PublisherConfirmsTest { + + private final MetricRegistry metrics = new MetricRegistry(); + private final Meter meter = metrics.meter("outbound-messages"); + Connection connection; + String queue; + int messageCount = 10_000; + + static boolean waitUntil(Duration timeout, BooleanSupplier condition) throws InterruptedException { + int waited = 0; + while (!condition.getAsBoolean() && waited < timeout.toMillis()) { + Thread.sleep(100L); + waited = +100; + } + return condition.getAsBoolean(); + } + + @BeforeEach + void init() throws Exception { + ConnectionFactory cf = new ConnectionFactory(); + cf.setHost("localhost"); + cf.setUsername("guest"); + cf.setPassword("guest"); + connection = cf.newConnection(); + queue = UUID.randomUUID().toString(); + try (Channel ch = connection.createChannel()) { + ch.queueDeclare(queue, false, false, true, null); + } + } + + @AfterEach + void tearDown(TestInfo testInfo) throws Exception { + System.out.println(String.format("%s: %.0f messages/second", testInfo.getDisplayName(), meter.getMeanRate())); + connection.close(10_000); + } + + @Test + @DisplayName("publish messages individually") + void publishMessagesIndividually() throws Exception { + Channel ch = connection.createChannel(); + ch.confirmSelect(); + for (int i = 0; i < messageCount; i++) { + String body = String.valueOf(i); + ch.basicPublish("", queue, null, body.getBytes()); + ch.waitForConfirmsOrDie(5_000); + meter.mark(); + } + ch.close(); + + CountDownLatch latch = new CountDownLatch(messageCount); + ch = connection.createChannel(); + ch.basicConsume(queue, true, ((consumerTag, message) -> latch.countDown()), consumerTag -> { + }); + + assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue(); + } + + @Test + @DisplayName("publish messages in batch") + void publishMessagesInBatch() throws Exception { + Channel ch = connection.createChannel(); + ch.confirmSelect(); + int batchSize = 100; + int outstandingMessageCount = 0; + for (int i = 0; i < messageCount; i++) { + String body = String.valueOf(i); + ch.basicPublish("", queue, null, body.getBytes()); + outstandingMessageCount++; + + if (outstandingMessageCount == batchSize) { + ch.waitForConfirmsOrDie(5_000); + outstandingMessageCount = 0; + } + meter.mark(); + } + + if (outstandingMessageCount > 0) { + ch.waitForConfirmsOrDie(5_000); + } + + ch.close(); + + CountDownLatch latch = new CountDownLatch(messageCount); + ch = connection.createChannel(); + ch.basicConsume(queue, true, ((consumerTag, message) -> latch.countDown()), consumerTag -> { + }); + + assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue(); + } + + @Test + @DisplayName("allow max of outstanding confirms") + void allowMaxOfOutstandingConfirms() throws Exception { + int maxOutstandingConfirms = 100; + Semaphore semaphore = new Semaphore(maxOutstandingConfirms); + Channel ch = connection.createChannel(); + ch.confirmSelect(); + ConcurrentSkipListSet outstandingConfirms = new ConcurrentSkipListSet<>(); + ConfirmCallback handleConfirm = (deliveryTag, multiple) -> { + if (multiple) { + NavigableSet confirmed = outstandingConfirms.headSet(deliveryTag, true); + int confirmedSize = confirmed.size(); + confirmed.clear(); + semaphore.release(confirmedSize); + } else { + outstandingConfirms.remove(deliveryTag); + semaphore.release(); + } + }; + ch.addConfirmListener(handleConfirm, handleConfirm); + for (int i = 0; i < messageCount; i++) { + String body = String.valueOf(i); + boolean acquired = semaphore.tryAcquire(10, TimeUnit.SECONDS); + if (!acquired) { + throw new IllegalStateException("Could not publish because of too many outstanding publisher confirms"); + } + outstandingConfirms.add(ch.getNextPublishSeqNo()); + ch.basicPublish("", queue, null, body.getBytes()); + meter.mark(); + } + assertThat(waitUntil(Duration.ofSeconds(5), () -> outstandingConfirms.isEmpty())).isTrue(); + ch.close(); + + CountDownLatch latch = new CountDownLatch(messageCount); + ch = connection.createChannel(); + ch.basicConsume(queue, true, ((consumerTag, message) -> latch.countDown()), consumerTag -> { + }); + + assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue(); + } + + @Test + @DisplayName("resend unconfirmed messages") + void resendUnconfirmedMessagesIntegration() throws Exception { + Channel ch = connection.createChannel(); + ch.confirmSelect(); + Map outstandingConfirms = resendUnconfirmedMessages(ch); + assertThat(waitUntil(Duration.ofSeconds(5), () -> outstandingConfirms.isEmpty())).isTrue(); + ch.close(); + + Set receivedMessages = ConcurrentHashMap.newKeySet(messageCount); + CountDownLatch latch = new CountDownLatch(messageCount); + ch = connection.createChannel(); + ch.basicConsume(queue, true, ((consumerTag, message) -> { + receivedMessages.add(new String(message.getBody())); + latch.countDown(); + }), consumerTag -> { + }); + + assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue(); + assertThat(receivedMessages).hasSize(messageCount); + } + + @Test + @DisplayName("resend unconfirmed messages (mock)") + void resendUnconfirmedMessagesMock() throws Exception { + Channel ch = mock(Channel.class); + + Set receivedMessages = configureMockServer(ch); + + resendUnconfirmedMessages(ch); + + assertThat(receivedMessages).hasSize(messageCount); + } + + @Test + @DisplayName("resend unconfirmed messages with lower bound and map confirm handling") + void resendUnconfirmedMessagesUseLowerBoundAndConcurrentMapIntegration() throws Exception { + Channel ch = connection.createChannel(); + ch.confirmSelect(); + Map outstandingConfirms = resendUnconfirmedMessagesUseLowerBoundAndConcurrentMap(ch); + assertThat(waitUntil(Duration.ofSeconds(5), () -> outstandingConfirms.isEmpty())).isTrue(); + ch.close(); + + Set receivedMessages = ConcurrentHashMap.newKeySet(messageCount); + CountDownLatch latch = new CountDownLatch(messageCount); + ch = connection.createChannel(); + ch.basicConsume(queue, true, ((consumerTag, message) -> { + receivedMessages.add(new String(message.getBody())); + latch.countDown(); + }), consumerTag -> { + }); + + assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue(); + assertThat(receivedMessages).hasSize(messageCount); + } + + @Test + @DisplayName("resend unconfirmed messages with lower bound and map confirm handling (mock)") + void resendUnconfirmedMessagesUseLowerBoundAndConcurrentMapMock() throws Exception { + Channel ch = mock(Channel.class); + + Set receivedMessages = configureMockServer(ch); + + resendUnconfirmedMessagesUseLowerBoundAndConcurrentMap(ch); + + assertThat(receivedMessages).hasSize(messageCount); + } + + /** + * Configure a mock channel that will publish to a server-like threads. + * The fake server will send publisher confirms notification (ack, nack, multiple + * or not) randomly. + * Allows to test publisher confirms handling in a reliable way. + */ + private Set configureMockServer(Channel ch) throws IOException { + AtomicLong clientPublishingSequence = new AtomicLong(0); + when(ch.getNextPublishSeqNo()).thenAnswer(invocationOnMock -> clientPublishingSequence.getAndIncrement()); + BlockingQueue messagesSentToServer = new LinkedBlockingQueue<>(); + doAnswer(invocation -> { + messagesSentToServer.offer(new String(invocation.getArgument(3, byte[].class))); + return null; + }).when(ch).basicPublish(anyString(), anyString(), isNull(), any(byte[].class)); + AtomicReference handleAckReference = new AtomicReference<>(); + AtomicReference handleNackReference = new AtomicReference<>(); + doAnswer(invocation -> { + handleAckReference.set(invocation.getArgument(0, ConfirmCallback.class)); + handleNackReference.set(invocation.getArgument(1, ConfirmCallback.class)); + return null; + }).when(ch).addConfirmListener(any(ConfirmCallback.class), any(ConfirmCallback.class)); + + Set receivedMessages = ConcurrentHashMap.newKeySet(messageCount); + new Thread(() -> { + AtomicLong serverPublishingSequence = new AtomicLong(0); + Random random = new Random(); + int outstandingMultiple = 0; + while (true) { + try { + String body = messagesSentToServer.poll(10, TimeUnit.SECONDS); + receivedMessages.add(body); + long messageSequenceNumber = serverPublishingSequence.getAndIncrement(); + if (outstandingMultiple == 0) { + // no outstanding multiple + boolean multiple = random.nextBoolean(); + if (multiple) { + outstandingMultiple = random.nextInt(10) + 1; + } else { + if (random.nextInt(100) < 5) { + handleNackReference.get().handle(messageSequenceNumber, false); + } else { + handleAckReference.get().handle(messageSequenceNumber, false); + } + } + } else if (outstandingMultiple == 1) { + // last outstanding acking/nacking + if (random.nextInt(100) < 5) { + handleNackReference.get().handle(messageSequenceNumber, true); + } else { + handleAckReference.get().handle(messageSequenceNumber, true); + } + outstandingMultiple = 0; + } else { + outstandingMultiple--; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + return receivedMessages; + } + + Map resendUnconfirmedMessages(Channel ch) throws Exception { + ConcurrentNavigableMap outstandingConfirms = new ConcurrentSkipListMap<>(); + ch.confirmSelect(); + + ConfirmCallback handleAck = (deliveryTag, multiple) -> { + if (multiple) { + ConcurrentNavigableMap confirmed = outstandingConfirms.headMap(deliveryTag, true); + confirmed.clear(); + } else { + outstandingConfirms.remove(deliveryTag); + } + }; + + Queue nackedMessages = new ConcurrentLinkedQueue<>(); + ConfirmCallback handleNack = (deliveryTag, multiple) -> { + if (multiple) { + ConcurrentNavigableMap nacked = outstandingConfirms.headMap(deliveryTag, true); + for (String body : nacked.values()) { + nackedMessages.offer(body); + } + nacked.clear(); + } else { + nackedMessages.add(outstandingConfirms.get(deliveryTag)); + outstandingConfirms.remove(deliveryTag); + } + }; + + ch.addConfirmListener(handleAck, handleNack); + + for (int i = 0; i < messageCount; i++) { + String body = String.valueOf(i); + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + meter.mark(); + if (!nackedMessages.isEmpty()) { + while ((body = nackedMessages.poll()) != null) { + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + } + } + while (!outstandingConfirms.isEmpty() && !nackedMessages.isEmpty()) { + String body; + while ((body = nackedMessages.poll()) != null) { + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + } + return outstandingConfirms; + } + + Map resendUnconfirmedMessagesUseLowerBoundAndConcurrentMap(Channel ch) throws Exception { + Map outstandingConfirms = new ConcurrentHashMap<>(); + AtomicLong multipleLowerBound = new AtomicLong(1); + ch.confirmSelect(); + + ConfirmCallback handleAck = (deliveryTag, multiple) -> { + Long lowerBound = multipleLowerBound.get(); + if (multiple) { + for (long i = lowerBound; i <= deliveryTag; i++) { + outstandingConfirms.remove(i); + } + multipleLowerBound.compareAndSet(lowerBound, deliveryTag); + } else { + outstandingConfirms.remove(deliveryTag); + if (deliveryTag == lowerBound + 1) { + multipleLowerBound.compareAndSet(lowerBound, deliveryTag); + } + } + }; + + Queue nackedMessages = new ConcurrentLinkedQueue<>(); + ConfirmCallback handleNack = (deliveryTag, multiple) -> { + Long lowerBound = multipleLowerBound.get(); + if (multiple) { + for (long i = lowerBound; i <= deliveryTag; i++) { + String body = outstandingConfirms.remove(i); + if (body != null) { + nackedMessages.offer(body); + } + } + } else { + String body = outstandingConfirms.remove(deliveryTag); + if (body != null) { + nackedMessages.offer(body); + } + if (deliveryTag == lowerBound + 1) { + multipleLowerBound.compareAndSet(lowerBound, deliveryTag); + } + } + }; + + ch.addConfirmListener(handleAck, handleNack); + + for (int i = 0; i < messageCount; i++) { + String body = String.valueOf(i); + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + meter.mark(); + if (!nackedMessages.isEmpty()) { + while ((body = nackedMessages.poll()) != null) { + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + } + } + while (!outstandingConfirms.isEmpty() && !nackedMessages.isEmpty()) { + String body; + while ((body = nackedMessages.poll()) != null) { + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + } + return outstandingConfirms; + } + + +} diff --git a/java/PublisherConfirms.java b/java/PublisherConfirms.java new file mode 100644 index 00000000..61f83be4 --- /dev/null +++ b/java/PublisherConfirms.java @@ -0,0 +1,138 @@ +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.ConfirmCallback; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; + +import java.time.Duration; +import java.util.UUID; +import java.util.concurrent.ConcurrentNavigableMap; +import java.util.concurrent.ConcurrentSkipListMap; +import java.util.function.BooleanSupplier; + +public class PublisherConfirms { + + static final int MESSAGE_COUNT = 50_000; + + static Connection createConnection() throws Exception { + ConnectionFactory cf = new ConnectionFactory(); + cf.setHost("localhost"); + cf.setUsername("guest"); + cf.setPassword("guest"); + return cf.newConnection(); + } + + public static void main(String[] args) throws Exception { + publishMessagesIndividually(); + publishMessagesInBatch(); + handlePublishConfirmsAsynchronously(); + } + + static void publishMessagesIndividually() throws Exception { + try (Connection connection = createConnection()) { + Channel ch = connection.createChannel(); + + String queue = UUID.randomUUID().toString(); + ch.queueDeclare(queue, false, false, true, null); + + ch.confirmSelect(); + long start = System.nanoTime(); + for (int i = 0; i < MESSAGE_COUNT; i++) { + String body = String.valueOf(i); + ch.basicPublish("", queue, null, body.getBytes()); + ch.waitForConfirmsOrDie(5_000); + } + long end = System.nanoTime(); + System.out.format("Published %,d messages individually in %,d ms%n", MESSAGE_COUNT, Duration.ofNanos(end - start).toMillis()); + } + } + + static void publishMessagesInBatch() throws Exception { + try (Connection connection = createConnection()) { + Channel ch = connection.createChannel(); + + String queue = UUID.randomUUID().toString(); + ch.queueDeclare(queue, false, false, true, null); + + ch.confirmSelect(); + + int batchSize = 100; + int outstandingMessageCount = 0; + + long start = System.nanoTime(); + for (int i = 0; i < MESSAGE_COUNT; i++) { + String body = String.valueOf(i); + ch.basicPublish("", queue, null, body.getBytes()); + outstandingMessageCount++; + + if (outstandingMessageCount == batchSize) { + ch.waitForConfirmsOrDie(5_000); + outstandingMessageCount = 0; + } + } + + if (outstandingMessageCount > 0) { + ch.waitForConfirmsOrDie(5_000); + } + long end = System.nanoTime(); + System.out.format("Published %,d messages in batch in %,d ms%n", MESSAGE_COUNT, Duration.ofNanos(end - start).toMillis()); + } + } + + static void handlePublishConfirmsAsynchronously() throws Exception { + try (Connection connection = createConnection()) { + Channel ch = connection.createChannel(); + + String queue = UUID.randomUUID().toString(); + ch.queueDeclare(queue, false, false, true, null); + + ch.confirmSelect(); + + ConcurrentNavigableMap outstandingConfirms = new ConcurrentSkipListMap<>(); + + ConfirmCallback cleanOutstandingConfirms = (sequenceNumber, multiple) -> { + if (multiple) { + ConcurrentNavigableMap confirmed = outstandingConfirms.headMap( + sequenceNumber, true + ); + confirmed.clear(); + } else { + outstandingConfirms.remove(sequenceNumber); + } + }; + + ch.addConfirmListener(cleanOutstandingConfirms, (sequenceNumber, multiple) -> { + String body = outstandingConfirms.get(sequenceNumber); + System.err.format( + "Message with body %s has been nack-ed. Sequence number: %d, multiple: %b%n", + body, sequenceNumber, multiple + ); + cleanOutstandingConfirms.handle(sequenceNumber, multiple); + }); + + long start = System.nanoTime(); + for (int i = 0; i < MESSAGE_COUNT; i++) { + String body = String.valueOf(i); + ch.basicPublish("", queue, null, body.getBytes()); + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + + if (!waitUntil(Duration.ofSeconds(60), () -> outstandingConfirms.isEmpty())) { + throw new IllegalStateException("All messages could not be confirmed in 60 seconds"); + } + + long end = System.nanoTime(); + System.out.format("Published %,d messages and handled confirms asynchronously in %,d ms%n", MESSAGE_COUNT, Duration.ofNanos(end - start).toMillis()); + } + } + + static boolean waitUntil(Duration timeout, BooleanSupplier condition) throws InterruptedException { + int waited = 0; + while (!condition.getAsBoolean() && waited < timeout.toMillis()) { + Thread.sleep(100L); + waited = +100; + } + return condition.getAsBoolean(); + } + +} From 5985fe7da7c72b89a03548d04e97d4616cb76fc7 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Fri, 13 Sep 2019 11:30:15 -0600 Subject: [PATCH 153/659] Remove extra publish in `handlePublishConfirmsAsynchronously` --- java/PublisherConfirms.java | 1 - 1 file changed, 1 deletion(-) diff --git a/java/PublisherConfirms.java b/java/PublisherConfirms.java index 61f83be4..b32a06e5 100644 --- a/java/PublisherConfirms.java +++ b/java/PublisherConfirms.java @@ -112,7 +112,6 @@ static void handlePublishConfirmsAsynchronously() throws Exception { long start = System.nanoTime(); for (int i = 0; i < MESSAGE_COUNT; i++) { String body = String.valueOf(i); - ch.basicPublish("", queue, null, body.getBytes()); outstandingConfirms.put(ch.getNextPublishSeqNo(), body); ch.basicPublish("", queue, null, body.getBytes()); } From 0e846580b66acd4c061e8749b9f54f85a7a72f87 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Fri, 13 Sep 2019 16:09:43 -0600 Subject: [PATCH 154/659] dotnet example of PublisherConfirms --- dotnet/PublisherConfirms/Program.cs | 138 ++++++++++++++++++ .../PublisherConfirms.csproj | 15 ++ 2 files changed, 153 insertions(+) create mode 100644 dotnet/PublisherConfirms/Program.cs create mode 100644 dotnet/PublisherConfirms/PublisherConfirms.csproj diff --git a/dotnet/PublisherConfirms/Program.cs b/dotnet/PublisherConfirms/Program.cs new file mode 100644 index 00000000..aed7080a --- /dev/null +++ b/dotnet/PublisherConfirms/Program.cs @@ -0,0 +1,138 @@ +using RabbitMQ.Client; +using System; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Text; +using System.Linq; +using System.Threading; + +class PublisherConfirms +{ + private const int MESSAGE_COUNT = 50_000; + + public static void Main(string[] args) + { + PublishMessagesIndividually(); + PublishMessagesInBatch(); + HandlePublishConfirmsAsynchronously(); + } + + private static IConnection CreateConnection() + { + var factory = new ConnectionFactory { HostName = "localhost" }; + return factory.CreateConnection(); + } + + private static void PublishMessagesIndividually() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + } + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static void PublishMessagesInBatch() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var batchSize = 100; + var outstandingMessageCount = 0; + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + outstandingMessageCount++; + + if (outstandingMessageCount == batchSize) + { + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + outstandingMessageCount = 0; + } + } + + if (outstandingMessageCount > 0) + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static void HandlePublishConfirmsAsynchronously() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var outstandingConfirms = new ConcurrentDictionary(); + + void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) + { + if (multiple) + { + var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); + foreach (var entry in confirmed) + outstandingConfirms.TryRemove(entry.Key, out _); + } + else + outstandingConfirms.TryRemove(sequenceNumber, out _); + } + + channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + channel.BasicNacks += (sender, ea) => + { + outstandingConfirms.TryGetValue(ea.DeliveryTag, out string body); + Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); + cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + }; + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = i.ToString(); + outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); + } + + if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) + throw new Exception("All messages could not be confirmed in 60 seconds"); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static bool WaitUntil(int numberOfSeconds, Func condition) + { + int waited = 0; + while(!condition() && waited < numberOfSeconds * 1000) + { + Thread.Sleep(100); + waited += 100; + } + + return condition(); + } +} \ No newline at end of file diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj new file mode 100644 index 00000000..5a3c05c8 --- /dev/null +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp2.1 + portable + PublisherConfirms + Exe + PublisherConfirms + + + + + + + From bed2740e65797e7721d2529a874556ae631ad0be Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Fri, 13 Sep 2019 16:10:31 -0600 Subject: [PATCH 155/659] rename file to PublisherConfirms --- dotnet/PublisherConfirms/{Program.cs => PublisherConfirms.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dotnet/PublisherConfirms/{Program.cs => PublisherConfirms.cs} (100%) diff --git a/dotnet/PublisherConfirms/Program.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs similarity index 100% rename from dotnet/PublisherConfirms/Program.cs rename to dotnet/PublisherConfirms/PublisherConfirms.cs From f15c3e8989ad9b344155bbee42c963e721116d23 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Fri, 13 Sep 2019 16:14:15 -0600 Subject: [PATCH 156/659] remove unnecessary args --- dotnet/PublisherConfirms/PublisherConfirms.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index aed7080a..6c3597b3 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -10,7 +10,7 @@ class PublisherConfirms { private const int MESSAGE_COUNT = 50_000; - public static void Main(string[] args) + public static void Main() { PublishMessagesIndividually(); PublishMessagesInBatch(); From 52fbbe8cb3d2ac8eb1f0579efbd833ef2bf81555 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Wed, 18 Sep 2019 15:46:19 -0600 Subject: [PATCH 157/659] Tutorial 7 PublisherConfirms --- .../7_PublisherConfirms.csproj | 60 ++++++ .../7_PublisherConfirms/App.config | 6 + .../7_PublisherConfirms/Program.cs | 138 ++++++++++++ .../Properties/AssemblyInfo.cs | 36 ++++ .../7_PublisherConfirms/packages.config | 5 + dotnet-visual-studio/RabbitMQ.Tutorials.sln | 199 +++++++++--------- 6 files changed, 349 insertions(+), 95 deletions(-) create mode 100644 dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj create mode 100644 dotnet-visual-studio/7_PublisherConfirms/App.config create mode 100644 dotnet-visual-studio/7_PublisherConfirms/Program.cs create mode 100644 dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs create mode 100644 dotnet-visual-studio/7_PublisherConfirms/packages.config diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj new file mode 100644 index 00000000..03c72189 --- /dev/null +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -0,0 +1,60 @@ + + + + + Debug + AnyCPU + {A46637FF-A028-4FF9-A70F-82CB32EC3A74} + Exe + _7_PublisherConfirms + 7_PublisherConfirms + v4.5.1 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll + + + ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/App.config b/dotnet-visual-studio/7_PublisherConfirms/App.config new file mode 100644 index 00000000..b8e61f74 --- /dev/null +++ b/dotnet-visual-studio/7_PublisherConfirms/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/Program.cs b/dotnet-visual-studio/7_PublisherConfirms/Program.cs new file mode 100644 index 00000000..81ab100b --- /dev/null +++ b/dotnet-visual-studio/7_PublisherConfirms/Program.cs @@ -0,0 +1,138 @@ +using RabbitMQ.Client; +using System; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Text; +using System.Linq; +using System.Threading; + +class PublisherConfirms +{ + private const int MESSAGE_COUNT = 50_000; + + public static void Main() + { + PublishMessagesIndividually(); + PublishMessagesInBatch(); + HandlePublishConfirmsAsynchronously(); + } + + private static IConnection CreateConnection() + { + var factory = new ConnectionFactory { HostName = "localhost" }; + return factory.CreateConnection(); + } + + private static void PublishMessagesIndividually() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + } + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static void PublishMessagesInBatch() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var batchSize = 100; + var outstandingMessageCount = 0; + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + outstandingMessageCount++; + + if (outstandingMessageCount == batchSize) + { + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + outstandingMessageCount = 0; + } + } + + if (outstandingMessageCount > 0) + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static void HandlePublishConfirmsAsynchronously() + { + using (var connection = CreateConnection()) + using (var channel = connection.CreateModel()) + { + var queueName = channel.QueueDeclare().QueueName; + channel.ConfirmSelect(); + + var outstandingConfirms = new ConcurrentDictionary(); + + void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) + { + if (multiple) + { + var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); + foreach (var entry in confirmed) + outstandingConfirms.TryRemove(entry.Key, out _); + } + else + outstandingConfirms.TryRemove(sequenceNumber, out _); + } + + channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + channel.BasicNacks += (sender, ea) => + { + outstandingConfirms.TryGetValue(ea.DeliveryTag, out string body); + Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); + cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + }; + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = i.ToString(); + outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); + } + + if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) + throw new Exception("All messages could not be confirmed in 60 seconds"); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); + } + } + + private static bool WaitUntil(int numberOfSeconds, Func condition) + { + int waited = 0; + while (!condition() && waited < numberOfSeconds * 1000) + { + Thread.Sleep(100); + waited += 100; + } + + return condition(); + } +} \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs b/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..25dab168 --- /dev/null +++ b/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("7_PublisherConfirms")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("7_PublisherConfirms")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a46637ff-a028-4ff9-a70f-82cb32ec3a74")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/dotnet-visual-studio/7_PublisherConfirms/packages.config b/dotnet-visual-studio/7_PublisherConfirms/packages.config new file mode 100644 index 00000000..700ce06d --- /dev/null +++ b/dotnet-visual-studio/7_PublisherConfirms/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/RabbitMQ.Tutorials.sln b/dotnet-visual-studio/RabbitMQ.Tutorials.sln index 8b41722d..3073fc8d 100644 --- a/dotnet-visual-studio/RabbitMQ.Tutorials.sln +++ b/dotnet-visual-studio/RabbitMQ.Tutorials.sln @@ -1,95 +1,104 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Send", "1_Send\1_Send.csproj", "{5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Receive", "1_Receive\1_Receive.csproj", "{DABA9504-8375-46DE-8349-A2DFCA9B1F2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_NewTask", "2_NewTask\2_NewTask.csproj", "{79410434-9BDD-49CE-A3EE-CE85526F317D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_Worker", "2_Worker\2_Worker.csproj", "{76C2AE27-9C4B-439B-B647-1CE709E59ABF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_EmitLog", "3_EmitLog\3_EmitLog.csproj", "{EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_ReceiveLogs", "3_ReceiveLogs\3_ReceiveLogs.csproj", "{164DB92B-2FE7-424C-8F79-EC23998F568B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_EmitLogDirect", "4_EmitLogDirect\4_EmitLogDirect.csproj", "{74E16495-2A01-4314-BE72-8ADAE64666BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_ReceiveLogsDirect", "4_ReceiveLogsDirect\4_ReceiveLogsDirect.csproj", "{2DE4DE5A-7377-4914-9E32-014D9BD1CD44}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_EmitLogTopic", "5_EmitLogTopic\5_EmitLogTopic.csproj", "{86A66C9E-E479-4EA1-803D-E703F77581DC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_ReceiveLogsTopic", "5_ReceiveLogsTopic\5_ReceiveLogsTopic.csproj", "{61A68101-F68B-4333-91C5-6F2B7BB0D5F6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCClient", "6_RPCClient\6_RPCClient.csproj", "{CAF32E20-FC0F-4FB5-8158-31DA442696EB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCServer", "6_RPCServer\6_RPCServer.csproj", "{FD2191EB-380C-426D-A629-53DF095E6295}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1CAFD4AB-D050-49DF-97B5-EEC43D4D1EA0}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.Build.0 = Release|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.Build.0 = Release|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.Build.0 = Release|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.Build.0 = Release|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.Build.0 = Release|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.Build.0 = Release|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.Build.0 = Release|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.Build.0 = Release|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.Build.0 = Release|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.Build.0 = Release|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.Build.0 = Release|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29306.81 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Send", "1_Send\1_Send.csproj", "{5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Receive", "1_Receive\1_Receive.csproj", "{DABA9504-8375-46DE-8349-A2DFCA9B1F2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_NewTask", "2_NewTask\2_NewTask.csproj", "{79410434-9BDD-49CE-A3EE-CE85526F317D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_Worker", "2_Worker\2_Worker.csproj", "{76C2AE27-9C4B-439B-B647-1CE709E59ABF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_EmitLog", "3_EmitLog\3_EmitLog.csproj", "{EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_ReceiveLogs", "3_ReceiveLogs\3_ReceiveLogs.csproj", "{164DB92B-2FE7-424C-8F79-EC23998F568B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_EmitLogDirect", "4_EmitLogDirect\4_EmitLogDirect.csproj", "{74E16495-2A01-4314-BE72-8ADAE64666BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_ReceiveLogsDirect", "4_ReceiveLogsDirect\4_ReceiveLogsDirect.csproj", "{2DE4DE5A-7377-4914-9E32-014D9BD1CD44}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_EmitLogTopic", "5_EmitLogTopic\5_EmitLogTopic.csproj", "{86A66C9E-E479-4EA1-803D-E703F77581DC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_ReceiveLogsTopic", "5_ReceiveLogsTopic\5_ReceiveLogsTopic.csproj", "{61A68101-F68B-4333-91C5-6F2B7BB0D5F6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCClient", "6_RPCClient\6_RPCClient.csproj", "{CAF32E20-FC0F-4FB5-8158-31DA442696EB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCServer", "6_RPCServer\6_RPCServer.csproj", "{FD2191EB-380C-426D-A629-53DF095E6295}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1CAFD4AB-D050-49DF-97B5-EEC43D4D1EA0}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "7_PublisherConfirms", "7_PublisherConfirms\7_PublisherConfirms.csproj", "{A46637FF-A028-4FF9-A70F-82CB32EC3A74}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.Build.0 = Release|Any CPU + {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.Build.0 = Release|Any CPU + {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.Build.0 = Release|Any CPU + {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.Build.0 = Release|Any CPU + {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.Build.0 = Release|Any CPU + {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.Build.0 = Release|Any CPU + {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.Build.0 = Release|Any CPU + {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.Build.0 = Release|Any CPU + {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.Build.0 = Release|Any CPU + {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.Build.0 = Release|Any CPU + {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.Build.0 = Release|Any CPU + {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.Build.0 = Release|Any CPU + {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {364576C4-05CA-4C17-AFFD-AB4F1157596A} + EndGlobalSection +EndGlobal From 01fc282d7ca8e8b62afb251b5c0b6f4d9456f9b4 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Wed, 18 Sep 2019 15:52:07 -0600 Subject: [PATCH 158/659] Updating readme with Tutorial 7 --- dotnet-visual-studio/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dotnet-visual-studio/README.md b/dotnet-visual-studio/README.md index c11b0398..af7b0b71 100644 --- a/dotnet-visual-studio/README.md +++ b/dotnet-visual-studio/README.md @@ -42,3 +42,7 @@ time opening it in order to get the .NET RabbitMQ dependency from NuGet. - 6_RPCServer - 6_RPCClient + +#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) + +- 7_PublisherConfirms From 3b2faf66dd4a7d53dba1b54548f242ad4e0f41d9 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Wed, 18 Sep 2019 16:19:03 -0600 Subject: [PATCH 159/659] Update README with Tutorial 7 --- dotnet/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dotnet/README.md b/dotnet/README.md index a8b30f3a..4b8e0677 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -57,3 +57,7 @@ on windows cd into each project and run `dotnet restore` manually. dotnet run -p RPCServer/RPCServer.csproj dotnet run -p RPCClient/RPCClient.csproj + +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorial-seven-dotnet.html) + + dotnet run -p PublisherConfirms/PublisherConfirms.csproj From ec132af1d521e97815630a3f4bcca46578998567 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Wed, 18 Sep 2019 16:22:07 -0600 Subject: [PATCH 160/659] Update README.md remove extra 'tutorials' from URL --- dotnet-visual-studio/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-visual-studio/README.md b/dotnet-visual-studio/README.md index af7b0b71..d8ebc7de 100644 --- a/dotnet-visual-studio/README.md +++ b/dotnet-visual-studio/README.md @@ -43,6 +43,6 @@ time opening it in order to get the .NET RabbitMQ dependency from NuGet. - 6_RPCServer - 6_RPCClient -#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) +#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorial-seven-dotnet.html) - 7_PublisherConfirms From beb65a2518b2dc0e61aef12f527fdf3a6f27c67f Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 18 Sep 2019 17:16:02 -0700 Subject: [PATCH 161/659] Complete the Java readme Similar to 88d8fd7 for dotnet --- java/README.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/java/README.md b/java/README.md index e06695e5..9d131715 100644 --- a/java/README.md +++ b/java/README.md @@ -43,7 +43,7 @@ java -cp %CP% Send ## Code -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-java.html): +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java.html): ``` javac -cp amqp-client-5.6.0.jar Send.java Recv.java @@ -55,7 +55,7 @@ java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Re java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Send ``` -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): ``` javac -cp amqp-client-5.6.0.jar NewTask.java Worker.java @@ -67,7 +67,7 @@ java -cp $CP NewTask java -cp $CP Worker ``` -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) ``` shell javac -cp amqp-client-5.6.0.jar EmitLog.java ReceiveLogs.java @@ -78,3 +78,60 @@ java -cp $CP ReceiveLogs # terminal tab 2 java -cp $CP EmitLog ``` + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-java.html) + +``` +javac -cp $CP ReceiveLogsDirect.java EmitLogDirect.java + +# terminal tab 1 +java -cp $CP ReceiveLogsDirect warning error + +# terminal tab 2 +java -cp $CP ReceiveLogsDirect info warning error + +# terminal tab 3 +java -cp $CP EmitLogDirect error "Run. Run. Or it will explode." +``` + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-java.html) + +``` +# To compile: +javac -cp $CP ReceiveLogsTopic.java EmitLogTopic.java + +# To receive all the logs: +java -cp $CP ReceiveLogsTopic "#" + +# To receive all logs from the facility "kern": +java -cp $CP ReceiveLogsTopic "kern.*" + +# Or if you want to hear only about "critical" logs: +java -cp $CP ReceiveLogsTopic "*.critical" + +# You can create multiple bindings: +java -cp $CP ReceiveLogsTopic "kern.*" "*.critical" + +# And to emit a log with a routing key "kern.critical" type: +java -cp $CP EmitLogTopic "kern.critical" "A critical kernel error" +``` + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-java.html) + +``` +# Compile and set up the classpath as usual (see tutorial one): +javac -cp $CP RPCClient.java RPCServer.java + +# Our RPC service is now ready. We can start the server: +java -cp $CP RPCServer + +# To request a fibonacci number run the client: +java -cp $CP RPCClient +``` + +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-java.html) + +``` +javac -cp $CP PublisherConfirms.java +java -cp $CP PublisherConfirms +``` From d230fceb4389c472f7ae51be3fca346bc8df7e59 Mon Sep 17 00:00:00 2001 From: Feroz Jilla Date: Sun, 3 Nov 2019 12:18:45 +0000 Subject: [PATCH 162/659] Fix grammar in README Assuming the author intended to write "And please check out the..." --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1e7ca23..31fbb8a2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ their ports to various languages. This repository only contains runnable code. Please consult [tutorials on the site](https://www.rabbitmq.com/getstarted.html) to learn more about [the concepts](https://www.rabbitmq.com/getstarted.html), requirements, supported client library version and so on. -A please check out the rest of [RabbitMQ documentation](https://www.rabbitmq.com/documentation.html)! +And please check out the rest of the [RabbitMQ documentation](https://www.rabbitmq.com/documentation.html)! ## Prerequisites From 91160f20f457ad3958bb5678d65fcc6cb4067128 Mon Sep 17 00:00:00 2001 From: Yoel Date: Thu, 14 Nov 2019 18:02:51 +0200 Subject: [PATCH 163/659] correct method of sending constant for language best practice tip --- java/Send.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/Send.java b/java/Send.java index f0e67199..8cac6896 100644 --- a/java/Send.java +++ b/java/Send.java @@ -13,7 +13,7 @@ public static void main(String[] argv) throws Exception { Channel channel = connection.createChannel()) { channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; - channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); + channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); System.out.println(" [x] Sent '" + message + "'"); } } From 299ef29f5627b9dc815e72a05e1cd2cbe1294fe2 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 14 Nov 2019 19:16:27 +0300 Subject: [PATCH 164/659] import java.nio.charset.StandardCharsets --- java/Send.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/Send.java b/java/Send.java index 8cac6896..a15b3ad6 100644 --- a/java/Send.java +++ b/java/Send.java @@ -2,6 +2,8 @@ import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; +import java.nio.charset.StandardCharsets; + public class Send { private final static String QUEUE_NAME = "hello"; From 9eb4edbef16b4e9c24352f92cc34d700c21d3669 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 9 Dec 2019 14:55:17 +0300 Subject: [PATCH 165/659] .NET tutorial 6: remove an unused variable Suggested in #250 by @KZyfer. --- dotnet/RPCClient/RPCClient.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index fedd99d0..ffc1c839 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -81,7 +81,6 @@ public static void Main(string[] args) private static async Task InvokeAsync(string n) { - var rnd = new Random(Guid.NewGuid().GetHashCode()); var rpcClient = new RpcClient(); Console.WriteLine(" [x] Requesting fib({0})", n); From 1134d87781d23c8be3d01000bb552d3430c1f061 Mon Sep 17 00:00:00 2001 From: Miven Date: Thu, 6 Feb 2020 18:02:47 +0800 Subject: [PATCH 166/659] Fix issues #253 --- java/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/README.md b/java/README.md index 9d131715..524add14 100644 --- a/java/README.md +++ b/java/README.md @@ -10,7 +10,7 @@ To successfully use the examples you will need a RabbitMQ node running locally. You'll need to download the following JAR files from Maven Central: - * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0//amqp-client-5.6.0.jar) + * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0/amqp-client-5.6.0.jar) * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar) * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar) From 7bfa1f4d0574868575bd090c91ced1fd858a487c Mon Sep 17 00:00:00 2001 From: Jonathan Leitschuh Date: Tue, 11 Feb 2020 09:59:47 -0500 Subject: [PATCH 167/659] Use HTTPS instead of HTTP to resolve dependencies This fixes a security vulnerability in this project where the `pom.xml` files were configuring Maven to resolve dependencies over HTTP instead of HTTPS. Signed-off-by: Jonathan Leitschuh --- soapui/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soapui/pom.xml b/soapui/pom.xml index 98ab68cd..02dea6b9 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -11,7 +11,7 @@ smartbear-repository - http://smartbearsoftware.com/repository/maven2/ + https://smartbearsoftware.com/repository/maven2/ From 089cd3c0926f22bdc7f864e922125438676a52a5 Mon Sep 17 00:00:00 2001 From: amosonn Date: Tue, 3 Mar 2020 18:18:58 +0100 Subject: [PATCH 168/659] Use callback arg in Worker.cs When sending the ack, we should use the channel provided to us by the callback mechanism, not capture it from the outer scope. This lets use e.g. to extract the callback to a separate method. --- dotnet/Worker/Worker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index 5773df61..e87f0e8f 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -30,7 +30,7 @@ public static void Main() Console.WriteLine(" [x] Done"); - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + model.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); From a9f902eefab740986cdeba50f771d22f5131bb32 Mon Sep 17 00:00:00 2001 From: Bogdan Stancescu Date: Fri, 6 Mar 2020 15:51:16 +0200 Subject: [PATCH 169/659] Added rebuild BAT for .NET --- dotnet/recompile.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 dotnet/recompile.bat diff --git a/dotnet/recompile.bat b/dotnet/recompile.bat new file mode 100644 index 00000000..b2a4f9a6 --- /dev/null +++ b/dotnet/recompile.bat @@ -0,0 +1 @@ +for /D %%s in (.\*) do @dotnet build %%s From a1308e2670e1b3b84947515d0981180c5b4306c4 Mon Sep 17 00:00:00 2001 From: Bogdan Stancescu Date: Fri, 6 Mar 2020 15:52:04 +0200 Subject: [PATCH 170/659] Reverted commit 089cd3c0926f22bdc7f864e922125438676a52a5 because it breaks the build for me --- dotnet/Worker/Worker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index e87f0e8f..5773df61 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -30,7 +30,7 @@ public static void Main() Console.WriteLine(" [x] Done"); - model.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); From 53668fc84a0518850f1eb57147242de6272636a5 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 6 Mar 2020 18:14:47 +0300 Subject: [PATCH 171/659] Add a cast missing from #259. Closes #261 --- dotnet/Worker/Worker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index e87f0e8f..0618abd8 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -30,7 +30,7 @@ public static void Main() Console.WriteLine(" [x] Done"); - model.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + ((IModel)model).BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); From a923a2500968eb80e94be0c95338393eec4fa73a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sun, 8 Mar 2020 19:16:53 +0300 Subject: [PATCH 172/659] Undo #259 It turned out to be a mistake to accept it. References #262. --- dotnet/Worker/Worker.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index 0618abd8..d7642532 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -30,7 +30,8 @@ public static void Main() Console.WriteLine(" [x] Done"); - ((IModel)model).BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + // here channel could also be accessed as ((EventingBasicConsumer)sender).Model + channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); From 416d85610d3505b6e90655db6b6e1427a9637071 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 23 Mar 2020 20:19:00 +0300 Subject: [PATCH 173/659] .NET: simplify build projects to target .NET Core 2.0 Both to keep up with the times and in preparation for the upcoming .NET client 6.0 release. --- dotnet/EmitLog/EmitLog.csproj | 8 ++------ dotnet/EmitLogDirect/EmitLogDirect.csproj | 8 ++------ dotnet/EmitLogTopic/EmitLogTopic.csproj | 8 ++------ dotnet/NewTask/NewTask.csproj | 8 ++------ dotnet/RPCClient/RPCClient.csproj | 8 ++------ dotnet/RPCServer/RPCServer.csproj | 7 ++----- dotnet/Receive/Receive.csproj | 7 ++----- dotnet/ReceiveLogs/ReceiveLogs.csproj | 8 ++------ dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 8 ++------ dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 8 ++------ dotnet/Send/Send.csproj | 7 ++----- dotnet/Worker/Worker.csproj | 8 ++------ 12 files changed, 24 insertions(+), 69 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 106ca415..6a3c56fd 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable EmitLog Exe EmitLog - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index c0d2353f..c7d06d06 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable EmitLogDirect Exe EmitLogDirect - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index e69a1bc7..1d154e01 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable EmitLogTopic Exe EmitLogTopic - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index e25cbea3..464902f4 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable NewTask Exe NewTask - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 2758e543..22d3329c 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable RPCClient Exe RPCClient - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 53e2e9b4..09e9320e 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -1,17 +1,14 @@  - netcoreapp1.0 + netcoreapp2.0 portable RPCServer Exe RPCServer - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index c701fcae..47b3dc8f 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -1,17 +1,14 @@  - netcoreapp1.0 + netcoreapp2.0 portable Receive Exe Receive - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 435040ee..d4a4d225 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable ReceiveLogs Exe ReceiveLogs - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index d4d3786d..c9fe2c0a 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable ReceiveLogsDirect Exe ReceiveLogsDirect - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 9a39638a..6f551d94 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable ReceiveLogsTopic Exe ReceiveLogsTopic - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index d7100e52..40c083b9 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -1,17 +1,14 @@  - netcoreapp1.0 + netcoreapp2.0 portable Send Exe Send - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 320c64a6..9be826a5 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -1,17 +1,13 @@  - - netcoreapp1.0 + netcoreapp2.0 portable Worker Exe Worker - $(PackageTargetFallback);dnxcore50 - 1.0.4 - + - From fc690f5d1e25d4baec7f53ce5304bd88db47ed44 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 25 Mar 2020 01:05:26 +0300 Subject: [PATCH 174/659] Bump dependencies --- javascript-nodejs/package-lock.json | 74 ++++++++++++++--------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index a00c04c2..7fcb2f05 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "amqplib": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.3.tgz", - "integrity": "sha512-ZOdUhMxcF+u62rPI+hMtU1NBXSDFQ3eCJJrenamtdQ7YYwh7RZJHOIM1gonVbZ5PyVdYH4xqBPje9OYqk7fnqw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.5.tgz", + "integrity": "sha512-sWx1hbfHbyKMw6bXOK2k6+lHL8TESWxjAx5hG8fBtT7wcxoXNIsFxZMnFyBjxt3yL14vn7WqBDe5U6BGOadtLg==", "requires": { "bitsyntax": "~0.1.0", "bluebird": "^3.5.2", @@ -38,9 +38,9 @@ } }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "brace-expansion": { "version": "1.1.11", @@ -57,9 +57,9 @@ "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "concat-map": { "version": "0.0.1", @@ -105,9 +105,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -127,9 +127,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -142,14 +142,14 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "js-beautify": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.1.tgz", - "integrity": "sha512-oxxvVZdOdUfzk8IOLBF2XUZvl2GoBEfA+b0of4u2EBY/46NlXasi8JdFvazA5lCrf9/lQhTjyVy2QCUW7iq0MQ==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz", + "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==", "requires": { "config-chain": "^1.1.12", - "editorconfig": "^0.15.2", + "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.0", + "mkdirp": "~0.5.1", "nopt": "~4.0.1" } }, @@ -171,16 +171,16 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -189,9 +189,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -266,9 +266,9 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "sigmund": { "version": "1.0.1", @@ -281,11 +281,11 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", - "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, From 5f302f9acf73011225e483641d94a74ff7e25741 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 28 Mar 2020 21:36:47 +0300 Subject: [PATCH 175/659] .NET: avoid using an obsolete method --- dotnet-visual-studio/2_NewTask/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-visual-studio/2_NewTask/Program.cs b/dotnet-visual-studio/2_NewTask/Program.cs index f3928ec9..e76fee5a 100644 --- a/dotnet-visual-studio/2_NewTask/Program.cs +++ b/dotnet-visual-studio/2_NewTask/Program.cs @@ -16,7 +16,7 @@ public static void Main(string[] args) var body = Encoding.UTF8.GetBytes(message); var properties = channel.CreateBasicProperties(); - properties.SetPersistent(true); + properties.Persistent = true; channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); Console.WriteLine(" [x] Sent {0}", message); From 96f0ba7a4be65640196800af0dc7a4eb922eed32 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 28 Mar 2020 21:41:59 +0300 Subject: [PATCH 176/659] .NET: avoid using long deprecated QueueingBasicConsumer --- dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs index b10dde8d..275b30a0 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs @@ -30,17 +30,18 @@ public static void Main(string[] args) Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); - var consumer = new QueueingBasicConsumer(channel); - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - while(true) + var consumer = new EventingBasicConsumer(channel); + consumer.Received += (model, ea) => { - var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); var body = ea.Body; var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); - } + }; + channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); + + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); } } } From 625c18d93c6739e2b2b82635512073282eb88314 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Tue, 31 Mar 2020 16:53:36 -0700 Subject: [PATCH 177/659] Update RabbitMQ.Client reference * Update all `*.csproj` files to VS 2019 format --- dotnet-visual-studio/.nuget/NuGet.Config | 6 - dotnet-visual-studio/.nuget/NuGet.exe | Bin 1664512 -> 0 bytes dotnet-visual-studio/.nuget/NuGet.targets | 136 ------------------ .../1_Receive/1_Receive.csproj | 95 +++--------- dotnet-visual-studio/1_Receive/App.config | 10 +- dotnet-visual-studio/1_Receive/Program.cs | 3 +- .../1_Receive/Properties/AssemblyInfo.cs | 36 ----- .../1_Receive/packages.config | 7 +- dotnet-visual-studio/1_Send/1_Send.csproj | 63 +++----- dotnet-visual-studio/1_Send/App.config | 6 +- .../1_Send/Properties/AssemblyInfo.cs | 36 ----- dotnet-visual-studio/1_Send/packages.config | 7 +- .../2_NewTask/2_NewTask.csproj | 65 +++------ dotnet-visual-studio/2_NewTask/App.config | 6 +- .../2_NewTask/Properties/AssemblyInfo.cs | 36 ----- .../2_NewTask/packages.config | 7 +- dotnet-visual-studio/2_Worker/2_Worker.csproj | 62 +++----- dotnet-visual-studio/2_Worker/App.config | 6 +- dotnet-visual-studio/2_Worker/Program.cs | 2 +- .../2_Worker/Properties/AssemblyInfo.cs | 36 ----- dotnet-visual-studio/2_Worker/packages.config | 7 +- .../3_EmitLog/3_EmitLog.csproj | 65 +++------ dotnet-visual-studio/3_EmitLog/App.config | 6 +- .../3_EmitLog/Properties/AssemblyInfo.cs | 36 ----- .../3_EmitLog/packages.config | 7 +- .../3_ReceiveLogs/3_ReceiveLogs.csproj | 65 +++------ dotnet-visual-studio/3_ReceiveLogs/App.config | 6 +- dotnet-visual-studio/3_ReceiveLogs/Program.cs | 2 +- .../3_ReceiveLogs/Properties/AssemblyInfo.cs | 36 ----- .../3_ReceiveLogs/packages.config | 7 +- .../4_EmitLogDirect/4_EmitLogDirect.csproj | 65 +++------ .../4_EmitLogDirect/App.config | 6 +- .../Properties/AssemblyInfo.cs | 36 ----- .../4_EmitLogDirect/packages.config | 7 +- .../4_ReceiveLogsDirect.csproj | 65 +++------ .../4_ReceiveLogsDirect/App.config | 6 +- .../4_ReceiveLogsDirect/Program.cs | 3 +- .../Properties/AssemblyInfo.cs | 36 ----- .../4_ReceiveLogsDirect/packages.config | 7 +- .../5_EmitLogTopic/5_EmitLogTopic.csproj | 65 +++------ .../5_EmitLogTopic/App.config | 6 +- .../5_EmitLogTopic/Properties/AssemblyInfo.cs | 36 ----- .../5_EmitLogTopic/packages.config | 7 +- .../5_ReceiveLogsTopic.csproj | 65 +++------ .../5_ReceiveLogsTopic/App.config | 6 +- .../5_ReceiveLogsTopic/Program.cs | 3 +- .../Properties/AssemblyInfo.cs | 36 ----- .../5_ReceiveLogsTopic/packages.config | 7 +- .../6_RPCClient/6_RPCClient.csproj | 65 +++------ dotnet-visual-studio/6_RPCClient/App.config | 6 +- .../6_RPCClient/Properties/AssemblyInfo.cs | 36 ----- dotnet-visual-studio/6_RPCClient/RPCClient.cs | 5 +- .../6_RPCClient/packages.config | 7 +- .../6_RPCServer/6_RPCServer.csproj | 65 +++------ dotnet-visual-studio/6_RPCServer/App.config | 6 +- dotnet-visual-studio/6_RPCServer/Program.cs | 3 +- .../6_RPCServer/Properties/AssemblyInfo.cs | 36 ----- .../6_RPCServer/packages.config | 7 +- .../7_PublisherConfirms.csproj | 45 +++--- .../7_PublisherConfirms/App.config | 6 +- .../Properties/AssemblyInfo.cs | 36 ----- .../7_PublisherConfirms/packages.config | 7 +- 62 files changed, 408 insertions(+), 1246 deletions(-) delete mode 100644 dotnet-visual-studio/.nuget/NuGet.Config delete mode 100644 dotnet-visual-studio/.nuget/NuGet.exe delete mode 100644 dotnet-visual-studio/.nuget/NuGet.targets delete mode 100644 dotnet-visual-studio/1_Receive/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/1_Send/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/2_NewTask/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/2_Worker/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/3_EmitLog/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/3_ReceiveLogs/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/4_EmitLogDirect/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/4_ReceiveLogsDirect/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/5_EmitLogTopic/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/5_ReceiveLogsTopic/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/6_RPCClient/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/6_RPCServer/Properties/AssemblyInfo.cs delete mode 100644 dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs diff --git a/dotnet-visual-studio/.nuget/NuGet.Config b/dotnet-visual-studio/.nuget/NuGet.Config deleted file mode 100644 index 67f8ea04..00000000 --- a/dotnet-visual-studio/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/.nuget/NuGet.exe b/dotnet-visual-studio/.nuget/NuGet.exe deleted file mode 100644 index 9ca66594f912a1fe7aec510819006fb1a80bc1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1664512 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
  • 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

    w}k|O3;Ng3Ak`gW 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 z zpXaYP$LY5z1M|9koI^Wb&i8|`rw{U5jJ=4k&lj`{6Xuug{g?JUF!$rIxDof|kO^sz z2XI~=VCSi9e)YP8A?A1lx>Qks^vVAHc{XmhoPQ33`mM+5TNIOTS_6vu+q#bHW839? z0(R_s5*}A~pZD3iAGRO#=f}Ana{J+s>w)jzb8x=rn=mY1F=0eBA%8s`e-Fpm4)<@# zoPJXjcH5x;#H_>WUe07Yw!hTvH8H=zxNf;?$gXa`Y&U3!$AR3>|7h|-zo3Tv{BOtE z5Bs(6S15<)=<7TM?^|eFoPOUXKwLN1FD??;%sY@dE4iF~@t> zaX-h`0jIO=EiC#4{02Fv4|3ao(JvgD^BnfZRfiaRA#dHz5fs<&ACG|_9v=;dt{9x_ zg|;t&WH6!E3EOJ*j{)3IJg=0 zYr~Le+iIM~qyLgeM4xl*^}i3o?4*!>R|oMC2z$y8=kH4Bf+3FswiWX8DnEbQ_sL;# z73a&0&uJ~bdCwfi{f~Zc51iYRjr;HIIe+Z`PS~@d9lz^-kkfNG)#yT4w@2#=kdBWB z!#nW)+pag@>oy|(VtA^UZ^9IB+!0LA=Y8uT{hAEY2ahx7FnFBfTz($^@w_*WgILFQ zIBZ4#!N-%s?&C5p7vFDYZ=>E=&;9fwGY`z`DMKRLjQePwEQ#}RKeX$4LgE$p<8f

    >2--I}aFCqV3hWqn}_Ps+y^e(pjbMW|1 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 RGHFl)S5g03{{M}@-vCWeV3Gg; diff --git a/dotnet-visual-studio/.nuget/NuGet.targets b/dotnet-visual-studio/.nuget/NuGet.targets deleted file mode 100644 index 045aa847..00000000 --- a/dotnet-visual-studio/.nuget/NuGet.targets +++ /dev/null @@ -1,136 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - true - - - true - - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) - - - - - $(SolutionDir).nuget - packages.config - - - - - $(NuGetToolsPath)\NuGet.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 $(NuGetExePath) - - $(TargetDir.Trim('\\')) - - -RequireConsent - -NonInteractive - - "$(SolutionDir) " - "$(SolutionDir)" - - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) - $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index 648a30b5..7105513d 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -1,107 +1,56 @@  - + Debug AnyCPU {DABA9504-8375-46DE-8349-A2DFCA9B1F2D} Exe - Properties _1_Receive 1_Receive - v4.5.1 + v4.6.1 512 - true - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + - - - - - - - - False - Microsoft .NET Framework 4.5.1 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/1_Receive/App.config b/dotnet-visual-studio/1_Receive/App.config index 9c05822f..3cfaba9a 100644 --- a/dotnet-visual-studio/1_Receive/App.config +++ b/dotnet-visual-studio/1_Receive/App.config @@ -1,6 +1,6 @@ - + - - - - \ No newline at end of file + + + + diff --git a/dotnet-visual-studio/1_Receive/Program.cs b/dotnet-visual-studio/1_Receive/Program.cs index 608b3bf6..b4fba32f 100644 --- a/dotnet-visual-studio/1_Receive/Program.cs +++ b/dotnet-visual-studio/1_Receive/Program.cs @@ -18,8 +18,7 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); diff --git a/dotnet-visual-studio/1_Receive/Properties/AssemblyInfo.cs b/dotnet-visual-studio/1_Receive/Properties/AssemblyInfo.cs deleted file mode 100644 index 26ef7fb6..00000000 --- a/dotnet-visual-studio/1_Receive/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "1_Receive" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "1_Receive" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "b2273483-b55d-4b82-aa7a-a4a0ba32d3e2" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/1_Receive/packages.config +++ b/dotnet-visual-studio/1_Receive/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index 0a80e87b..fc1ea239 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF} Exe - Properties _1_Send 1_Send - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/1_Send/App.config b/dotnet-visual-studio/1_Send/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/1_Send/App.config +++ b/dotnet-visual-studio/1_Send/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/1_Send/Properties/AssemblyInfo.cs b/dotnet-visual-studio/1_Send/Properties/AssemblyInfo.cs deleted file mode 100644 index e67f4bf4..00000000 --- a/dotnet-visual-studio/1_Send/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "1_Send" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "1_Send" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "ddc440db-d97d-4ff5-8987-359745a68cb2" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/1_Send/packages.config +++ b/dotnet-visual-studio/1_Send/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index 5e6573d6..0446cc43 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {79410434-9BDD-49CE-A3EE-CE85526F317D} Exe - Properties _2_NewTask 2_NewTask - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/2_NewTask/App.config b/dotnet-visual-studio/2_NewTask/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/2_NewTask/App.config +++ b/dotnet-visual-studio/2_NewTask/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/2_NewTask/Properties/AssemblyInfo.cs b/dotnet-visual-studio/2_NewTask/Properties/AssemblyInfo.cs deleted file mode 100644 index 08f59d14..00000000 --- a/dotnet-visual-studio/2_NewTask/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "2_NewTask" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "2_NewTask" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "5923d0e0-e014-4c1a-9a9d-8fdbdda83706" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ b/dotnet-visual-studio/2_NewTask/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index e462be9f..4fb22418 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -1,75 +1,57 @@  - + Debug AnyCPU {76C2AE27-9C4B-439B-B647-1CE709E59ABF} Exe - Properties _2_Worker 2_Worker - v4.5.1 + v4.6.1 512 - true + true ..\ true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/2_Worker/App.config b/dotnet-visual-studio/2_Worker/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/2_Worker/App.config +++ b/dotnet-visual-studio/2_Worker/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/2_Worker/Program.cs b/dotnet-visual-studio/2_Worker/Program.cs index 886799fa..bee9ead8 100644 --- a/dotnet-visual-studio/2_Worker/Program.cs +++ b/dotnet-visual-studio/2_Worker/Program.cs @@ -21,7 +21,7 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; + byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); diff --git a/dotnet-visual-studio/2_Worker/Properties/AssemblyInfo.cs b/dotnet-visual-studio/2_Worker/Properties/AssemblyInfo.cs deleted file mode 100644 index 3f031adf..00000000 --- a/dotnet-visual-studio/2_Worker/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "2_Worker" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "2_Worker" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "3bee6e98-7376-4d37-839a-6bde8b09bcce" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/2_Worker/packages.config +++ b/dotnet-visual-studio/2_Worker/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 49da4458..7e2837a3 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8} Exe - Properties _3_EmitLog 3_EmitLog - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_EmitLog/App.config b/dotnet-visual-studio/3_EmitLog/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/3_EmitLog/App.config +++ b/dotnet-visual-studio/3_EmitLog/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_EmitLog/Properties/AssemblyInfo.cs b/dotnet-visual-studio/3_EmitLog/Properties/AssemblyInfo.cs deleted file mode 100644 index 4752a8fb..00000000 --- a/dotnet-visual-studio/3_EmitLog/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "3_EmitLog" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "3_EmitLog" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "e03f6b1b-3c75-48c1-abe1-b5283910dc8c" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ b/dotnet-visual-studio/3_EmitLog/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index eab2b508..b02c8d66 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {164DB92B-2FE7-424C-8F79-EC23998F568B} Exe - Properties _3_ReceiveLogs 3_ReceiveLogs - v4.5.1 + v4.6.1 512 - true - ..\ true + true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_ReceiveLogs/App.config b/dotnet-visual-studio/3_ReceiveLogs/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/App.config +++ b/dotnet-visual-studio/3_ReceiveLogs/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_ReceiveLogs/Program.cs b/dotnet-visual-studio/3_ReceiveLogs/Program.cs index 9451549e..2ab91bdc 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/Program.cs +++ b/dotnet-visual-studio/3_ReceiveLogs/Program.cs @@ -19,7 +19,7 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; + byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] {0}", message); }; diff --git a/dotnet-visual-studio/3_ReceiveLogs/Properties/AssemblyInfo.cs b/dotnet-visual-studio/3_ReceiveLogs/Properties/AssemblyInfo.cs deleted file mode 100644 index 7186d9a7..00000000 --- a/dotnet-visual-studio/3_ReceiveLogs/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "3_ReceiveLogs" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "3_ReceiveLogs" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "789fd469-3b50-4bc0-93d5-2644e3fd7cff" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ b/dotnet-visual-studio/3_ReceiveLogs/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index 4ae6cf7f..96a87f98 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {74E16495-2A01-4314-BE72-8ADAE64666BC} Exe - Properties _4_EmitLogDirect 4_EmitLogDirect - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_EmitLogDirect/App.config b/dotnet-visual-studio/4_EmitLogDirect/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/App.config +++ b/dotnet-visual-studio/4_EmitLogDirect/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_EmitLogDirect/Properties/AssemblyInfo.cs b/dotnet-visual-studio/4_EmitLogDirect/Properties/AssemblyInfo.cs deleted file mode 100644 index 5cfd13ba..00000000 --- a/dotnet-visual-studio/4_EmitLogDirect/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "4_EmitLogDirect" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "4_EmitLogDirect" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "64de668c-2d20-4a8f-9156-ac294d4af3fc" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ b/dotnet-visual-studio/4_EmitLogDirect/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index 408f4ae8..42eb4583 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {2DE4DE5A-7377-4914-9E32-014D9BD1CD44} Exe - Properties _4_ReceiveLogsDirect 4_ReceiveLogsDirect - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/App.config b/dotnet-visual-studio/4_ReceiveLogsDirect/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/App.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs index c67cac1d..488fe541 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs @@ -33,8 +33,7 @@ public static void Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/Properties/AssemblyInfo.cs b/dotnet-visual-studio/4_ReceiveLogsDirect/Properties/AssemblyInfo.cs deleted file mode 100644 index 485a4139..00000000 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "4_ReceiveLogsDirect" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "4_ReceiveLogsDirect" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "1dd3ed22-9811-423d-9414-98338ac8a07e" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index de41f89f..6411f0a6 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {86A66C9E-E479-4EA1-803D-E703F77581DC} Exe - Properties _5_EmitLogTopic 5_EmitLogTopic - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_EmitLogTopic/App.config b/dotnet-visual-studio/5_EmitLogTopic/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/App.config +++ b/dotnet-visual-studio/5_EmitLogTopic/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_EmitLogTopic/Properties/AssemblyInfo.cs b/dotnet-visual-studio/5_EmitLogTopic/Properties/AssemblyInfo.cs deleted file mode 100644 index 82992420..00000000 --- a/dotnet-visual-studio/5_EmitLogTopic/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "5_EmitLogTopic" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "5_EmitLogTopic" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "e2658cce-06d2-4507-8397-f726d54f4fcf" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ b/dotnet-visual-studio/5_EmitLogTopic/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index 7b33d08f..5765edcf 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {61A68101-F68B-4333-91C5-6F2B7BB0D5F6} Exe - Properties _5_ReceiveLogsTopic 5_ReceiveLogsTopic - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/App.config b/dotnet-visual-studio/5_ReceiveLogsTopic/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/App.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs index 275b30a0..2e95c54b 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs @@ -33,8 +33,7 @@ public static void Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Properties/AssemblyInfo.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Properties/AssemblyInfo.cs deleted file mode 100644 index 1df4cc70..00000000 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "5_ReceiveLogsTopic" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "4_ReceiveLogsTopic" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "42a93100-47b5-4eda-add3-5b554b4bfbc0" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index 839a5236..508626c5 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -1,76 +1,57 @@  - + Debug AnyCPU {CAF32E20-FC0F-4FB5-8158-31DA442696EB} Exe - Properties _6_RPCCLient 6_RPCCLient - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCClient/App.config b/dotnet-visual-studio/6_RPCClient/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/6_RPCClient/App.config +++ b/dotnet-visual-studio/6_RPCClient/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCClient/Properties/AssemblyInfo.cs b/dotnet-visual-studio/6_RPCClient/Properties/AssemblyInfo.cs deleted file mode 100644 index 111a3440..00000000 --- a/dotnet-visual-studio/6_RPCClient/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "6_RPCClient" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "6_RPCClient" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "fb86635f-cd04-4e69-84af-27b2d806519d" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/6_RPCClient/RPCClient.cs b/dotnet-visual-studio/6_RPCClient/RPCClient.cs index c92e7aff..0fa1ffff 100644 --- a/dotnet-visual-studio/6_RPCClient/RPCClient.cs +++ b/dotnet-visual-studio/6_RPCClient/RPCClient.cs @@ -28,9 +28,10 @@ public RpcClient() _consumer.Received += (model, ea) => { if (!_callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) + { return; - var body = ea.Body; - var response = Encoding.UTF8.GetString(body); + } + var response = Encoding.UTF8.GetString(ea.Body.ToArray()); tcs.TrySetResult(response); }; } diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ b/dotnet-visual-studio/6_RPCClient/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index b866f687..bcd4fa12 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -1,75 +1,56 @@  - + Debug AnyCPU {FD2191EB-380C-426D-A629-53DF095E6295} Exe - Properties _6_RPCServer 6_RPCServer - v4.5.1 + v4.6.1 512 - true - ..\ + true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCServer/App.config b/dotnet-visual-studio/6_RPCServer/App.config index 9c05822f..bae5d6d8 100644 --- a/dotnet-visual-studio/6_RPCServer/App.config +++ b/dotnet-visual-studio/6_RPCServer/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCServer/Program.cs b/dotnet-visual-studio/6_RPCServer/Program.cs index 7a8969d9..416af604 100644 --- a/dotnet-visual-studio/6_RPCServer/Program.cs +++ b/dotnet-visual-studio/6_RPCServer/Program.cs @@ -21,14 +21,13 @@ public static void Main() { string response = null; - var body = ea.Body; var props = ea.BasicProperties; var replyProps = channel.CreateBasicProperties(); replyProps.CorrelationId = props.CorrelationId; try { - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); int n = int.Parse(message); Console.WriteLine(" [.] fib({0})", message); response = fib(n).ToString(); diff --git a/dotnet-visual-studio/6_RPCServer/Properties/AssemblyInfo.cs b/dotnet-visual-studio/6_RPCServer/Properties/AssemblyInfo.cs deleted file mode 100644 index ac706aac..00000000 --- a/dotnet-visual-studio/6_RPCServer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle( "6_RPCServer" )] -[assembly: AssemblyDescription( "" )] -[assembly: AssemblyConfiguration( "" )] -[assembly: AssemblyCompany( "" )] -[assembly: AssemblyProduct( "6_RPCServer" )] -[assembly: AssemblyCopyright( "Copyright © 2015" )] -[assembly: AssemblyTrademark( "" )] -[assembly: AssemblyCulture( "" )] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible( false )] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid( "2904cec2-363c-4594-8adb-0579e40e1352" )] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.0.0.0" )] -[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config index 40ac2e8c..0ad36630 100644 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ b/dotnet-visual-studio/6_RPCServer/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj index 03c72189..6d2dc424 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -8,53 +8,48 @@ Exe _7_PublisherConfirms 7_PublisherConfirms - v4.5.1 + v4.6.1 512 - true true + AnyCPU + prompt + 4 - AnyCPU true full false bin\Debug\ DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly true bin\Release\ TRACE - prompt - 4 - - ..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\lib\net40\Microsoft.Diagnostics.Tracing.EventSource.dll - - - ..\packages\RabbitMQ.Client.5.1.0\lib\net451\RabbitMQ.Client.dll + + + ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - - - - - - - + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + - - - - + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/App.config b/dotnet-visual-studio/7_PublisherConfirms/App.config index b8e61f74..45437954 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/App.config +++ b/dotnet-visual-studio/7_PublisherConfirms/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs b/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs deleted file mode 100644 index 25dab168..00000000 --- a/dotnet-visual-studio/7_PublisherConfirms/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("7_PublisherConfirms")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("7_PublisherConfirms")] -[assembly: AssemblyCopyright("Copyright © 2019")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a46637ff-a028-4ff9-a70f-82cb32ec3a74")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/dotnet-visual-studio/7_PublisherConfirms/packages.config b/dotnet-visual-studio/7_PublisherConfirms/packages.config index 700ce06d..7c0564d7 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/packages.config +++ b/dotnet-visual-studio/7_PublisherConfirms/packages.config @@ -1,5 +1,8 @@  - - + + + + + \ No newline at end of file From f29e508b46cadd53e2713c0eab4b42d921d516d9 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 1 Apr 2020 09:52:14 -0700 Subject: [PATCH 178/659] Update RabbitMQ.Client to version 6.0.0-rc3 --- dotnet/.gitignore | 2 +- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/PublisherConfirms/PublisherConfirms.csproj | 2 +- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- dotnet/recompile.ps1 | 7 +++++++ dotnet/update.ps1 | 6 ++++++ 16 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 dotnet/recompile.ps1 create mode 100644 dotnet/update.ps1 diff --git a/dotnet/.gitignore b/dotnet/.gitignore index 305ed7b0..52800612 100644 --- a/dotnet/.gitignore +++ b/dotnet/.gitignore @@ -1,4 +1,4 @@ -recompile.sh *.dll *.exe *.lock.json +packages/ diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 6a3c56fd..3f076a3d 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index c7d06d06..0a213a76 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 1d154e01..2c290b0d 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 464902f4..3ae8ec35 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index 5a3c05c8..4b991e13 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -9,7 +9,7 @@ - + diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 22d3329c..5d51b9ef 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 09e9320e..974a91ae 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 47b3dc8f..8df433c7 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index d4a4d225..4ce3e329 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index c9fe2c0a..240e0683 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 6f551d94..e922dda4 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index 40c083b9..f5b3ab9d 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 9be826a5..8edfdcf4 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/recompile.ps1 b/dotnet/recompile.ps1 new file mode 100644 index 00000000..53c42e21 --- /dev/null +++ b/dotnet/recompile.ps1 @@ -0,0 +1,7 @@ +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose + +Get-Childitem -Recurse '*.csproj' | ForEach-Object { + # & dotnet build $_.FullName + & dotnet build $_ +} diff --git a/dotnet/update.ps1 b/dotnet/update.ps1 new file mode 100644 index 00000000..db54d56d --- /dev/null +++ b/dotnet/update.ps1 @@ -0,0 +1,6 @@ +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose + +Get-Childitem -Recurse '*.csproj' | ForEach-Object { + & dotnet add $_ package --version '6.0.0-rc.3' RabbitMQ.Client +} From 6bb52ec7a6e966c2007cbc8cdb42ece93d9602c6 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 1 Apr 2020 10:48:12 -0700 Subject: [PATCH 179/659] Sync-up code between dotnet and dotnet-visual-studio --- dotnet-visual-studio/2_Worker/Program.cs | 1 + dotnet-visual-studio/3_EmitLog/Program.cs | 2 +- dotnet-visual-studio/3_ReceiveLogs/Program.cs | 2 ++ dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs | 2 +- dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs | 2 +- dotnet/RPCClient/RPCClient.cs | 2 +- dotnet/RPCServer/RPCServer.cs | 2 +- dotnet/Receive/Receive.cs | 4 +++- dotnet/ReceiveLogs/ReceiveLogs.cs | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 11 +++++------ dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 11 +++++------ dotnet/Worker/Worker.cs | 2 +- 12 files changed, 23 insertions(+), 20 deletions(-) diff --git a/dotnet-visual-studio/2_Worker/Program.cs b/dotnet-visual-studio/2_Worker/Program.cs index bee9ead8..51eafef7 100644 --- a/dotnet-visual-studio/2_Worker/Program.cs +++ b/dotnet-visual-studio/2_Worker/Program.cs @@ -30,6 +30,7 @@ public static void Main() Console.WriteLine(" [x] Done"); + // here channel could also be accessed as ((EventingBasicConsumer)sender).Model channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); diff --git a/dotnet-visual-studio/3_EmitLog/Program.cs b/dotnet-visual-studio/3_EmitLog/Program.cs index 371d045e..d20e651b 100644 --- a/dotnet-visual-studio/3_EmitLog/Program.cs +++ b/dotnet-visual-studio/3_EmitLog/Program.cs @@ -24,6 +24,6 @@ public static void Main(string[] args) private static string GetMessage(string[] args) { - return (( args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); + return ((args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); } } diff --git a/dotnet-visual-studio/3_ReceiveLogs/Program.cs b/dotnet-visual-studio/3_ReceiveLogs/Program.cs index 2ab91bdc..82c4d867 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/Program.cs +++ b/dotnet-visual-studio/3_ReceiveLogs/Program.cs @@ -16,6 +16,8 @@ public static void Main() var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); + Console.WriteLine(" [*] Waiting for logs."); + var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs index 488fe541..1760e490 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs @@ -14,7 +14,7 @@ public static void Main(string[] args) channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); var queueName = channel.QueueDeclare().QueueName; - if(args.Length < 1) + if (args.Length < 1) { Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs index 2e95c54b..ffb7f206 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs @@ -14,7 +14,7 @@ public static void Main(string[] args) channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); var queueName = channel.QueueDeclare().QueueName; - if(args.Length < 1) + if (args.Length < 1) { Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index ffc1c839..8686864a 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -30,7 +30,7 @@ public RpcClient() if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) return; var body = ea.Body; - var response = Encoding.UTF8.GetString(body); + var response = Encoding.UTF8.GetString(body.ToArray()); tcs.TrySetResult(response); }; } diff --git a/dotnet/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs index 15b9853f..83213375 100644 --- a/dotnet/RPCServer/RPCServer.cs +++ b/dotnet/RPCServer/RPCServer.cs @@ -28,7 +28,7 @@ public static void Main() try { - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(body.ToArray()); int n = int.Parse(message); Console.WriteLine(" [.] fib({0})", message); response = fib(n).ToString(); diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs index 034fa9df..3e1093f1 100644 --- a/dotnet/Receive/Receive.cs +++ b/dotnet/Receive/Receive.cs @@ -13,11 +13,13 @@ public static void Main() { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); + Console.WriteLine(" [*] Waiting for messages."); + var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(body.ToArray()); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs index 000ee666..5b34db00 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet/ReceiveLogs/ReceiveLogs.cs @@ -21,7 +21,7 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; + byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] {0}", message); }; diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs index ae78cfa4..20303446 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -5,7 +5,7 @@ class ReceiveLogsDirect { - public static int Main(string[] args) + public static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) @@ -14,12 +14,13 @@ public static int Main(string[] args) channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); var queueName = channel.QueueDeclare().QueueName; - if(args.Length < 1) + if (args.Length < 1) { Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); - return 1; + Environment.ExitCode = 1; + return; } foreach(var severity in args) @@ -32,8 +33,7 @@ public static int Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; @@ -41,7 +41,6 @@ public static int Main(string[] args) Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); - return 0; } } } diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs index b848c483..f54350c9 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -5,7 +5,7 @@ class ReceiveLogsTopic { - public static int Main(string[] args) + public static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) @@ -14,12 +14,13 @@ public static int Main(string[] args) channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); var queueName = channel.QueueDeclare().QueueName; - if(args.Length < 1) + if (args.Length < 1) { Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); - return 1; + Environment.ExitCode = 1; + return; } foreach(var bindingKey in args) @@ -32,8 +33,7 @@ public static int Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body); + var message = Encoding.UTF8.GetString(ea.Body.ToArray()); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; @@ -41,7 +41,6 @@ public static int Main(string[] args) Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); - return 0; } } } diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index d7642532..ce170d99 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -21,7 +21,7 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; + byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); From d9d70e7da54782221de71b78a4011f37d81c92ed Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Thu, 16 Apr 2020 16:35:29 -0700 Subject: [PATCH 180/659] Update RabbitMQ.Client to version 6.0.0 --- dotnet-visual-studio/1_Receive/1_Receive.csproj | 2 +- dotnet-visual-studio/1_Receive/packages.config | 2 +- dotnet-visual-studio/1_Send/1_Send.csproj | 4 ++-- dotnet-visual-studio/1_Send/packages.config | 2 +- dotnet-visual-studio/2_NewTask/2_NewTask.csproj | 4 ++-- dotnet-visual-studio/2_NewTask/packages.config | 2 +- dotnet-visual-studio/2_Worker/2_Worker.csproj | 2 +- dotnet-visual-studio/2_Worker/packages.config | 2 +- dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj | 4 ++-- dotnet-visual-studio/3_EmitLog/packages.config | 2 +- dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj | 4 ++-- dotnet-visual-studio/3_ReceiveLogs/packages.config | 2 +- dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj | 4 ++-- dotnet-visual-studio/4_EmitLogDirect/packages.config | 2 +- .../4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj | 4 ++-- dotnet-visual-studio/4_ReceiveLogsDirect/packages.config | 2 +- dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj | 4 ++-- dotnet-visual-studio/5_EmitLogTopic/packages.config | 2 +- .../5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj | 4 ++-- dotnet-visual-studio/5_ReceiveLogsTopic/packages.config | 2 +- dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj | 4 ++-- dotnet-visual-studio/6_RPCClient/packages.config | 2 +- dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj | 4 ++-- dotnet-visual-studio/6_RPCServer/packages.config | 2 +- .../7_PublisherConfirms/7_PublisherConfirms.csproj | 2 +- dotnet-visual-studio/7_PublisherConfirms/packages.config | 2 +- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/PublisherConfirms/PublisherConfirms.csproj | 2 +- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- dotnet/update.ps1 | 2 +- 40 files changed, 50 insertions(+), 50 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index 7105513d..554facea 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/1_Receive/packages.config +++ b/dotnet-visual-studio/1_Receive/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index fc1ea239..898bffcb 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -31,7 +31,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/1_Send/packages.config +++ b/dotnet-visual-studio/1_Send/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index 0446cc43..a77144bc 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ b/dotnet-visual-studio/2_NewTask/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index 4fb22418..82527583 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -33,7 +33,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/2_Worker/packages.config +++ b/dotnet-visual-studio/2_Worker/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 7e2837a3..913d04d4 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ b/dotnet-visual-studio/3_EmitLog/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index b02c8d66..30216120 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ b/dotnet-visual-studio/3_ReceiveLogs/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index 96a87f98..eedfac13 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ b/dotnet-visual-studio/4_EmitLogDirect/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index 42eb4583..e017d314 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index 6411f0a6..c184711b 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ b/dotnet-visual-studio/5_EmitLogTopic/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index 5765edcf..0d595170 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index 508626c5..f9f57c21 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -54,4 +54,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ b/dotnet-visual-studio/6_RPCClient/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index bcd4fa12..c0ff5e9d 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -32,7 +32,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config index 0ad36630..96e615fd 100644 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ b/dotnet-visual-studio/6_RPCServer/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj index 6d2dc424..7549a7ea 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -31,7 +31,7 @@ - ..\packages\RabbitMQ.Client.6.0.0-rc.3\lib\net461\RabbitMQ.Client.dll + ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/7_PublisherConfirms/packages.config b/dotnet-visual-studio/7_PublisherConfirms/packages.config index 7c0564d7..890cd423 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/packages.config +++ b/dotnet-visual-studio/7_PublisherConfirms/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 3f076a3d..ece3af77 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 0a213a76..24a72b73 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 2c290b0d..1f2e500c 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 3ae8ec35..c7254443 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index 4b991e13..17a1cd15 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -9,7 +9,7 @@ - + diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 5d51b9ef..de3d530e 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 974a91ae..c9c8b947 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 8df433c7..b95f4275 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 4ce3e329..000e382c 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index 240e0683..33e83f17 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index e922dda4..5b5e6ac8 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index f5b3ab9d..ebe8b9ec 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 8edfdcf4..ea4afbb4 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/update.ps1 b/dotnet/update.ps1 index db54d56d..21724b99 100644 --- a/dotnet/update.ps1 +++ b/dotnet/update.ps1 @@ -2,5 +2,5 @@ $ErrorActionPreference = 'Stop' Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose Get-Childitem -Recurse '*.csproj' | ForEach-Object { - & dotnet add $_ package --version '6.0.0-rc.3' RabbitMQ.Client + & dotnet add $_ package --version '6.0.0' RabbitMQ.Client } From 7e8c1db866f12ccf8d80d63f2a5646480eab1ca3 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 13 May 2020 03:12:50 +0300 Subject: [PATCH 181/659] Update Objective-C client tutorials to 0.11.0-rc2 --- objective-c/bump_dependencies.sh | 5 +-- objective-c/tutorial1/Cartfile | 2 +- objective-c/tutorial1/Cartfile.resolved | 6 ++-- .../tutorial1.xcodeproj/project.pbxproj | 36 ++++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ objective-c/tutorial2/Cartfile | 2 +- objective-c/tutorial2/Cartfile.resolved | 6 ++-- .../tutorial2.xcodeproj/project.pbxproj | 34 +++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ objective-c/tutorial3/Cartfile | 2 +- objective-c/tutorial3/Cartfile.resolved | 6 ++-- .../tutorial3.xcodeproj/project.pbxproj | 34 +++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ objective-c/tutorial4/Cartfile | 2 +- objective-c/tutorial4/Cartfile.resolved | 6 ++-- .../tutorial4.xcodeproj/project.pbxproj | 34 +++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ objective-c/tutorial5/Cartfile | 2 +- objective-c/tutorial5/Cartfile.resolved | 2 +- .../tutorial5.xcodeproj/project.pbxproj | 34 +++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++ 21 files changed, 213 insertions(+), 40 deletions(-) create mode 100644 objective-c/tutorial1/tutorial1.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 objective-c/tutorial2/tutorial2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 objective-c/tutorial3/tutorial3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 objective-c/tutorial4/tutorial4.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 objective-c/tutorial5/tutorial5.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/objective-c/bump_dependencies.sh b/objective-c/bump_dependencies.sh index 03579651..17ecc9b5 100755 --- a/objective-c/bump_dependencies.sh +++ b/objective-c/bump_dependencies.sh @@ -4,9 +4,10 @@ set -ex rm -rf ~/Library/Caches/org.carthage.CarthageKit -for tutdir in `ls | grep "tutorial[1-9]"` +for dir in `ls | grep "tutorial[1-9]"` do - cd $tutdir + cd $dir carthage update --platform iOS + carthage copy-frameworks cd .. done diff --git a/objective-c/tutorial1/Cartfile b/objective-c/tutorial1/Cartfile index 38483e08..5d7e23cf 100644 --- a/objective-c/tutorial1/Cartfile +++ b/objective-c/tutorial1/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial1/Cartfile.resolved b/objective-c/tutorial1/Cartfile.resolved index 750d6791..0b5953f6 100644 --- a/objective-c/tutorial1/Cartfile.resolved +++ b/objective-c/tutorial1/Cartfile.resolved @@ -1,3 +1,3 @@ -github "robbiehanson/CocoaAsyncSocket" "7.5.1" -github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "jeffh/JKVValue" "v1.3.3" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial1/tutorial1.xcodeproj/project.pbxproj b/objective-c/tutorial1/tutorial1.xcodeproj/project.pbxproj index 9b602cb2..a00d7c3f 100644 --- a/objective-c/tutorial1/tutorial1.xcodeproj/project.pbxproj +++ b/objective-c/tutorial1/tutorial1.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 70A4E086246B6F33001378DD /* JKVValue.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E084246B6F33001378DD /* JKVValue.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 70A4E087246B6F33001378DD /* CocoaAsyncSocket.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E085246B6F33001378DD /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; AE40C7301CB2719500CC7B97 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C72F1CB2719500CC7B97 /* main.m */; }; AE40C7331CB2719500CC7B97 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C7321CB2719500CC7B97 /* AppDelegate.m */; }; AE40C7361CB2719500CC7B97 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C7351CB2719500CC7B97 /* ViewController.m */; }; @@ -24,6 +26,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 70A4E086246B6F33001378DD /* JKVValue.framework in CopyFiles */, + 70A4E087246B6F33001378DD /* CocoaAsyncSocket.framework in CopyFiles */, AE40C7941CB504C700CC7B97 /* RMQClient.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -31,6 +35,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 70A4E084246B6F33001378DD /* JKVValue.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JKVValue.framework; path = Carthage/Build/iOS/JKVValue.framework; sourceTree = ""; }; + 70A4E085246B6F33001378DD /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; AE40C72B1CB2719500CC7B97 /* tutorial1.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tutorial1.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE40C72F1CB2719500CC7B97 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; AE40C7311CB2719500CC7B97 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -59,6 +65,8 @@ AE40C7221CB2719500CC7B97 = { isa = PBXGroup; children = ( + 70A4E085246B6F33001378DD /* CocoaAsyncSocket.framework */, + 70A4E084246B6F33001378DD /* JKVValue.framework */, AE40C7921CB504BF00CC7B97 /* RMQClient.framework */, AE40C72D1CB2719500CC7B97 /* tutorial1 */, AE40C72C1CB2719500CC7B97 /* Products */, @@ -124,7 +132,7 @@ AE40C7231CB2719500CC7B97 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = RabbitMQ; TargetAttributes = { AE40C72A1CB2719500CC7B97 = { @@ -134,7 +142,7 @@ }; buildConfigurationList = AE40C7261CB2719500CC7B97 /* Build configuration list for PBXProject "tutorial1" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -200,19 +208,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -235,7 +252,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -247,19 +264,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -276,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -293,6 +319,7 @@ "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = tutorial1/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.rabbitmq.tutorial1; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -308,6 +335,7 @@ "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = tutorial1/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.rabbitmq.tutorial1; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/objective-c/tutorial1/tutorial1.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/objective-c/tutorial1/tutorial1.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/objective-c/tutorial1/tutorial1.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/objective-c/tutorial2/Cartfile b/objective-c/tutorial2/Cartfile index 38483e08..5d7e23cf 100644 --- a/objective-c/tutorial2/Cartfile +++ b/objective-c/tutorial2/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial2/Cartfile.resolved b/objective-c/tutorial2/Cartfile.resolved index 750d6791..0b5953f6 100644 --- a/objective-c/tutorial2/Cartfile.resolved +++ b/objective-c/tutorial2/Cartfile.resolved @@ -1,3 +1,3 @@ -github "robbiehanson/CocoaAsyncSocket" "7.5.1" -github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "jeffh/JKVValue" "v1.3.3" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial2/tutorial2.xcodeproj/project.pbxproj b/objective-c/tutorial2/tutorial2.xcodeproj/project.pbxproj index 02afd417..39ff7838 100644 --- a/objective-c/tutorial2/tutorial2.xcodeproj/project.pbxproj +++ b/objective-c/tutorial2/tutorial2.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 70A4E08A246B6FF0001378DD /* JKVValue.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E088246B6FF0001378DD /* JKVValue.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 70A4E08B246B6FF0001378DD /* CocoaAsyncSocket.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E089246B6FF0001378DD /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; AE40C7661CB2B50B00CC7B97 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C7651CB2B50B00CC7B97 /* main.m */; }; AE40C7691CB2B50B00CC7B97 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C7681CB2B50B00CC7B97 /* AppDelegate.m */; }; AE40C76C1CB2B50B00CC7B97 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE40C76B1CB2B50B00CC7B97 /* ViewController.m */; }; @@ -24,6 +26,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 70A4E08A246B6FF0001378DD /* JKVValue.framework in CopyFiles */, + 70A4E08B246B6FF0001378DD /* CocoaAsyncSocket.framework in CopyFiles */, AE40C77E1CB2B5E200CC7B97 /* RMQClient.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -31,6 +35,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 70A4E088246B6FF0001378DD /* JKVValue.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JKVValue.framework; path = Carthage/Build/iOS/JKVValue.framework; sourceTree = ""; }; + 70A4E089246B6FF0001378DD /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; AE40C7611CB2B50B00CC7B97 /* tutorial2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tutorial2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE40C7651CB2B50B00CC7B97 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; AE40C7671CB2B50B00CC7B97 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -59,6 +65,8 @@ AE40C7581CB2B50B00CC7B97 = { isa = PBXGroup; children = ( + 70A4E089246B6FF0001378DD /* CocoaAsyncSocket.framework */, + 70A4E088246B6FF0001378DD /* JKVValue.framework */, AE40C77B1CB2B5CD00CC7B97 /* RMQClient.framework */, AE40C7631CB2B50B00CC7B97 /* tutorial2 */, AE40C7621CB2B50B00CC7B97 /* Products */, @@ -124,7 +132,7 @@ AE40C7591CB2B50B00CC7B97 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = RabbitMQ; TargetAttributes = { AE40C7601CB2B50B00CC7B97 = { @@ -134,7 +142,7 @@ }; buildConfigurationList = AE40C75C1CB2B50B00CC7B97 /* Build configuration list for PBXProject "tutorial2" */; compatibilityVersion = "Xcode 8.0"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -200,19 +208,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -235,7 +252,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -247,19 +264,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -276,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/objective-c/tutorial2/tutorial2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/objective-c/tutorial2/tutorial2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/objective-c/tutorial2/tutorial2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/objective-c/tutorial3/Cartfile b/objective-c/tutorial3/Cartfile index 38483e08..5d7e23cf 100644 --- a/objective-c/tutorial3/Cartfile +++ b/objective-c/tutorial3/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial3/Cartfile.resolved b/objective-c/tutorial3/Cartfile.resolved index 750d6791..0b5953f6 100644 --- a/objective-c/tutorial3/Cartfile.resolved +++ b/objective-c/tutorial3/Cartfile.resolved @@ -1,3 +1,3 @@ -github "robbiehanson/CocoaAsyncSocket" "7.5.1" -github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "jeffh/JKVValue" "v1.3.3" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial3/tutorial3.xcodeproj/project.pbxproj b/objective-c/tutorial3/tutorial3.xcodeproj/project.pbxproj index d649a941..1a6887c6 100644 --- a/objective-c/tutorial3/tutorial3.xcodeproj/project.pbxproj +++ b/objective-c/tutorial3/tutorial3.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 70A4E08E246B702A001378DD /* JKVValue.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E08C246B702A001378DD /* JKVValue.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 70A4E08F246B702A001378DD /* CocoaAsyncSocket.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E08D246B702A001378DD /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; AE09C8141CCE315E00FA6915 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AE09C8131CCE315E00FA6915 /* main.m */; }; AE09C8171CCE315E00FA6915 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AE09C8161CCE315E00FA6915 /* AppDelegate.m */; }; AE09C81A1CCE315E00FA6915 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE09C8191CCE315E00FA6915 /* ViewController.m */; }; @@ -24,6 +26,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 70A4E08E246B702A001378DD /* JKVValue.framework in CopyFiles */, + 70A4E08F246B702A001378DD /* CocoaAsyncSocket.framework in CopyFiles */, AE09C82C1CCE33EA00FA6915 /* RMQClient.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -31,6 +35,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 70A4E08C246B702A001378DD /* JKVValue.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JKVValue.framework; path = Carthage/Build/iOS/JKVValue.framework; sourceTree = ""; }; + 70A4E08D246B702A001378DD /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; AE09C80F1CCE315E00FA6915 /* tutorial3.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tutorial3.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE09C8131CCE315E00FA6915 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; AE09C8151CCE315E00FA6915 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -59,6 +65,8 @@ AE09C8061CCE315E00FA6915 = { isa = PBXGroup; children = ( + 70A4E08D246B702A001378DD /* CocoaAsyncSocket.framework */, + 70A4E08C246B702A001378DD /* JKVValue.framework */, AE09C8291CCE33D400FA6915 /* RMQClient.framework */, AE09C8111CCE315E00FA6915 /* tutorial3 */, AE09C8101CCE315E00FA6915 /* Products */, @@ -124,7 +132,7 @@ AE09C8071CCE315E00FA6915 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = RabbitMQ; TargetAttributes = { AE09C80E1CCE315E00FA6915 = { @@ -134,7 +142,7 @@ }; buildConfigurationList = AE09C80A1CCE315E00FA6915 /* Build configuration list for PBXProject "tutorial3" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -200,19 +208,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -235,7 +252,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -247,19 +264,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -276,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/objective-c/tutorial3/tutorial3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/objective-c/tutorial3/tutorial3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/objective-c/tutorial3/tutorial3.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/objective-c/tutorial4/Cartfile b/objective-c/tutorial4/Cartfile index 38483e08..5d7e23cf 100644 --- a/objective-c/tutorial4/Cartfile +++ b/objective-c/tutorial4/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial4/Cartfile.resolved b/objective-c/tutorial4/Cartfile.resolved index 750d6791..0b5953f6 100644 --- a/objective-c/tutorial4/Cartfile.resolved +++ b/objective-c/tutorial4/Cartfile.resolved @@ -1,3 +1,3 @@ -github "robbiehanson/CocoaAsyncSocket" "7.5.1" -github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "jeffh/JKVValue" "v1.3.3" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial4/tutorial4.xcodeproj/project.pbxproj b/objective-c/tutorial4/tutorial4.xcodeproj/project.pbxproj index ce8b9036..8b46c119 100644 --- a/objective-c/tutorial4/tutorial4.xcodeproj/project.pbxproj +++ b/objective-c/tutorial4/tutorial4.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 70A4E092246B709C001378DD /* JKVValue.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E090246B709C001378DD /* JKVValue.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 70A4E093246B709C001378DD /* CocoaAsyncSocket.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E091246B709C001378DD /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; AEF0F7AB1CCEC50A007DAF85 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF0F7AA1CCEC50A007DAF85 /* main.m */; }; AEF0F7AE1CCEC50A007DAF85 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF0F7AD1CCEC50A007DAF85 /* AppDelegate.m */; }; AEF0F7B11CCEC50A007DAF85 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF0F7B01CCEC50A007DAF85 /* ViewController.m */; }; @@ -24,6 +26,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 70A4E092246B709C001378DD /* JKVValue.framework in CopyFiles */, + 70A4E093246B709C001378DD /* CocoaAsyncSocket.framework in CopyFiles */, AEF0F7C31CCEC5CB007DAF85 /* RMQClient.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -31,6 +35,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 70A4E090246B709C001378DD /* JKVValue.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JKVValue.framework; path = Carthage/Build/iOS/JKVValue.framework; sourceTree = ""; }; + 70A4E091246B709C001378DD /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; AEF0F7A61CCEC50A007DAF85 /* tutorial4.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tutorial4.app; sourceTree = BUILT_PRODUCTS_DIR; }; AEF0F7AA1CCEC50A007DAF85 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; AEF0F7AC1CCEC50A007DAF85 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -59,6 +65,8 @@ AEF0F79D1CCEC50A007DAF85 = { isa = PBXGroup; children = ( + 70A4E091246B709C001378DD /* CocoaAsyncSocket.framework */, + 70A4E090246B709C001378DD /* JKVValue.framework */, AEF0F7C01CCEC5BE007DAF85 /* RMQClient.framework */, AEF0F7A81CCEC50A007DAF85 /* tutorial4 */, AEF0F7A71CCEC50A007DAF85 /* Products */, @@ -124,7 +132,7 @@ AEF0F79E1CCEC50A007DAF85 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = RabbitMQ; TargetAttributes = { AEF0F7A51CCEC50A007DAF85 = { @@ -134,7 +142,7 @@ }; buildConfigurationList = AEF0F7A11CCEC50A007DAF85 /* Build configuration list for PBXProject "tutorial4" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -200,19 +208,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -235,7 +252,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -247,19 +264,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -276,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/objective-c/tutorial4/tutorial4.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/objective-c/tutorial4/tutorial4.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/objective-c/tutorial4/tutorial4.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/objective-c/tutorial5/Cartfile b/objective-c/tutorial5/Cartfile index 38483e08..5d7e23cf 100644 --- a/objective-c/tutorial5/Cartfile +++ b/objective-c/tutorial5/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial5/Cartfile.resolved b/objective-c/tutorial5/Cartfile.resolved index 750d6791..0a2ad77d 100644 --- a/objective-c/tutorial5/Cartfile.resolved +++ b/objective-c/tutorial5/Cartfile.resolved @@ -1,3 +1,3 @@ github "robbiehanson/CocoaAsyncSocket" "7.5.1" github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.10.0" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" diff --git a/objective-c/tutorial5/tutorial5.xcodeproj/project.pbxproj b/objective-c/tutorial5/tutorial5.xcodeproj/project.pbxproj index dabbfa02..b40bb6a1 100644 --- a/objective-c/tutorial5/tutorial5.xcodeproj/project.pbxproj +++ b/objective-c/tutorial5/tutorial5.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 70A4E096246B71E6001378DD /* CocoaAsyncSocket.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E094246B71E6001378DD /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 70A4E097246B71E6001378DD /* JKVValue.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A4E095246B71E6001378DD /* JKVValue.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; AE929C5E1CCF6FAF001A6524 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AE929C5D1CCF6FAF001A6524 /* main.m */; }; AE929C611CCF6FAF001A6524 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AE929C601CCF6FAF001A6524 /* AppDelegate.m */; }; AE929C641CCF6FAF001A6524 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE929C631CCF6FAF001A6524 /* ViewController.m */; }; @@ -24,6 +26,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 70A4E096246B71E6001378DD /* CocoaAsyncSocket.framework in CopyFiles */, + 70A4E097246B71E6001378DD /* JKVValue.framework in CopyFiles */, AE929C761CCF70C0001A6524 /* RMQClient.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -31,6 +35,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 70A4E094246B71E6001378DD /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; + 70A4E095246B71E6001378DD /* JKVValue.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JKVValue.framework; path = Carthage/Build/iOS/JKVValue.framework; sourceTree = ""; }; AE929C591CCF6FAF001A6524 /* tutorial5.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tutorial5.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE929C5D1CCF6FAF001A6524 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; AE929C5F1CCF6FAF001A6524 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -59,6 +65,8 @@ AE929C501CCF6FAF001A6524 = { isa = PBXGroup; children = ( + 70A4E094246B71E6001378DD /* CocoaAsyncSocket.framework */, + 70A4E095246B71E6001378DD /* JKVValue.framework */, AE929C731CCF70A5001A6524 /* RMQClient.framework */, AE929C5B1CCF6FAF001A6524 /* tutorial5 */, AE929C5A1CCF6FAF001A6524 /* Products */, @@ -124,7 +132,7 @@ AE929C511CCF6FAF001A6524 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = RabbitMQ; TargetAttributes = { AE929C581CCF6FAF001A6524 = { @@ -134,7 +142,7 @@ }; buildConfigurationList = AE929C541CCF6FAF001A6524 /* Build configuration list for PBXProject "tutorial5" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -200,19 +208,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -235,7 +252,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -247,19 +264,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -276,7 +302,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/objective-c/tutorial5/tutorial5.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/objective-c/tutorial5/tutorial5.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/objective-c/tutorial5/tutorial5.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + From 69519621003ce77a185d592898cf8baac589d014 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 22 May 2020 06:09:06 +0300 Subject: [PATCH 182/659] Objective-C: bump RabbitMQ client to 0.11.0 --- objective-c/tutorial1/Cartfile | 2 +- objective-c/tutorial1/Cartfile.resolved | 2 +- objective-c/tutorial1/tutorial1/ViewController.m | 2 ++ objective-c/tutorial2/Cartfile | 2 +- objective-c/tutorial2/Cartfile.resolved | 2 +- objective-c/tutorial2/tutorial2/ViewController.m | 1 + objective-c/tutorial3/Cartfile | 2 +- objective-c/tutorial3/Cartfile.resolved | 2 +- objective-c/tutorial4/Cartfile | 2 +- objective-c/tutorial4/Cartfile.resolved | 2 +- objective-c/tutorial5/Cartfile | 2 +- objective-c/tutorial5/Cartfile.resolved | 6 +++--- 12 files changed, 15 insertions(+), 12 deletions(-) diff --git a/objective-c/tutorial1/Cartfile b/objective-c/tutorial1/Cartfile index 5d7e23cf..a2f3e089 100644 --- a/objective-c/tutorial1/Cartfile +++ b/objective-c/tutorial1/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" diff --git a/objective-c/tutorial1/Cartfile.resolved b/objective-c/tutorial1/Cartfile.resolved index 0b5953f6..1dad448c 100644 --- a/objective-c/tutorial1/Cartfile.resolved +++ b/objective-c/tutorial1/Cartfile.resolved @@ -1,3 +1,3 @@ github "jeffh/JKVValue" "v1.3.3" -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial1/tutorial1/ViewController.m b/objective-c/tutorial1/tutorial1/ViewController.m index 9355135e..9898d919 100644 --- a/objective-c/tutorial1/tutorial1/ViewController.m +++ b/objective-c/tutorial1/tutorial1/ViewController.m @@ -24,6 +24,8 @@ - (void)send { [ch.defaultExchange publish:[@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding] routingKey:q.name]; NSLog(@"Sent 'Hello World!'"); + [NSThread sleepForTimeInterval:2.0f]; + [conn close]; } diff --git a/objective-c/tutorial2/Cartfile b/objective-c/tutorial2/Cartfile index 5d7e23cf..a2f3e089 100644 --- a/objective-c/tutorial2/Cartfile +++ b/objective-c/tutorial2/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" diff --git a/objective-c/tutorial2/Cartfile.resolved b/objective-c/tutorial2/Cartfile.resolved index 0b5953f6..1dad448c 100644 --- a/objective-c/tutorial2/Cartfile.resolved +++ b/objective-c/tutorial2/Cartfile.resolved @@ -1,3 +1,3 @@ github "jeffh/JKVValue" "v1.3.3" -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial2/tutorial2/ViewController.m b/objective-c/tutorial2/tutorial2/ViewController.m index 8752c779..5f482637 100644 --- a/objective-c/tutorial2/tutorial2/ViewController.m +++ b/objective-c/tutorial2/tutorial2/ViewController.m @@ -30,6 +30,7 @@ - (void)newTask:(NSString *)msg { [ch.defaultExchange publish:msgData routingKey:q.name persistent:YES]; NSLog(@"Sent %@", msg); + [NSThread sleepForTimeInterval:2.0f]; [conn close]; } diff --git a/objective-c/tutorial3/Cartfile b/objective-c/tutorial3/Cartfile index 5d7e23cf..a2f3e089 100644 --- a/objective-c/tutorial3/Cartfile +++ b/objective-c/tutorial3/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" diff --git a/objective-c/tutorial3/Cartfile.resolved b/objective-c/tutorial3/Cartfile.resolved index 0b5953f6..1dad448c 100644 --- a/objective-c/tutorial3/Cartfile.resolved +++ b/objective-c/tutorial3/Cartfile.resolved @@ -1,3 +1,3 @@ github "jeffh/JKVValue" "v1.3.3" -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial4/Cartfile b/objective-c/tutorial4/Cartfile index 5d7e23cf..a2f3e089 100644 --- a/objective-c/tutorial4/Cartfile +++ b/objective-c/tutorial4/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" diff --git a/objective-c/tutorial4/Cartfile.resolved b/objective-c/tutorial4/Cartfile.resolved index 0b5953f6..1dad448c 100644 --- a/objective-c/tutorial4/Cartfile.resolved +++ b/objective-c/tutorial4/Cartfile.resolved @@ -1,3 +1,3 @@ github "jeffh/JKVValue" "v1.3.3" -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" github "robbiehanson/CocoaAsyncSocket" "7.6.4" diff --git a/objective-c/tutorial5/Cartfile b/objective-c/tutorial5/Cartfile index 5d7e23cf..a2f3e089 100644 --- a/objective-c/tutorial5/Cartfile +++ b/objective-c/tutorial5/Cartfile @@ -1 +1 @@ -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" diff --git a/objective-c/tutorial5/Cartfile.resolved b/objective-c/tutorial5/Cartfile.resolved index 0a2ad77d..1dad448c 100644 --- a/objective-c/tutorial5/Cartfile.resolved +++ b/objective-c/tutorial5/Cartfile.resolved @@ -1,3 +1,3 @@ -github "robbiehanson/CocoaAsyncSocket" "7.5.1" -github "jeffh/JKVValue" "v1.3.2" -github "rabbitmq/rabbitmq-objc-client" "v0.11.0-rc2" +github "jeffh/JKVValue" "v1.3.3" +github "rabbitmq/rabbitmq-objc-client" "v0.11.0" +github "robbiehanson/CocoaAsyncSocket" "7.6.4" From 65d00f572f3d6d2061495a97901708dd0447c336 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 30 May 2020 14:51:02 +0300 Subject: [PATCH 183/659] Update Tut2Sender.java To match https://github.com/rabbitmq/rabbitmq-website/pull/977 --- .../org/springframework/amqp/tutorials/tut2/Tut2Sender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java index fa2ac843..55a4ee21 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Sender.java @@ -42,7 +42,7 @@ public class Tut2Sender { @Scheduled(fixedDelay = 1000, initialDelay = 500) public void send() { StringBuilder builder = new StringBuilder("Hello"); - if (dots.getAndIncrement() == 3) { + if (dots.getAndIncrement() == 4) { dots.set(1); } for (int i = 0; i < dots.get(); i++) { From c5d8b3d5182c842e78aea56da57bd8c48eec9d5b Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 8 Jun 2020 04:47:22 +0300 Subject: [PATCH 184/659] .NET: more consistency, bump client to 6.1.0 --- dotnet/EmitLog/EmitLog.csproj | 4 ++-- dotnet/EmitLogDirect/EmitLogDirect.csproj | 4 ++-- dotnet/EmitLogTopic/EmitLogTopic.csproj | 4 ++-- dotnet/NewTask/NewTask.csproj | 4 ++-- dotnet/PublisherConfirms/PublisherConfirms.csproj | 2 +- dotnet/RPCClient/RPCClient.cs | 4 ++-- dotnet/RPCClient/RPCClient.csproj | 4 ++-- dotnet/RPCServer/RPCServer.cs | 4 ++-- dotnet/RPCServer/RPCServer.csproj | 4 ++-- dotnet/Receive/Receive.cs | 4 ++-- dotnet/Receive/Receive.csproj | 4 ++-- dotnet/ReceiveLogs/ReceiveLogs.csproj | 4 ++-- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 3 ++- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 4 ++-- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 3 ++- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 4 ++-- dotnet/Send/Send.csproj | 4 ++-- dotnet/Worker/Worker.csproj | 4 ++-- 18 files changed, 35 insertions(+), 33 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index ece3af77..344ca67d 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable EmitLog Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 24a72b73..7ada7dd5 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable EmitLogDirect Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 1f2e500c..f7ac56a1 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable EmitLogTopic Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index c7254443..9939e468 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable NewTask Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index 17a1cd15..e800c2a3 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -9,7 +9,7 @@ - + diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 8686864a..47de79c9 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -29,8 +29,8 @@ public RpcClient() { if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) return; - var body = ea.Body; - var response = Encoding.UTF8.GetString(body.ToArray()); + var body = ea.Body.ToArray(); + var response = Encoding.UTF8.GetString(body); tcs.TrySetResult(response); }; } diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index de3d530e..50b63a9f 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable RPCClient Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs index 83213375..3be08afd 100644 --- a/dotnet/RPCServer/RPCServer.cs +++ b/dotnet/RPCServer/RPCServer.cs @@ -21,14 +21,14 @@ public static void Main() { string response = null; - var body = ea.Body; + var body = ea.Body.ToArray(); var props = ea.BasicProperties; var replyProps = channel.CreateBasicProperties(); replyProps.CorrelationId = props.CorrelationId; try { - var message = Encoding.UTF8.GetString(body.ToArray()); + var message = Encoding.UTF8.GetString(body); int n = int.Parse(message); Console.WriteLine(" [.] fib({0})", message); response = fib(n).ToString(); diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index c9c8b947..3e8e3bf2 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -1,7 +1,7 @@  - netcoreapp2.0 + netcoreapp3.0 portable RPCServer Exe @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs index 3e1093f1..a64ee46e 100644 --- a/dotnet/Receive/Receive.cs +++ b/dotnet/Receive/Receive.cs @@ -18,8 +18,8 @@ public static void Main() var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var body = ea.Body; - var message = Encoding.UTF8.GetString(body.ToArray()); + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index b95f4275..90a9eda8 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -1,7 +1,7 @@  - netcoreapp2.0 + netcoreapp3.0 portable Receive Exe @@ -9,6 +9,6 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 000e382c..4019448d 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable ReceiveLogs Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs index 20303446..504affb4 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -33,7 +33,8 @@ public static void Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index 33e83f17..2377a504 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable ReceiveLogsDirect Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs index f54350c9..3a5c95db 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -33,7 +33,8 @@ public static void Main(string[] args) var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); }; diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 5b5e6ac8..ae1de7bb 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable ReceiveLogsTopic Exe @@ -8,6 +8,6 @@ - + diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index ebe8b9ec..a35d3640 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -1,7 +1,7 @@  - netcoreapp2.0 + netcoreapp3.0 portable Send Exe @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index ea4afbb4..1db2c1aa 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -1,6 +1,6 @@  - netcoreapp2.0 + netcoreapp3.0 portable Worker Exe @@ -8,6 +8,6 @@ - + From 8558268b23479d365cd6a2e3a40a4cdf21cbe8f6 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 8 Jun 2020 04:50:51 +0300 Subject: [PATCH 185/659] .NET with Visual Studio: bump client to 6.1.0 --- dotnet-visual-studio/1_Receive/1_Receive.csproj | 4 ++-- dotnet-visual-studio/1_Receive/packages.config | 2 +- dotnet-visual-studio/1_Send/1_Send.csproj | 4 ++-- dotnet-visual-studio/1_Send/packages.config | 2 +- dotnet-visual-studio/2_NewTask/2_NewTask.csproj | 4 ++-- dotnet-visual-studio/2_NewTask/packages.config | 2 +- dotnet-visual-studio/2_Worker/2_Worker.csproj | 4 ++-- dotnet-visual-studio/2_Worker/packages.config | 2 +- dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj | 4 ++-- dotnet-visual-studio/3_EmitLog/packages.config | 2 +- dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj | 4 ++-- dotnet-visual-studio/3_ReceiveLogs/packages.config | 2 +- dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj | 4 ++-- dotnet-visual-studio/4_EmitLogDirect/packages.config | 2 +- .../4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj | 4 ++-- dotnet-visual-studio/4_ReceiveLogsDirect/packages.config | 2 +- dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj | 4 ++-- dotnet-visual-studio/5_EmitLogTopic/packages.config | 2 +- .../5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj | 4 ++-- dotnet-visual-studio/5_ReceiveLogsTopic/packages.config | 2 +- dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj | 4 ++-- dotnet-visual-studio/6_RPCClient/packages.config | 2 +- dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj | 4 ++-- dotnet-visual-studio/6_RPCServer/packages.config | 2 +- .../7_PublisherConfirms/7_PublisherConfirms.csproj | 4 ++-- dotnet-visual-studio/7_PublisherConfirms/packages.config | 2 +- 26 files changed, 39 insertions(+), 39 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index 554facea..1fdff956 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/1_Receive/packages.config +++ b/dotnet-visual-studio/1_Receive/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index 898bffcb..459bfc9a 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -30,8 +30,8 @@ TRACE - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/1_Send/packages.config +++ b/dotnet-visual-studio/1_Send/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index a77144bc..e4b03295 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ b/dotnet-visual-studio/2_NewTask/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index 82527583..a6cb8426 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -32,8 +32,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/2_Worker/packages.config +++ b/dotnet-visual-studio/2_Worker/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 913d04d4..72576918 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ b/dotnet-visual-studio/3_EmitLog/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index 30216120..4e787e38 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ b/dotnet-visual-studio/3_ReceiveLogs/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index eedfac13..1e1c428e 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ b/dotnet-visual-studio/4_EmitLogDirect/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index e017d314..46daa108 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index c184711b..de4caf87 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ b/dotnet-visual-studio/5_EmitLogTopic/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index 0d595170..d2a42d6c 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index f9f57c21..a41fdf25 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ b/dotnet-visual-studio/6_RPCClient/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index c0ff5e9d..1435f261 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -31,8 +31,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config index 96e615fd..e33b2839 100644 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ b/dotnet-visual-studio/6_RPCServer/packages.config @@ -1,6 +1,6 @@  - + diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj index 7549a7ea..3041c35b 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -30,8 +30,8 @@ - - ..\packages\RabbitMQ.Client.6.0.0\lib\net461\RabbitMQ.Client.dll + + ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll diff --git a/dotnet-visual-studio/7_PublisherConfirms/packages.config b/dotnet-visual-studio/7_PublisherConfirms/packages.config index 890cd423..b9ebed43 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/packages.config +++ b/dotnet-visual-studio/7_PublisherConfirms/packages.config @@ -1,6 +1,6 @@  - + From b0ab0e8793614a25e6a68c836e5ed8018b5e4f22 Mon Sep 17 00:00:00 2001 From: Oliver Freitag Date: Wed, 8 Jul 2020 15:48:13 +0200 Subject: [PATCH 186/659] switched all projects to new project file format and dotnet core 3.1 * simpler * no need of config files * runs under mac as well --- .../1_Receive/1_Receive.csproj | 57 ++-------------- dotnet-visual-studio/1_Receive/App.config | 6 -- .../1_Receive/packages.config | 8 --- dotnet-visual-studio/1_Send/1_Send.csproj | 57 ++-------------- dotnet-visual-studio/1_Send/App.config | 6 -- dotnet-visual-studio/1_Send/packages.config | 8 --- .../2_NewTask/2_NewTask.csproj | 57 ++-------------- dotnet-visual-studio/2_NewTask/App.config | 6 -- .../2_NewTask/packages.config | 8 --- dotnet-visual-studio/2_Worker/2_Worker.csproj | 58 ++-------------- dotnet-visual-studio/2_Worker/App.config | 6 -- dotnet-visual-studio/2_Worker/packages.config | 8 --- .../3_EmitLog/3_EmitLog.csproj | 57 ++-------------- dotnet-visual-studio/3_EmitLog/App.config | 6 -- .../3_EmitLog/packages.config | 8 --- .../3_ReceiveLogs/3_ReceiveLogs.csproj | 57 ++-------------- dotnet-visual-studio/3_ReceiveLogs/App.config | 6 -- .../3_ReceiveLogs/packages.config | 8 --- .../4_EmitLogDirect/4_EmitLogDirect.csproj | 57 ++-------------- .../4_EmitLogDirect/App.config | 6 -- .../4_EmitLogDirect/packages.config | 8 --- .../4_ReceiveLogsDirect.csproj | 57 ++-------------- .../4_ReceiveLogsDirect/App.config | 6 -- .../4_ReceiveLogsDirect/packages.config | 8 --- .../5_EmitLogTopic/5_EmitLogTopic.csproj | 57 ++-------------- .../5_EmitLogTopic/App.config | 6 -- .../5_EmitLogTopic/packages.config | 8 --- .../5_ReceiveLogsTopic.csproj | 57 ++-------------- .../5_ReceiveLogsTopic/App.config | 6 -- .../5_ReceiveLogsTopic/packages.config | 8 --- .../6_RPCClient/6_RPCClient.csproj | 58 ++-------------- dotnet-visual-studio/6_RPCClient/App.config | 6 -- .../6_RPCClient/packages.config | 8 --- .../6_RPCServer/6_RPCServer.csproj | 57 ++-------------- dotnet-visual-studio/6_RPCServer/App.config | 6 -- .../6_RPCServer/packages.config | 8 --- .../7_PublisherConfirms.csproj | 66 ++++--------------- .../7_PublisherConfirms/App.config | 6 -- .../7_PublisherConfirms/packages.config | 8 --- dotnet-visual-studio/RabbitMQ.Tutorials.sln | 7 -- 40 files changed, 83 insertions(+), 858 deletions(-) delete mode 100644 dotnet-visual-studio/1_Receive/App.config delete mode 100644 dotnet-visual-studio/1_Receive/packages.config delete mode 100644 dotnet-visual-studio/1_Send/App.config delete mode 100644 dotnet-visual-studio/1_Send/packages.config delete mode 100644 dotnet-visual-studio/2_NewTask/App.config delete mode 100644 dotnet-visual-studio/2_NewTask/packages.config delete mode 100644 dotnet-visual-studio/2_Worker/App.config delete mode 100644 dotnet-visual-studio/2_Worker/packages.config delete mode 100644 dotnet-visual-studio/3_EmitLog/App.config delete mode 100644 dotnet-visual-studio/3_EmitLog/packages.config delete mode 100644 dotnet-visual-studio/3_ReceiveLogs/App.config delete mode 100644 dotnet-visual-studio/3_ReceiveLogs/packages.config delete mode 100644 dotnet-visual-studio/4_EmitLogDirect/App.config delete mode 100644 dotnet-visual-studio/4_EmitLogDirect/packages.config delete mode 100644 dotnet-visual-studio/4_ReceiveLogsDirect/App.config delete mode 100644 dotnet-visual-studio/4_ReceiveLogsDirect/packages.config delete mode 100644 dotnet-visual-studio/5_EmitLogTopic/App.config delete mode 100644 dotnet-visual-studio/5_EmitLogTopic/packages.config delete mode 100644 dotnet-visual-studio/5_ReceiveLogsTopic/App.config delete mode 100644 dotnet-visual-studio/5_ReceiveLogsTopic/packages.config delete mode 100644 dotnet-visual-studio/6_RPCClient/App.config delete mode 100644 dotnet-visual-studio/6_RPCClient/packages.config delete mode 100644 dotnet-visual-studio/6_RPCServer/App.config delete mode 100644 dotnet-visual-studio/6_RPCServer/packages.config delete mode 100644 dotnet-visual-studio/7_PublisherConfirms/App.config delete mode 100644 dotnet-visual-studio/7_PublisherConfirms/packages.config diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index 1fdff956..a28e0458 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D} Exe - _1_Receive - 1_Receive - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/1_Receive/App.config b/dotnet-visual-studio/1_Receive/App.config deleted file mode 100644 index 3cfaba9a..00000000 --- a/dotnet-visual-studio/1_Receive/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/1_Receive/packages.config b/dotnet-visual-studio/1_Receive/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/1_Receive/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index 459bfc9a..a28e0458 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF} Exe - _1_Send - 1_Send - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/1_Send/App.config b/dotnet-visual-studio/1_Send/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/1_Send/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/1_Send/packages.config b/dotnet-visual-studio/1_Send/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/1_Send/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index e4b03295..a28e0458 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {79410434-9BDD-49CE-A3EE-CE85526F317D} Exe - _2_NewTask - 2_NewTask - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/2_NewTask/App.config b/dotnet-visual-studio/2_NewTask/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/2_NewTask/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/2_NewTask/packages.config b/dotnet-visual-studio/2_NewTask/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/2_NewTask/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index a6cb8426..a28e0458 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -1,57 +1,11 @@ - - - + + - Debug - AnyCPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF} Exe - _2_Worker - 2_Worker - v4.6.1 - 512 - true - ..\ - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/2_Worker/App.config b/dotnet-visual-studio/2_Worker/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/2_Worker/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/2_Worker/packages.config b/dotnet-visual-studio/2_Worker/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/2_Worker/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index 72576918..a28e0458 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8} Exe - _3_EmitLog - 3_EmitLog - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_EmitLog/App.config b/dotnet-visual-studio/3_EmitLog/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/3_EmitLog/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/3_EmitLog/packages.config b/dotnet-visual-studio/3_EmitLog/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/3_EmitLog/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index 4e787e38..a28e0458 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {164DB92B-2FE7-424C-8F79-EC23998F568B} Exe - _3_ReceiveLogs - 3_ReceiveLogs - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/3_ReceiveLogs/App.config b/dotnet-visual-studio/3_ReceiveLogs/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/3_ReceiveLogs/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/3_ReceiveLogs/packages.config b/dotnet-visual-studio/3_ReceiveLogs/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/3_ReceiveLogs/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index 1e1c428e..a28e0458 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {74E16495-2A01-4314-BE72-8ADAE64666BC} Exe - _4_EmitLogDirect - 4_EmitLogDirect - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_EmitLogDirect/App.config b/dotnet-visual-studio/4_EmitLogDirect/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/4_EmitLogDirect/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/4_EmitLogDirect/packages.config b/dotnet-visual-studio/4_EmitLogDirect/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/4_EmitLogDirect/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index 46daa108..a28e0458 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44} Exe - _4_ReceiveLogsDirect - 4_ReceiveLogsDirect - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/App.config b/dotnet-visual-studio/4_ReceiveLogsDirect/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config b/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index de4caf87..a28e0458 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {86A66C9E-E479-4EA1-803D-E703F77581DC} Exe - _5_EmitLogTopic - 5_EmitLogTopic - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_EmitLogTopic/App.config b/dotnet-visual-studio/5_EmitLogTopic/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/5_EmitLogTopic/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/5_EmitLogTopic/packages.config b/dotnet-visual-studio/5_EmitLogTopic/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/5_EmitLogTopic/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index d2a42d6c..a28e0458 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6} Exe - _5_ReceiveLogsTopic - 5_ReceiveLogsTopic - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/App.config b/dotnet-visual-studio/5_ReceiveLogsTopic/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config b/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index a41fdf25..a28e0458 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -1,57 +1,11 @@ - - - + + - Debug - AnyCPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB} Exe - _6_RPCCLient - 6_RPCCLient - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCClient/App.config b/dotnet-visual-studio/6_RPCClient/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/6_RPCClient/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/6_RPCClient/packages.config b/dotnet-visual-studio/6_RPCClient/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/6_RPCClient/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index 1435f261..a28e0458 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {FD2191EB-380C-426D-A629-53DF095E6295} Exe - _6_RPCServer - 6_RPCServer - v4.6.1 - 512 - true - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE + netcoreapp3.1 + - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - + - - \ No newline at end of file + diff --git a/dotnet-visual-studio/6_RPCServer/App.config b/dotnet-visual-studio/6_RPCServer/App.config deleted file mode 100644 index bae5d6d8..00000000 --- a/dotnet-visual-studio/6_RPCServer/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/6_RPCServer/packages.config b/dotnet-visual-studio/6_RPCServer/packages.config deleted file mode 100644 index e33b2839..00000000 --- a/dotnet-visual-studio/6_RPCServer/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj index 3041c35b..a28e0458 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -1,55 +1,11 @@ - - - - - Debug - AnyCPU - {A46637FF-A028-4FF9-A70F-82CB32EC3A74} - Exe - _7_PublisherConfirms - 7_PublisherConfirms - v4.6.1 - 512 - true - AnyCPU - prompt - 4 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - - - pdbonly - true - bin\Release\ - TRACE - - - - - ..\packages\RabbitMQ.Client.6.1.0\lib\net461\RabbitMQ.Client.dll - - - - ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - - \ No newline at end of file + + + + Exe + netcoreapp3.1 + + + + + + diff --git a/dotnet-visual-studio/7_PublisherConfirms/App.config b/dotnet-visual-studio/7_PublisherConfirms/App.config deleted file mode 100644 index 45437954..00000000 --- a/dotnet-visual-studio/7_PublisherConfirms/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/dotnet-visual-studio/7_PublisherConfirms/packages.config b/dotnet-visual-studio/7_PublisherConfirms/packages.config deleted file mode 100644 index b9ebed43..00000000 --- a/dotnet-visual-studio/7_PublisherConfirms/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dotnet-visual-studio/RabbitMQ.Tutorials.sln b/dotnet-visual-studio/RabbitMQ.Tutorials.sln index 3073fc8d..520010ca 100644 --- a/dotnet-visual-studio/RabbitMQ.Tutorials.sln +++ b/dotnet-visual-studio/RabbitMQ.Tutorials.sln @@ -27,13 +27,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCClient", "6_RPCClient\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCServer", "6_RPCServer\6_RPCServer.csproj", "{FD2191EB-380C-426D-A629-53DF095E6295}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1CAFD4AB-D050-49DF-97B5-EEC43D4D1EA0}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "7_PublisherConfirms", "7_PublisherConfirms\7_PublisherConfirms.csproj", "{A46637FF-A028-4FF9-A70F-82CB32EC3A74}" EndProject Global From 72852d463e809868778ecc6a6709c31bf3926645 Mon Sep 17 00:00:00 2001 From: Karl-Johan Grahn Date: Thu, 27 Aug 2020 10:11:17 +0200 Subject: [PATCH 187/659] Handle KeyboardInterupt --- python/receive.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/python/receive.py b/python/receive.py index 56754462..dfb04950 100755 --- a/python/receive.py +++ b/python/receive.py @@ -1,19 +1,26 @@ #!/usr/bin/env python -import pika +import pika, sys, os -connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) -channel = connection.channel() +def main(): + connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + channel = connection.channel() -channel.queue_declare(queue='hello') + channel.queue_declare(queue='hello') + def callback(ch, method, properties, body): + print(" [x] Received %r" % body) -def callback(ch, method, properties, body): - print(" [x] Received %r" % body) + channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) + print(' [*] Waiting for messages. To exit press CTRL+C') + channel.start_consuming() -channel.basic_consume( - queue='hello', on_message_callback=callback, auto_ack=True) - -print(' [*] Waiting for messages. To exit press CTRL+C') -channel.start_consuming() +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Interrupted') + try: + sys.exit(0) + except SystemExit: + os._exit(0) From 5c42854978dd3161c52e3d4c2c7f2ff08f4b26f8 Mon Sep 17 00:00:00 2001 From: Karl-Johan Grahn Date: Thu, 27 Aug 2020 11:50:59 +0200 Subject: [PATCH 188/659] Decode body --- python/worker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/worker.py b/python/worker.py index 55f6adac..472a65ff 100755 --- a/python/worker.py +++ b/python/worker.py @@ -11,7 +11,7 @@ def callback(ch, method, properties, body): - print(" [x] Received %r" % body) + print(" [x] Received %r" % body.decode()) time.sleep(body.count(b'.')) print(" [x] Done") ch.basic_ack(delivery_tag=method.delivery_tag) From e1553ba7879c85ea1f42fc634f06f595d0ebc745 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 27 Aug 2020 16:07:34 +0300 Subject: [PATCH 189/659] Apply #275, #276 to more Python tutorials --- python/receive.py | 2 +- python/receive_logs.py | 39 ++++++++++++++++----------- python/receive_logs_direct.py | 51 +++++++++++++++++++++-------------- python/receive_logs_topic.py | 51 +++++++++++++++++++++-------------- 4 files changed, 87 insertions(+), 56 deletions(-) diff --git a/python/receive.py b/python/receive.py index dfb04950..dee87434 100755 --- a/python/receive.py +++ b/python/receive.py @@ -8,7 +8,7 @@ def main(): channel.queue_declare(queue='hello') def callback(ch, method, properties, body): - print(" [x] Received %r" % body) + print(" [x] Received %r" % body.decode()) channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) diff --git a/python/receive_logs.py b/python/receive_logs.py index fd9bbfb6..5349c281 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -1,25 +1,34 @@ #!/usr/bin/env python -import pika +import pika, sys, os -connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) -channel = connection.channel() +def main(): + connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) + channel = connection.channel() -channel.exchange_declare(exchange='logs', exchange_type='fanout') + channel.exchange_declare(exchange='logs', exchange_type='fanout') -result = channel.queue_declare(queue='', exclusive=True) -queue_name = result.method.queue + result = channel.queue_declare(queue='', exclusive=True) + queue_name = result.method.queue -channel.queue_bind(exchange='logs', queue=queue_name) + channel.queue_bind(exchange='logs', queue=queue_name) -print(' [*] Waiting for logs. To exit press CTRL+C') + def callback(ch, method, properties, body): + print(" [x] %r" % body.decode()) + print(' [*] Waiting for logs. To exit press CTRL+C') + channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) -def callback(ch, method, properties, body): - print(" [x] %r" % body) + channel.start_consuming() -channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) - -channel.start_consuming() +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Interrupted') + try: + sys.exit(0) + except SystemExit: + os._exit(0) diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index 91128e80..725c0936 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -1,33 +1,44 @@ #!/usr/bin/env python -import pika -import sys +import pika, sys, os -connection = pika.BlockingConnection( +def main(): + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) -channel = connection.channel() + channel = connection.channel() -channel.exchange_declare(exchange='direct_logs', exchange_type='direct') + channel.exchange_declare(exchange='direct_logs', exchange_type='direct') -result = channel.queue_declare(queue='', exclusive=True) -queue_name = result.method.queue + result = channel.queue_declare(queue='', exclusive=True) + queue_name = result.method.queue -severities = sys.argv[1:] -if not severities: - sys.stderr.write("Usage: %s [info] [warning] [error]\n" % sys.argv[0]) - sys.exit(1) + severities = sys.argv[1:] + if not severities: + sys.stderr.write("Usage: %s [info] [warning] [error]\n" % sys.argv[0]) + sys.exit(1) -for severity in severities: - channel.queue_bind( - exchange='direct_logs', queue=queue_name, routing_key=severity) + for severity in severities: + channel.queue_bind( + exchange='direct_logs', queue=queue_name, routing_key=severity) -print(' [*] Waiting for logs. To exit press CTRL+C') + print(' [*] Waiting for logs. To exit press CTRL+C') -def callback(ch, method, properties, body): - print(" [x] %r:%r" % (method.routing_key, body)) + def callback(ch, method, properties, body): + print(" [x] %r:%r" % (method.routing_key, body.decode())) -channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) + channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) -channel.start_consuming() + channel.start_consuming() + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Interrupted') + try: + sys.exit(0) + except SystemExit: + os._exit(0) diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index a7255a7a..52e3932a 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -1,33 +1,44 @@ #!/usr/bin/env python -import pika -import sys +import pika, sys, os -connection = pika.BlockingConnection( +def main(): + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) -channel = connection.channel() + channel = connection.channel() -channel.exchange_declare(exchange='topic_logs', exchange_type='topic') + channel.exchange_declare(exchange='topic_logs', exchange_type='topic') -result = channel.queue_declare(queue='', exclusive=True) -queue_name = result.method.queue + result = channel.queue_declare(queue='', exclusive=True) + queue_name = result.method.queue -binding_keys = sys.argv[1:] -if not binding_keys: - sys.stderr.write("Usage: %s [binding_key]...\n" % sys.argv[0]) - sys.exit(1) + binding_keys = sys.argv[1:] + if not binding_keys: + sys.stderr.write("Usage: %s [binding_key]...\n" % sys.argv[0]) + sys.exit(1) -for binding_key in binding_keys: - channel.queue_bind( - exchange='topic_logs', queue=queue_name, routing_key=binding_key) + for binding_key in binding_keys: + channel.queue_bind( + exchange='topic_logs', queue=queue_name, routing_key=binding_key) -print(' [*] Waiting for logs. To exit press CTRL+C') + print(' [*] Waiting for logs. To exit press CTRL+C') -def callback(ch, method, properties, body): - print(" [x] %r:%r" % (method.routing_key, body)) + def callback(ch, method, properties, body): + print(" [x] %r:%r" % (method.routing_key, body.decode())) -channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) + channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) -channel.start_consuming() + channel.start_consuming() + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Interrupted') + try: + sys.exit(0) + except SystemExit: + os._exit(0) From 8cc00b1f3ff6c65144169e29a3f9f09628d48ef9 Mon Sep 17 00:00:00 2001 From: Michal Malek Date: Fri, 20 Nov 2020 11:39:32 +0100 Subject: [PATCH 190/659] Rust: add tutorial 6; use async; consistent file layout * Update all tutorials to use async-await syntax * Add tutorial 6 * Use new async lapin library * Use file naming and layout consistent with other languages * Update tokio dependency to 0.3 --- rust/.gitignore | 79 +- rust/01-hello-world/Cargo.lock | 1234 ---------------- rust/01-hello-world/Cargo.toml | 15 - rust/01-hello-world/src/bin/receive.rs | 60 - rust/01-hello-world/src/bin/send.rs | 46 - rust/02-work-queues/Cargo.lock | 1250 ----------------- rust/02-work-queues/Cargo.toml | 16 - rust/02-work-queues/src/bin/new-task.rs | 52 - rust/02-work-queues/src/bin/worker.rs | 63 - rust/03-publish-subscribe/Cargo.lock | 1250 ----------------- rust/03-publish-subscribe/Cargo.toml | 16 - rust/03-publish-subscribe/src/bin/publish.rs | 58 - .../03-publish-subscribe/src/bin/subscribe.rs | 94 -- rust/04-routing/Cargo.lock | 1250 ----------------- rust/04-routing/Cargo.toml | 16 - rust/04-routing/src/bin/emit-direct.rs | 62 - rust/04-routing/src/bin/receive-direct.rs | 103 -- rust/05-topics/Cargo.lock | 1250 ----------------- rust/05-topics/Cargo.toml | 16 - rust/05-topics/src/bin/emit-topic.rs | 62 - rust/05-topics/src/bin/receive-topic.rs | 103 -- rust/Cargo.lock | 1065 ++++++++++++++ rust/Cargo.toml | 11 + rust/README.md | 79 +- rust/src/bin/emit_log.rs | 41 + rust/src/bin/emit_log_direct.rs | 46 + rust/src/bin/emit_log_topic.rs | 46 + rust/src/bin/new_task.rs | 38 + rust/src/bin/receive.rs | 37 + rust/src/bin/receive_logs.rs | 59 + rust/src/bin/receive_logs_direct.rs | 73 + rust/src/bin/receive_logs_topic.rs | 73 + rust/src/bin/rpc_client.rs | 117 ++ rust/src/bin/rpc_server.rs | 100 ++ rust/src/bin/send.rs | 32 + rust/src/bin/worker.rs | 41 + 36 files changed, 1811 insertions(+), 7142 deletions(-) delete mode 100644 rust/01-hello-world/Cargo.lock delete mode 100644 rust/01-hello-world/Cargo.toml delete mode 100644 rust/01-hello-world/src/bin/receive.rs delete mode 100644 rust/01-hello-world/src/bin/send.rs delete mode 100644 rust/02-work-queues/Cargo.lock delete mode 100644 rust/02-work-queues/Cargo.toml delete mode 100644 rust/02-work-queues/src/bin/new-task.rs delete mode 100644 rust/02-work-queues/src/bin/worker.rs delete mode 100644 rust/03-publish-subscribe/Cargo.lock delete mode 100644 rust/03-publish-subscribe/Cargo.toml delete mode 100644 rust/03-publish-subscribe/src/bin/publish.rs delete mode 100644 rust/03-publish-subscribe/src/bin/subscribe.rs delete mode 100644 rust/04-routing/Cargo.lock delete mode 100644 rust/04-routing/Cargo.toml delete mode 100644 rust/04-routing/src/bin/emit-direct.rs delete mode 100644 rust/04-routing/src/bin/receive-direct.rs delete mode 100644 rust/05-topics/Cargo.lock delete mode 100644 rust/05-topics/Cargo.toml delete mode 100644 rust/05-topics/src/bin/emit-topic.rs delete mode 100644 rust/05-topics/src/bin/receive-topic.rs create mode 100644 rust/Cargo.lock create mode 100644 rust/Cargo.toml create mode 100644 rust/src/bin/emit_log.rs create mode 100644 rust/src/bin/emit_log_direct.rs create mode 100644 rust/src/bin/emit_log_topic.rs create mode 100644 rust/src/bin/new_task.rs create mode 100644 rust/src/bin/receive.rs create mode 100644 rust/src/bin/receive_logs.rs create mode 100644 rust/src/bin/receive_logs_direct.rs create mode 100644 rust/src/bin/receive_logs_topic.rs create mode 100644 rust/src/bin/rpc_client.rs create mode 100644 rust/src/bin/rpc_server.rs create mode 100644 rust/src/bin/send.rs create mode 100644 rust/src/bin/worker.rs diff --git a/rust/.gitignore b/rust/.gitignore index 374689d6..c0094bb5 100644 --- a/rust/.gitignore +++ b/rust/.gitignore @@ -1,78 +1 @@ -# Override the root-level .gitignore -!* - -# Build output -**/build/** -**/target/** -# Clib dependencies -**/deps/** -# VS Code -**/.vscode/** -# Test binaries -*.test -# Test coverage information files -*.gcda -*.gcda.info -*.gcno -# Debugger outputs -*.bin -*.cap -*.trace -# Output screenshots -/*.bmp - -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf - -*.log -*.swp +!bin/ diff --git a/rust/01-hello-world/Cargo.lock b/rust/01-hello-world/Cargo.lock deleted file mode 100644 index 99cd6d31..00000000 --- a/rust/01-hello-world/Cargo.lock +++ /dev/null @@ -1,1234 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-codegen" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayvec" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cookie-factory" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-deque" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "digest" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "generic-array" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "handlebars" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-async" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-futures" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.58" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "maplit" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "mio" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "miow" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "net2" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num_cpus" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "opaque-debug" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "owning_ref" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "pest" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_generator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_meta" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ryu" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "same-file" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha-1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-io" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-sync" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-timer" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-trace-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-udp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tutorial-01" -version = "0.1.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "typenum" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-trie" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "walkdir" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" -"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" -"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" -"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" -"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" -"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" -"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" -"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" -"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" -"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" -"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" -"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" -"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" -"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" -"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" -"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" -"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" -"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" -"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" -"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/01-hello-world/Cargo.toml b/rust/01-hello-world/Cargo.toml deleted file mode 100644 index 3a716c1d..00000000 --- a/rust/01-hello-world/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "tutorial-01" -version = "0.1.0" -authors = ["Adel Vilkov "] -edition = "2018" - -[dependencies] -failure = "^0.1" -futures = "^0.1" -lapin-futures = "^0.18" -tokio = "^0.1.8" -tokio-codec = "^0.1" -tokio-io = "^0.1" -tokio-sync = "^0.1" -tokio-timer = "^0.2" \ No newline at end of file diff --git a/rust/01-hello-world/src/bin/receive.rs b/rust/01-hello-world/src/bin/receive.rs deleted file mode 100644 index 1c3b5e0f..00000000 --- a/rust/01-hello-world/src/bin/receive.rs +++ /dev/null @@ -1,60 +0,0 @@ -use crate::lapin::channel::{BasicConsumeOptions, QueueDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use futures::stream::Stream; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, heartbeat)| { - // do a heartbeat on a dedicated thread to keep us connected - tokio::spawn(heartbeat.map_err(|_| ())); - // create a channel - client.create_channel().map_err(Error::from) - }) - .and_then(|channel| { - let ch = channel.clone(); - channel - // declare a queue - .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) - .and_then(move |queue| { - // create a message receiver - channel.basic_consume( - &queue, - "consumer", - BasicConsumeOptions::default(), - FieldTable::new(), - ) - }) - .and_then(|stream| { - // print received messages - stream.for_each(move |message| { - println!( - "Received: {:?}", - std::str::from_utf8(&message.data).unwrap() - ); - ch.basic_ack(message.delivery_tag, false) - }) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/01-hello-world/src/bin/send.rs b/rust/01-hello-world/src/bin/send.rs deleted file mode 100644 index ef635a9e..00000000 --- a/rust/01-hello-world/src/bin/send.rs +++ /dev/null @@ -1,46 +0,0 @@ -use crate::lapin::channel::{BasicProperties, BasicPublishOptions, QueueDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel - .and_then(|channel| { - channel - // declare a new queue - .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) - .and_then(move |_| { - // if successful, send a message - channel - .basic_publish( - "", - "hello", - b"Hello World!".to_vec(), - BasicPublishOptions::default(), - BasicProperties::default(), - ) - .map(|_| println!("Sent a message")) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/02-work-queues/Cargo.lock b/rust/02-work-queues/Cargo.lock deleted file mode 100644 index a0d97662..00000000 --- a/rust/02-work-queues/Cargo.lock +++ /dev/null @@ -1,1250 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-codegen" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayvec" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cookie-factory" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-deque" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "digest" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "either" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "generic-array" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "handlebars" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itertools" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-async" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-futures" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.58" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "maplit" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "mio" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "miow" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "net2" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num_cpus" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "opaque-debug" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "owning_ref" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "pest" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_generator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_meta" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ryu" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "same-file" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha-1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-io" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-sync" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-timer" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-trace-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-udp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tutorial-02" -version = "0.1.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "typenum" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-trie" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "walkdir" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" -"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" -"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" -"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" -"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" -"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" -"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" -"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" -"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" -"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" -"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" -"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" -"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" -"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" -"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" -"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" -"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" -"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" -"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" -"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" -"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/02-work-queues/Cargo.toml b/rust/02-work-queues/Cargo.toml deleted file mode 100644 index 44dee4bc..00000000 --- a/rust/02-work-queues/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tutorial-02" -version = "0.1.0" -authors = ["Adel Vilkov "] -edition = "2018" - -[dependencies] -failure = "^0.1" -futures = "^0.1" -itertools = "^0.8.0" -lapin-futures = "^0.18" -tokio = "^0.1.8" -tokio-codec = "^0.1" -tokio-io = "^0.1" -tokio-sync = "^0.1" -tokio-timer = "^0.2" \ No newline at end of file diff --git a/rust/02-work-queues/src/bin/new-task.rs b/rust/02-work-queues/src/bin/new-task.rs deleted file mode 100644 index 79215147..00000000 --- a/rust/02-work-queues/src/bin/new-task.rs +++ /dev/null @@ -1,52 +0,0 @@ -use crate::lapin::channel::{BasicProperties, BasicPublishOptions, QueueDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use itertools::free::join; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let message = match args.len() { - 0 => "hello".to_string(), - _ => join(args, " "), - }; - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel - .and_then(|channel| { - channel - // declare a new queue - .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) - .and_then(move |_| { - // if successful, send a message - channel - .basic_publish( - "", - "hello", - message.as_bytes().to_vec(), - BasicPublishOptions::default(), - BasicProperties::default(), - ) - .map(|_| println!("Sent a message")) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/02-work-queues/src/bin/worker.rs b/rust/02-work-queues/src/bin/worker.rs deleted file mode 100644 index 6e316623..00000000 --- a/rust/02-work-queues/src/bin/worker.rs +++ /dev/null @@ -1,63 +0,0 @@ -use crate::lapin::channel::{BasicConsumeOptions, QueueDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use futures::stream::Stream; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; -use std::thread; -use std::time::Duration; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, heartbeat)| { - // do a heartbeat on a dedicated thread to keep us connected - tokio::spawn(heartbeat.map_err(|_| ())); - // create a channel - client.create_channel().map_err(Error::from) - }) - .and_then(|channel| { - let ch = channel.clone(); - channel - // declare a queue - .queue_declare("hello", QueueDeclareOptions::default(), FieldTable::new()) - .and_then(move |queue| { - // create a message receiver - channel.basic_consume( - &queue, - "consumer", - BasicConsumeOptions::default(), - FieldTable::new(), - ) - }) - .and_then(|stream| { - // print received messages - stream.for_each(move |message| { - let text = std::str::from_utf8(&message.data).unwrap(); - println!("Received: {:?}", text); - // Imitate a second of work per one symbol in message - thread::sleep(Duration::from_secs(text.len() as u64)); - println!("Done"); - ch.basic_ack(message.delivery_tag, false) - }) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/03-publish-subscribe/Cargo.lock b/rust/03-publish-subscribe/Cargo.lock deleted file mode 100644 index da6da6a2..00000000 --- a/rust/03-publish-subscribe/Cargo.lock +++ /dev/null @@ -1,1250 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-codegen" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayvec" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cookie-factory" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-deque" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "digest" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "either" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "generic-array" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "handlebars" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itertools" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-async" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-futures" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.58" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "maplit" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "mio" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "miow" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "net2" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num_cpus" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "opaque-debug" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "owning_ref" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "pest" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_generator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_meta" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ryu" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "same-file" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha-1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-io" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-sync" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-timer" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-trace-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-udp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tutorial-03" -version = "0.1.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "typenum" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-trie" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "walkdir" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" -"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" -"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" -"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" -"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" -"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" -"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" -"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" -"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" -"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" -"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" -"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" -"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" -"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" -"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" -"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" -"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" -"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" -"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" -"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" -"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/03-publish-subscribe/Cargo.toml b/rust/03-publish-subscribe/Cargo.toml deleted file mode 100644 index a4c692a1..00000000 --- a/rust/03-publish-subscribe/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tutorial-03" -version = "0.1.0" -authors = ["Adel Vilkov "] -edition = "2018" - -[dependencies] -failure = "^0.1" -futures = "^0.1" -itertools = "^0.8.0" -lapin-futures = "^0.18" -tokio = "^0.1.8" -tokio-codec = "^0.1" -tokio-io = "^0.1" -tokio-sync = "^0.1" -tokio-timer = "^0.2" diff --git a/rust/03-publish-subscribe/src/bin/publish.rs b/rust/03-publish-subscribe/src/bin/publish.rs deleted file mode 100644 index 153a9e70..00000000 --- a/rust/03-publish-subscribe/src/bin/publish.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use itertools::free::join; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let message = match args.len() { - 0 => "hello".to_string(), - _ => join(args, " "), - }; - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel - .and_then(move |c| { - let channel = c.clone(); - channel - // declare a new exchange - .exchange_declare( - "logs", - "fanout", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - .and_then(move |ch| { - // if successful, send a message - ch.basic_publish( - "logs", - "", - message.as_bytes().to_vec(), - BasicPublishOptions::default(), - BasicProperties::default(), - ) - .map(|_| println!("Sent a message")) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/03-publish-subscribe/src/bin/subscribe.rs b/rust/03-publish-subscribe/src/bin/subscribe.rs deleted file mode 100644 index b7ef0ba2..00000000 --- a/rust/03-publish-subscribe/src/bin/subscribe.rs +++ /dev/null @@ -1,94 +0,0 @@ -use crate::lapin::channel::{ - BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, -}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use futures::stream::Stream; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, heartbeat)| { - // do a heartbeat on a dedicated thread to keep us connected - tokio::spawn(heartbeat.map_err(|_| ())); - // create a channel - client.create_channel().map_err(Error::from) - }) - .and_then(|c| { - let channel = c.clone(); - // generate an queue with a random name which deletes itself after use - let queue_options = QueueDeclareOptions { - durable: false, - exclusive: true, - auto_delete: true, - nowait: false, - passive: false, - ticket: 0u16, - }; - channel - .exchange_declare( - "logs", - "fanout", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - // declare a queue - .and_then(move |ch| { - // declare a queue using specified options - // if name is empty it will be generated - ch.queue_declare("", queue_options, FieldTable::new()) - .map(move |queue| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // bind our queue to declared exchange - let name = queue.name(); - ch.queue_bind( - &name, - "logs", - "", - QueueBindOptions::default(), - FieldTable::new(), - ) - .map(move |_| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // create a message receiver - ch.basic_consume( - &queue, - "consumer", - BasicConsumeOptions::default(), - FieldTable::new(), - ) - .map(move |s| (ch.clone(), s)) - }) - .and_then(move |(ch, stream)| { - // print received messages - stream.for_each(move |message| { - let text = std::str::from_utf8(&message.data).unwrap(); - println!("Received: {:?}", text); - ch.basic_ack(message.delivery_tag, false) - }) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/04-routing/Cargo.lock b/rust/04-routing/Cargo.lock deleted file mode 100644 index 81940baf..00000000 --- a/rust/04-routing/Cargo.lock +++ /dev/null @@ -1,1250 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-codegen" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayvec" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cookie-factory" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-deque" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "digest" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "either" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "generic-array" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "handlebars" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itertools" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-async" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-futures" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.58" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "maplit" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "mio" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "miow" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "net2" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num_cpus" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "opaque-debug" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "owning_ref" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "pest" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_generator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_meta" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ryu" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "same-file" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha-1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-io" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-sync" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-timer" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-trace-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-udp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tutorial-04" -version = "0.1.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "typenum" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-trie" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "walkdir" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" -"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" -"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" -"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" -"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" -"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" -"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" -"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" -"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" -"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" -"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" -"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" -"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" -"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" -"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" -"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" -"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" -"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" -"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" -"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" -"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/04-routing/Cargo.toml b/rust/04-routing/Cargo.toml deleted file mode 100644 index 6ea49f60..00000000 --- a/rust/04-routing/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tutorial-04" -version = "0.1.0" -authors = ["Adel Vilkov "] -edition = "2018" - -[dependencies] -failure = "^0.1" -futures = "^0.1" -itertools = "^0.8.0" -lapin-futures = "^0.18" -tokio = "^0.1.8" -tokio-codec = "^0.1" -tokio-io = "^0.1" -tokio-sync = "^0.1" -tokio-timer = "^0.2" diff --git a/rust/04-routing/src/bin/emit-direct.rs b/rust/04-routing/src/bin/emit-direct.rs deleted file mode 100644 index 876b9cff..00000000 --- a/rust/04-routing/src/bin/emit-direct.rs +++ /dev/null @@ -1,62 +0,0 @@ -use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use itertools::free::join; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let severity = match args.len() { - 0 => "info".to_string(), - _ => args.first().unwrap().clone(), - }; - let message = match args.len() { - x if x < 2 => "Hello, world!".to_string(), - _ => join(args[1..].iter(), " "), - }; - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel - .and_then(move |c| { - let channel = c.clone(); - channel - // declare a new exchange - .exchange_declare( - "direct_logs", - "direct", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - .and_then(move |ch| { - // if successful, send a message - ch.basic_publish( - "direct_logs", - &severity, - message.as_bytes().to_vec(), - BasicPublishOptions::default(), - BasicProperties::default(), - ) - .map(|_| println!("Sent a message")) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/04-routing/src/bin/receive-direct.rs b/rust/04-routing/src/bin/receive-direct.rs deleted file mode 100644 index 368d81ca..00000000 --- a/rust/04-routing/src/bin/receive-direct.rs +++ /dev/null @@ -1,103 +0,0 @@ -use crate::lapin::channel::{ - BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, -}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use futures::stream::Stream; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, heartbeat)| { - // do a heartbeat on a dedicated thread to keep us connected - tokio::spawn(heartbeat.map_err(|_| ())); - // create a channel - client.create_channel().map_err(Error::from) - }) - .and_then(|c| { - let channel = c.clone(); - // generate an queue with a random name which deletes itself after use - let queue_options = QueueDeclareOptions { - durable: false, - exclusive: true, - auto_delete: true, - nowait: false, - passive: false, - ticket: 0u16, - }; - channel - .exchange_declare( - "direct_logs", - "direct", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - // declare a queue - .and_then(move |ch| { - // declare a queue using specified options - // if name is empty it will be generated - ch.queue_declare("", queue_options, FieldTable::new()) - .map(move |queue| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // bind our queue to declared exchange - let name = queue.name(); - let c = ch.clone(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let severities = match args.len() { - 0 => vec!["info".to_string()], - _ => args, - }; - let binds = severities.into_iter().map(move |severity| { - c.queue_bind( - &name, - "direct_logs", - &severity, - QueueBindOptions::default(), - FieldTable::new(), - ) - }); - futures::future::join_all(binds).map(move |_| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // create a message receiver - ch.basic_consume( - &queue, - "consumer", - BasicConsumeOptions::default(), - FieldTable::new(), - ) - .map(move |s| (ch.clone(), s)) - }) - .and_then(move |(ch, stream)| { - // print received messages - stream.for_each(move |message| { - let severity = &message.routing_key; - let text = std::str::from_utf8(&message.data).unwrap(); - println!("Received: [{:?}] {:?}", severity, text); - ch.basic_ack(message.delivery_tag, false) - }) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/05-topics/Cargo.lock b/rust/05-topics/Cargo.lock deleted file mode 100644 index 3456df2a..00000000 --- a/rust/05-topics/Cargo.lock +++ /dev/null @@ -1,1250 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-codegen" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "amq-protocol-types" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayvec" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cookie-factory" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-deque" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "digest" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "either" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "generic-array" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "handlebars" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itertools" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-async" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lapin-futures" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.58" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "maplit" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "mio" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "miow" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "net2" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num_cpus" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "opaque-debug" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "owning_ref" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "pest" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_generator" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pest_meta" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quick-error" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "quote" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ryu" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "same-file" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha-1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-io" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-sync" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-timer" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-trace-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-udp" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tutorial-05" -version = "0.1.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "typenum" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-trie" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ucd-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "walkdir" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" -"checksum amq-protocol 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d687fc53c2d85f31d22d91d8b62a7a6f8fc2b0e8dfd2c23d52a0433db4d01f2b" -"checksum amq-protocol-codegen 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b367f31f4feba2ca7959f476f81076db213734a053d2b0ab78bcffab0acbfae6" -"checksum amq-protocol-types 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6857d51c6c9e9b45eacd355917c0e792cd3ceeaeab76a75d6475ea8980009fea" -"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" -"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" -"checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" -"checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cookie-factory 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98a479f8099cc5ac64915a3dd76c87be27f929ba406ad705aacb13f19b791207" -"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" -"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" -"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" -"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" -"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" -"checksum handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lapin-async 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1ad739d56453c51f7af0b74a4df4f60c83367f9042ccbb83d64b3796ea4095" -"checksum lapin-futures 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0de570ca372f3c6c317ffb382c45ed48ea7da013bfd20380cd53f37354095b4" -"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" -"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" -"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" -"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" -"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" -"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" -"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" -"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -"checksum pest_generator 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63120576c4efd69615b5537d3d052257328a4ca82876771d6944424ccfd9f646" -"checksum pest_meta 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f249ea6de7c7b7aba92b4ff4376a994c6dbd98fd2166c89d5c4947397ecb574d" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum regex 1.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f0a0bcab2fd7d1d7c54fa9eae6f43eddeb9ce2e7352f8518a814a4f65d60c58" -"checksum regex-syntax 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfd8681eebe297b81d98498869d4aae052137651ad7b96822f09ceb690d0a96" -"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" -"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" -"checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" -"checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" -"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum syn 0.15.34 (registry+https://github.com/rust-lang/crates.io-index)" = "a1393e4a97a19c01e900df2aec855a29f71cf02c402e2f443b8d2747c25c5dbe" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" -"checksum tokio-sync 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b2f843ffdf8d6e1f90bddd48da43f99ab071660cd92b7ec560ef3cdfd7a409a" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" -"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" -"checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" -"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" -"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/rust/05-topics/Cargo.toml b/rust/05-topics/Cargo.toml deleted file mode 100644 index 19fc5261..00000000 --- a/rust/05-topics/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tutorial-05" -version = "0.1.0" -authors = ["Adel Vilkov "] -edition = "2018" - -[dependencies] -failure = "^0.1" -futures = "^0.1" -itertools = "^0.8.0" -lapin-futures = "^0.18" -tokio = "^0.1.8" -tokio-codec = "^0.1" -tokio-io = "^0.1" -tokio-sync = "^0.1" -tokio-timer = "^0.2" diff --git a/rust/05-topics/src/bin/emit-topic.rs b/rust/05-topics/src/bin/emit-topic.rs deleted file mode 100644 index da6891b4..00000000 --- a/rust/05-topics/src/bin/emit-topic.rs +++ /dev/null @@ -1,62 +0,0 @@ -use crate::lapin::channel::{BasicProperties, BasicPublishOptions, ExchangeDeclareOptions}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use itertools::free::join; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let topic = match args.len() { - 0 => "anonymous.info".to_string(), - _ => args.first().unwrap().clone(), - }; - let message = match args.len() { - x if x < 2 => "Hello, world!".to_string(), - _ => join(args[1..].iter(), " "), - }; - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, _)| client.create_channel().map_err(Error::from)) // create a channel - .and_then(move |c| { - let channel = c.clone(); - channel - // declare a new exchange - .exchange_declare( - "topic_logs", - "topic", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - .and_then(move |ch| { - // if successful, send a message - ch.basic_publish( - "topic_logs", - &topic, - message.as_bytes().to_vec(), - BasicPublishOptions::default(), - BasicProperties::default(), - ) - .map(|_| println!("Sent a message")) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/05-topics/src/bin/receive-topic.rs b/rust/05-topics/src/bin/receive-topic.rs deleted file mode 100644 index 7d3dedf5..00000000 --- a/rust/05-topics/src/bin/receive-topic.rs +++ /dev/null @@ -1,103 +0,0 @@ -use crate::lapin::channel::{ - BasicConsumeOptions, ExchangeDeclareOptions, QueueBindOptions, QueueDeclareOptions, -}; -use crate::lapin::client::ConnectionOptions; -use crate::lapin::types::FieldTable; -use failure::Error; -use futures::future::Future; -use futures::stream::Stream; -use lapin_futures as lapin; -use tokio; -use tokio::net::TcpStream; -use tokio::runtime::Runtime; - -use lapin::client::Client as AMQPClient; - -fn main() { - let addr = "127.0.0.1:5672".parse().unwrap(); - - Runtime::new() - .unwrap() - .block_on_all( - TcpStream::connect(&addr) // try to initiate a TCP connection - .map_err(Error::from) - .and_then(|stream| { - // if successful, pass it to AMQP client - AMQPClient::connect(stream, ConnectionOptions::default()).map_err(Error::from) - }) - .and_then(|(client, heartbeat)| { - // do a heartbeat on a dedicated thread to keep us connected - tokio::spawn(heartbeat.map_err(|_| ())); - // create a channel - client.create_channel().map_err(Error::from) - }) - .and_then(|c| { - let channel = c.clone(); - // generate an queue with a random name which deletes itself after use - let queue_options = QueueDeclareOptions { - durable: false, - exclusive: true, - auto_delete: true, - nowait: false, - passive: false, - ticket: 0u16, - }; - channel - .exchange_declare( - "topic_logs", - "topic", - ExchangeDeclareOptions::default(), - FieldTable::new(), - ) - .map(move |_| channel.clone()) - // declare a queue - .and_then(move |ch| { - // declare a queue using specified options - // if name is empty it will be generated - ch.queue_declare("", queue_options, FieldTable::new()) - .map(move |queue| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // bind our queue to declared exchange - let name = queue.name(); - let c = ch.clone(); - let args: Vec<_> = std::env::args().skip(1).collect(); - let topics = match args.len() { - 0 => vec!["anonymous.info".to_string()], - _ => args, - }; - let binds = topics.into_iter().map(move |topic| { - c.queue_bind( - &name, - "topic_logs", - &topic, - QueueBindOptions::default(), - FieldTable::new(), - ) - }); - futures::future::join_all(binds).map(move |_| (ch.clone(), queue)) - }) - .and_then(move |(ch, queue)| { - // create a message receiver - ch.basic_consume( - &queue, - "consumer", - BasicConsumeOptions::default(), - FieldTable::new(), - ) - .map(move |s| (ch.clone(), s)) - }) - .and_then(move |(ch, stream)| { - // print received messages - stream.for_each(move |message| { - let topic = &message.routing_key; - let text = std::str::from_utf8(&message.data).unwrap(); - println!("Received: [{:?}] {:?}", topic, text); - ch.basic_ack(message.delivery_tag, false) - }) - }) - .map_err(Error::from) - }), - ) - .expect("Failed to create tokio runtime"); -} diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 00000000..24f3996b --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,1065 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "amq-protocol" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede228647914ef8ac4ef4cfddbe3be4c23afea8d8c7f95451a2f53efe6ce8f2f" +dependencies = [ + "amq-protocol-tcp", + "amq-protocol-types", + "amq-protocol-uri", + "cookie-factory", + "nom", +] + +[[package]] +name = "amq-protocol-tcp" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4860b3d63ffb63b3ed440b78ccd549b009e0f72d995b9e9aec51e8e1af01e694" +dependencies = [ + "amq-protocol-uri", + "tcp-stream", + "tracing", +] + +[[package]] +name = "amq-protocol-types" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ebe159bbe5fff48b5702d639ba9b0a7b1b2f24c4404fe38db0cbcafd057c01" +dependencies = [ + "cookie-factory", + "nom", + "serde", + "serde_json", +] + +[[package]] +name = "amq-protocol-uri" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82403806f8fef7e9d8dc6dcb41839a47a8eab9419f9dca52ef6b19904e0047e" +dependencies = [ + "percent-encoding", + "url", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-task" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bitvec" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ba35e9565969edb811639dbebfe34edc0368e472c5018474c8eb2543397f81" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "cc" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9c6140b5a2c7db40ea56eb1821245e5362b44385c05b76288b1a599934ac87" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cloudabi" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +dependencies = [ + "bitflags", +] + +[[package]] +name = "const_fn" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab" + +[[package]] +name = "cookie-factory" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f21b581d2f0cb891554812435667bb9610d74feb1a4c6415bf09c28ff0381d" + +[[package]] +name = "core-foundation" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "const_fn", + "lazy_static", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "funty" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ba62103ce691c2fd80fbae2213dfdda9ce60804973ac6b6e97de818ea7f52c8" + +[[package]] +name = "futures" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" + +[[package]] +name = "futures-executor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" + +[[package]] +name = "futures-macro" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" + +[[package]] +name = "futures-task" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +dependencies = [ + "once_cell", +] + +[[package]] +name = "futures-util" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "instant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "lapin" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549ae1dd23261582bae51d7bc12161be435da2768e77eec709dd5676185397d6" +dependencies = [ + "amq-protocol", + "async-task", + "crossbeam-channel", + "futures-core", + "log", + "mio", + "parking_lot", + "pinky-swear", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" +dependencies = [ + "arrayvec", + "bitflags", + "cfg-if 0.1.10", + "ryu", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" + +[[package]] +name = "lock_api" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "mio" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f33bc887064ef1fd66020c9adfc45bb9f33d75a42096c81e7c56c65b75dd1a8b" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" +dependencies = [ + "socket2", + "winapi", +] + +[[package]] +name = "native-tls" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcc7939b5edc4e4f86b1b4a04bb1498afaaf871b1a6691838ed06fcb48d3a3f" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4489ccc7d668957ddf64af7cd027c081728903afa6479d35da7e99bf5728f75f" +dependencies = [ + "bitvec", + "lexical-core", + "memchr", + "version_check", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" + +[[package]] +name = "openssl" +version = "0.10.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" +dependencies = [ + "bitflags", + "cfg-if 0.1.10", + "foreign-types", + "lazy_static", + "libc", + "openssl-sys", +] + +[[package]] +name = "openssl-probe" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" + +[[package]] +name = "openssl-sys" +version = "0.9.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "pem" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59698ea79df9bf77104aefd39cc3ec990cb9693fb59c3b0a70ddf2646fdffb4b" +dependencies = [ + "base64", + "once_cell", + "regex", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" + +[[package]] +name = "pin-project-lite" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pinky-swear" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf8cda6f8e1500338634e4e3ce90ac59eb7929a1e088b6946c742be1cc44dc1" +dependencies = [ + "doc-comment", + "parking_lot", + "tracing", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rabbitmq-tutorials" +version = "1.0.0" +dependencies = [ + "futures", + "lapin", + "tokio", + "uuid", +] + +[[package]] +name = "radium" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "schannel" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +dependencies = [ + "lazy_static", + "winapi", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "smallvec" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" + +[[package]] +name = "socket2" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "redox_syscall", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tap" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36474e732d1affd3a6ed582781b3683df3d0563714c59c39591e8ff707cf078e" + +[[package]] +name = "tcp-stream" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3526e11bb30e7406a12a18b65b60ac084aa23630ee8811947354fe35c1ff2f6" +dependencies = [ + "cfg-if 1.0.0", + "mio", + "native-tls", + "pem", +] + +[[package]] +name = "tempfile" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tinyvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfe2523e6fa84ddf5e688151d4e5fddc51678de9752c6512a24714c23818d61" +dependencies = [ + "autocfg", + "futures-core", + "num_cpus", + "pin-project-lite 0.2.0", + "slab", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d30fdbb5dc2d8f91049691aa1a9d4d4ae422a21c334ce8936e5886d30c5c45" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +dependencies = [ + "cfg-if 0.1.10", + "pin-project-lite 0.1.11", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "url" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" +dependencies = [ + "rand", +] + +[[package]] +name = "vcpkg" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 00000000..5ae89d6d --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "rabbitmq-tutorials" +version = "1.0.0" +authors = ["Michal Malek "] +edition = "2018" + +[dependencies] +futures = "0.3.7" +lapin = "1.5" +tokio = { version = "0.3.3", features = ["macros", "rt-multi-thread", "stream"] } +uuid = { version = "0.8.1", features = ["v4"] } diff --git a/rust/README.md b/rust/README.md index 312176f6..d6907b99 100644 --- a/rust/README.md +++ b/rust/README.md @@ -3,7 +3,7 @@ Here you can find the Rust code examples for [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). -The examples use [lapin](https://github.com/sozu-proxy/lapin) client library. +The examples use [lapin](https://github.com/CleverCloud/lapin) client library. You should have a RabbitMQ server running on default port. @@ -12,51 +12,34 @@ You should have a RabbitMQ server running on default port. * [Rust and Cargo](https://www.rust-lang.org/tools/install) ## Code -Each tutorial is a separate crate where each source file corresponds to a -binary executable. Each cargo command should be launched in a separate shell. - -#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) -``` -cd 01-hello-world -``` -``` -cargo run --bin receive -cargo run --bin send -``` - -#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) -``` -cd 02-work-queues -``` -``` -cargo run --bin worker -cargo run --bin new-task "hi" # specify a custom message -``` - -#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) -``` -cd 03-publish-subscribe -``` -``` -cargo run --bin subscribe -cargo run --bin publish "hi" # specify a custom message -``` - -#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) -``` -cd 04-routing -``` -``` -cargo run --bin receive-direct info error # specify log levels -cargo run --bin emit-direct error "help!" # specify severity and custom message -``` - -#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) -``` -cd 05-topics -``` -``` -cargo run --bin receive-topic kern.* # specify topic filter -cargo run --bin emit-topic kern.mem "No memory left!" # specify topic and message -``` +Each cargo command should be launched in a separate shell. +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html) + + cargo run --bin receive + cargo run --bin send + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html) + + cargo run --bin worker + cargo run --bin new_task "hi" # specify a custom message + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html) + + cargo run --bin receive_logs + cargo run --bin emit_log "hi" # specify a custom message + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html) + + cargo run --bin receive_logs_direct info error # specify log levels + cargo run --bin emit_log_direct error "help!" # specify severity and custom message + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html) + + cargo run --bin receive_logs_topic kern.* # specify topic filter + cargo run --bin emit_log_topic kern.mem "No memory left!" # specify topic and message + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html) + + cargo run --bin rpc_server + cargo run --bin rpc_client diff --git a/rust/src/bin/emit_log.rs b/rust/src/bin/emit_log.rs new file mode 100644 index 00000000..9064328c --- /dev/null +++ b/rust/src/bin/emit_log.rs @@ -0,0 +1,41 @@ +use lapin::{ + options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties, ExchangeKind, +}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let args: Vec<_> = std::env::args().skip(1).collect(); + let message = match args.len() { + 0 => b"hello".to_vec(), + _ => args.join(" ").into_bytes(), + }; + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "logs", + ExchangeKind::Fanout, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel + .basic_publish( + "logs", + "", + BasicPublishOptions::default(), + message.clone(), + BasicProperties::default(), + ) + .await?; + + println!(" [x] Sent {:?}", std::str::from_utf8(&message)?); + + conn.close(0, "").await?; + + Ok(()) +} diff --git a/rust/src/bin/emit_log_direct.rs b/rust/src/bin/emit_log_direct.rs new file mode 100644 index 00000000..1847c6d7 --- /dev/null +++ b/rust/src/bin/emit_log_direct.rs @@ -0,0 +1,46 @@ +use lapin::{ + options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties, ExchangeKind, +}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let args: Vec<_> = std::env::args().skip(1).collect(); + let severity = args.first().map(String::as_str).unwrap_or("info"); + let message = match args.len() { + x if x < 2 => b"Hello, world!".to_vec(), + _ => args[1..].join(" ").into_bytes(), + }; + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "direct_logs", + ExchangeKind::Direct, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel + .basic_publish( + "direct_logs", + severity, + BasicPublishOptions::default(), + message.clone(), + BasicProperties::default(), + ) + .await?; + + println!( + " [x] Sent {}:{:?}", + severity, + std::str::from_utf8(&message)? + ); + + conn.close(0, "").await?; + + Ok(()) +} diff --git a/rust/src/bin/emit_log_topic.rs b/rust/src/bin/emit_log_topic.rs new file mode 100644 index 00000000..e9e71287 --- /dev/null +++ b/rust/src/bin/emit_log_topic.rs @@ -0,0 +1,46 @@ +use lapin::{ + options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties, ExchangeKind, +}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let args: Vec<_> = std::env::args().skip(1).collect(); + let routing_key = args.first().map(String::as_str).unwrap_or("anonymous.info"); + let message = match args.len() { + x if x < 2 => b"Hello, world!".to_vec(), + _ => args[1..].join(" ").into_bytes(), + }; + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "topic_logs", + ExchangeKind::Topic, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel + .basic_publish( + "topic_logs", + routing_key, + BasicPublishOptions::default(), + message.clone(), + BasicProperties::default(), + ) + .await?; + + println!( + " [x] Sent {}:{:?}", + routing_key, + std::str::from_utf8(&message)? + ); + + conn.close(0, "").await?; + + Ok(()) +} diff --git a/rust/src/bin/new_task.rs b/rust/src/bin/new_task.rs new file mode 100644 index 00000000..d2a8b195 --- /dev/null +++ b/rust/src/bin/new_task.rs @@ -0,0 +1,38 @@ +use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let args: Vec<_> = std::env::args().skip(1).collect(); + let message = match args.len() { + 0 => b"hello".to_vec(), + _ => args.join(" ").into_bytes(), + }; + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .queue_declare( + "task_queue", + QueueDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel + .basic_publish( + "", + "task_queue", + BasicPublishOptions::default(), + message.clone(), + BasicProperties::default(), + ) + .await?; + + println!(" [x] Sent {:?}", std::str::from_utf8(&message)?); + + conn.close(0, "").await?; + + Ok(()) +} diff --git a/rust/src/bin/receive.rs b/rust/src/bin/receive.rs new file mode 100644 index 00000000..55fdc93d --- /dev/null +++ b/rust/src/bin/receive.rs @@ -0,0 +1,37 @@ +use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .queue_declare( + "hello", + QueueDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + let consumer = channel + .basic_consume( + "hello", + "consumer", + BasicConsumeOptions { + no_ack: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + println!(" [*] Waiting for messages. To exit press CTRL+C"); + + for delivery in consumer { + let (_, delivery) = delivery?; + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + } + + Ok(()) +} diff --git a/rust/src/bin/receive_logs.rs b/rust/src/bin/receive_logs.rs new file mode 100644 index 00000000..e72d7393 --- /dev/null +++ b/rust/src/bin/receive_logs.rs @@ -0,0 +1,59 @@ +use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "logs", + ExchangeKind::Fanout, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + let queue = channel + .queue_declare( + "", + QueueDeclareOptions { + exclusive: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + channel + .queue_bind( + queue.name().as_str(), + "logs", + "", + QueueBindOptions::default(), + FieldTable::default(), + ) + .await?; + + let consumer = channel + .basic_consume( + queue.name().as_str(), + "consumer", + BasicConsumeOptions { + no_ack: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + for delivery in consumer { + let (_, delivery) = delivery?; + println!(" [x] {:?}", std::str::from_utf8(&delivery.data)?); + } + + Ok(()) +} diff --git a/rust/src/bin/receive_logs_direct.rs b/rust/src/bin/receive_logs_direct.rs new file mode 100644 index 00000000..77fd4637 --- /dev/null +++ b/rust/src/bin/receive_logs_direct.rs @@ -0,0 +1,73 @@ +use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let severities: Vec<_> = std::env::args().skip(1).collect(); + if severities.is_empty() { + eprintln!( + "Usage: {} [info] [warning] [error]\n", + std::env::args().next().unwrap_or_else(|| "receive-direct".into()) + ); + std::process::exit(1); + } + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "direct_logs", + ExchangeKind::Direct, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + let queue = channel + .queue_declare( + "", + QueueDeclareOptions { + exclusive: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + futures::future::join_all(severities.into_iter().map(|severity| { + channel.queue_bind( + queue.name().as_str(), + "direct_logs", + &severity, + QueueBindOptions::default(), + FieldTable::default(), + ) + })) + .await; + + let consumer = channel + .basic_consume( + queue.name().as_str(), + "consumer", + BasicConsumeOptions { + no_ack: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + for delivery in consumer { + let (_, delivery) = delivery?; + println!( + " [x] {}:{:?}", + delivery.routing_key, + std::str::from_utf8(&delivery.data)? + ); + } + + Ok(()) +} diff --git a/rust/src/bin/receive_logs_topic.rs b/rust/src/bin/receive_logs_topic.rs new file mode 100644 index 00000000..62bab8b1 --- /dev/null +++ b/rust/src/bin/receive_logs_topic.rs @@ -0,0 +1,73 @@ +use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let binding_keys: Vec<_> = std::env::args().skip(1).collect(); + if binding_keys.is_empty() { + eprintln!( + "Usage: {} [binding_key]...\n", + std::env::args().next().unwrap_or_else(|| "receive-topic".into()) + ); + std::process::exit(1); + } + + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .exchange_declare( + "topic_logs", + ExchangeKind::Topic, + ExchangeDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + let queue = channel + .queue_declare( + "", + QueueDeclareOptions { + exclusive: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + futures::future::join_all(binding_keys.into_iter().map(|binding_key| { + channel.queue_bind( + queue.name().as_str(), + "topic_logs", + &binding_key, + QueueBindOptions::default(), + FieldTable::default(), + ) + })) + .await; + + let consumer = channel + .basic_consume( + queue.name().as_str(), + "consumer", + BasicConsumeOptions { + no_ack: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + for delivery in consumer { + let (_, delivery) = delivery?; + println!( + " [x] {}:{:?}", + delivery.routing_key, + std::str::from_utf8(&delivery.data)? + ); + } + + Ok(()) +} diff --git a/rust/src/bin/rpc_client.rs b/rust/src/bin/rpc_client.rs new file mode 100644 index 00000000..22a864a1 --- /dev/null +++ b/rust/src/bin/rpc_client.rs @@ -0,0 +1,117 @@ +use lapin::{ + options::*, types::FieldTable, types::ShortString, BasicProperties, Channel, Connection, + ConnectionProperties, Consumer, Queue, +}; +use std::convert::TryInto; +use std::fmt::Display; +use tokio::stream::StreamExt; +use uuid::Uuid; + +#[derive(Debug)] +enum Error { + CannotDecodeReply, + NoReply, +} + +impl std::error::Error for Error {} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Error::CannotDecodeReply => write!(f, "Cannot decode reply"), + Error::NoReply => write!(f, "No reply arrived"), + } + } +} + +struct FibonacciRpcClient { + conn: Connection, + channel: Channel, + callback_queue: Queue, + consumer: Consumer, + correlation_id: ShortString, +} + +impl FibonacciRpcClient { + async fn new() -> Result { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + let callback_queue = channel + .queue_declare( + "", + QueueDeclareOptions { + exclusive: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + let consumer = channel + .basic_consume( + callback_queue.name().as_str(), + "rpc_client", + BasicConsumeOptions { + no_ack: true, + ..Default::default() + }, + FieldTable::default(), + ) + .await?; + + let correlation_id = Uuid::new_v4().to_string().into(); + + Ok(Self { + conn, + channel, + callback_queue, + consumer, + correlation_id, + }) + } + + async fn call(&mut self, n: u64) -> Result> { + self.channel + .basic_publish( + "", + "rpc_queue", + BasicPublishOptions::default(), + n.to_le_bytes().to_vec(), + BasicProperties::default() + .with_reply_to(self.callback_queue.name().clone()) + .with_correlation_id(self.correlation_id.clone()), + ) + .await? + .await?; + + while let Some(delivery) = self.consumer.next().await { + let (_, reply) = delivery?; + if reply.properties.correlation_id().as_ref() == Some(&self.correlation_id) { + return Ok(u64::from_le_bytes( + reply + .data + .as_slice() + .try_into() + .map_err(|_| Error::CannotDecodeReply)?, + )); + } + } + + Err(Box::new(Error::NoReply)) + } + + async fn close(&self) -> Result<(), lapin::Error> { + self.conn.close(0, "").await + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let mut fibonacci_rpc = FibonacciRpcClient::new().await?; + println!(" [x] Requesting fib(30)"); + let response = fibonacci_rpc.call(30).await?; + println!(" [.] Got {}", response); + fibonacci_rpc.close().await?; + Ok(()) +} diff --git a/rust/src/bin/rpc_server.rs b/rust/src/bin/rpc_server.rs new file mode 100644 index 00000000..899a1e94 --- /dev/null +++ b/rust/src/bin/rpc_server.rs @@ -0,0 +1,100 @@ +use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties}; +use std::convert::TryInto; +use std::fmt::Display; + +#[derive(Debug)] +enum Error { + CannotDecodeArg, + MissingReplyTo, + MissingCorrelationId, +} + +impl std::error::Error for Error {} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Error::CannotDecodeArg => write!(f, "Cannot decode argument"), + Error::MissingReplyTo => write!(f, "Missing 'reply to' property"), + Error::MissingCorrelationId => write!(f, "Missing 'correlation id' property"), + } + } +} + +fn fib(n: u64) -> u64 { + if n < 2 { + n + } else { + fib(n - 1) + fib(n - 2) + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .queue_declare( + "rpc_queue", + QueueDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel.basic_qos(1, BasicQosOptions::default()).await?; + + let consumer = channel + .basic_consume( + "rpc_queue", + "rpc_server", + BasicConsumeOptions::default(), + FieldTable::default(), + ) + .await?; + + println!(" [x] Awaiting RPC requests"); + + for delivery in consumer { + let (channel, delivery) = delivery?; + let n = u64::from_le_bytes( + delivery + .data + .as_slice() + .try_into() + .map_err(|_| Error::CannotDecodeArg)?, + ); + println!(" [.] fib({})", n); + let response = fib(n); + + let routing_key = delivery + .properties + .reply_to() + .as_ref() + .ok_or(Error::MissingReplyTo)? + .as_str(); + + let correlation_id = delivery + .properties + .correlation_id() + .clone() + .ok_or(Error::MissingCorrelationId)?; + + channel + .basic_publish( + "", + routing_key, + BasicPublishOptions::default(), + response.to_le_bytes().to_vec(), + BasicProperties::default().with_correlation_id(correlation_id), + ) + .await?; + + channel + .basic_ack(delivery.delivery_tag, BasicAckOptions::default()) + .await?; + } + + Ok(()) +} diff --git a/rust/src/bin/send.rs b/rust/src/bin/send.rs new file mode 100644 index 00000000..9116096a --- /dev/null +++ b/rust/src/bin/send.rs @@ -0,0 +1,32 @@ +use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .queue_declare( + "hello", + QueueDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + channel + .basic_publish( + "", + "hello", + BasicPublishOptions::default(), + b"Hello World!".to_vec(), + BasicProperties::default(), + ) + .await?; + + println!(" [x] Sent \"Hello World!\""); + + conn.close(0, "").await?; + + Ok(()) +} diff --git a/rust/src/bin/worker.rs b/rust/src/bin/worker.rs new file mode 100644 index 00000000..2115503d --- /dev/null +++ b/rust/src/bin/worker.rs @@ -0,0 +1,41 @@ +use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties}; +use std::thread; +use std::time::Duration; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let addr = "amqp://127.0.0.1:5672"; + let conn = Connection::connect(addr, ConnectionProperties::default()).await?; + let channel = conn.create_channel().await?; + + channel + .queue_declare( + "task_queue", + QueueDeclareOptions::default(), + FieldTable::default(), + ) + .await?; + + let consumer = channel + .basic_consume( + "task_queue", + "consumer", + BasicConsumeOptions::default(), + FieldTable::default(), + ) + .await?; + + println!(" [*] Waiting for messages. To exit press CTRL+C"); + + for delivery in consumer { + let (channel, delivery) = delivery?; + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + thread::sleep(Duration::from_secs(delivery.data.len() as u64)); + println!(" [x] Done"); + channel + .basic_ack(delivery.delivery_tag, BasicAckOptions::default()) + .await?; + } + + Ok(()) +} From 1851d779f7e6b98675bbf2c2d086ab8f935384c7 Mon Sep 17 00:00:00 2001 From: Patrick Allaert Date: Fri, 18 Dec 2020 17:34:32 +0100 Subject: [PATCH 191/659] Replace deprecated php-amqplib API As of php-amqplib version 2.12.0 (see PR: https://github.com/php-amqplib/php-amqplib/pull/799) we should use method `ack()` on the message directly. Asked by @michaelklishin in https://github.com/rabbitmq/rabbitmq-website/pull/1113 --- php/composer.json | 2 +- php/rpc_server.php | 4 +--- php/worker.php | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/php/composer.json b/php/composer.json index 7cf5c32f..c6d4fe82 100644 --- a/php/composer.json +++ b/php/composer.json @@ -1,5 +1,5 @@ { "require": { - "php-amqplib/php-amqplib": ">=v2.8.2-rc3" + "php-amqplib/php-amqplib": ">=v2.12.1" } } diff --git a/php/rpc_server.php b/php/rpc_server.php index cd644f0b..640a8be5 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -35,9 +35,7 @@ function fib($n) '', $req->get('reply_to') ); - $req->delivery_info['channel']->basic_ack( - $req->delivery_info['delivery_tag'] - ); + $req->ack(); }; $channel->basic_qos(null, 1, null); diff --git a/php/worker.php b/php/worker.php index 7023d73d..063b111e 100644 --- a/php/worker.php +++ b/php/worker.php @@ -14,7 +14,7 @@ echo ' [x] Received ', $msg->body, "\n"; sleep(substr_count($msg->body, '.')); echo " [x] Done\n"; - $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); + $msg->ack(); }; $channel->basic_qos(null, 1, null); From 787b2fd82e9d1358528c1ef64bf9b29720aeee90 Mon Sep 17 00:00:00 2001 From: zy Date: Tue, 5 Jan 2021 23:30:03 +0800 Subject: [PATCH 192/659] go: check error first Need check error before log out the success message. --- go/send.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/send.go b/go/send.go index c1d23939..e271fec6 100644 --- a/go/send.go +++ b/go/send.go @@ -41,6 +41,6 @@ func main() { ContentType: "text/plain", Body: []byte(body), }) - log.Printf(" [x] Sent %s", body) failOnError(err, "Failed to publish a message") + log.Printf(" [x] Sent %s", body) } From 02ec3bd477e1166913ad8d6c4923fd09a4c06de0 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 30 Jan 2021 14:07:58 +0300 Subject: [PATCH 193/659] JS port: bump dependencies --- javascript-nodejs/package-lock.json | 70 +++++++++-------------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 7fcb2f05..a780dbe6 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "amqplib": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.5.tgz", - "integrity": "sha512-sWx1hbfHbyKMw6bXOK2k6+lHL8TESWxjAx5hG8fBtT7wcxoXNIsFxZMnFyBjxt3yL14vn7WqBDe5U6BGOadtLg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.6.0.tgz", + "integrity": "sha512-zXCh4jQ77TBZe1YtvZ1n7sUxnTjnNagpy8MVi2yc1ive239pS3iLwm4e4d5o4XZGx1BdTKQ/U0ZmaDU3c8MxYQ==", "requires": { "bitsyntax": "~0.1.0", "bluebird": "^3.5.2", @@ -132,9 +132,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "isarray": { "version": "0.0.1", @@ -142,15 +142,15 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "js-beautify": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz", - "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.5.tgz", + "integrity": "sha512-MsXlH6Z/BiRYSkSRW3clNDqDjSpiSNOiG8xYVUBXt4k0LnGvDhlTGOlHX1VFtAdoLmtwjxMG5qiWKy/g+Ipv5w==", "requires": { "config-chain": "^1.1.12", "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.1", - "nopt": "~4.0.1" + "mkdirp": "^1.0.4", + "nopt": "^5.0.0" } }, "lru-cache": { @@ -170,18 +170,10 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "ms": { "version": "2.0.0", @@ -189,12 +181,11 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "once": { @@ -205,25 +196,6 @@ "wrappy": "1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -240,9 +212,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "readable-stream": { "version": "1.1.14", From cf5263e379be0172f8bf8db200df4746d1b10f5c Mon Sep 17 00:00:00 2001 From: Lewis Llobera Date: Wed, 3 Feb 2021 16:54:18 +0100 Subject: [PATCH 194/659] Correct Go variable casing --- go/worker.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/worker.go b/go/worker.go index 6b37ea1c..baa75dbf 100644 --- a/go/worker.go +++ b/go/worker.go @@ -56,8 +56,8 @@ func main() { go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) - dot_count := bytes.Count(d.Body, []byte(".")) - t := time.Duration(dot_count) + dotCount := bytes.Count(d.Body, []byte(".")) + t := time.Duration(dotCount) time.Sleep(t * time.Second) log.Printf("Done") d.Ack(false) From bc4a30ff964a176d69b2d9297152cf77600edf73 Mon Sep 17 00:00:00 2001 From: Alvaro Videla Date: Sat, 27 Feb 2021 18:30:14 +0100 Subject: [PATCH 195/659] enables github codespaces --- .devcontainer/Dockerfile | 7 ++ .devcontainer/devcontainer.json | 16 +++ .devcontainer/library-scripts/node-debian.sh | 109 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/library-scripts/node-debian.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..637e3be7 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,7 @@ +FROM rabbitmq:3.7-management + +ENV NVM_DIR="/usr/local/share/nvm" +ENV NVM_SYMLINK_CURRENT=true \ + PATH=${NVM_DIR}/current/bin:${PATH} +COPY library-scripts/node-debian.sh /tmp/library-scripts/ +RUN apt-get update && bash /tmp/library-scripts/node-debian.sh "${NVM_DIR}" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..6accc0ea --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,16 @@ +{ + "name": "RabbitMQ Tutorials", + "dockerFile": "Dockerfile", + "forwardPorts": [ 4369, 5671, 5672, 15691, 15692, 25672 ], + + // Set *default* container specific settings.json values on container create. + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [], + + // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. + // "remoteUser": "vscode" +} \ No newline at end of file diff --git a/.devcontainer/library-scripts/node-debian.sh b/.devcontainer/library-scripts/node-debian.sh new file mode 100644 index 00000000..9e7c2f0d --- /dev/null +++ b/.devcontainer/library-scripts/node-debian.sh @@ -0,0 +1,109 @@ +#!/bin/bash +#------------------------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. +#------------------------------------------------------------------------------------------------------------- + +# File taken from https://github.com/microsoft/vscode-dev-containers/blob/master/containers/azure-static-web-apps/.devcontainer/library-scripts/node-debian.sh + +# Syntax: ./node-debian.sh [directory to install nvm] [node version to install (use "none" to skip)] [non-root user] + +export NVM_DIR=${1:-"/usr/local/share/nvm"} +export NODE_VERSION=${2:-"lts/*"} +USERNAME=${3:-"vscode"} +UPDATE_RC=${4:-"true"} + +mkdir -p "/etc/zsh/" + +set -e + +if [ "$(id -u)" -ne 0 ]; then + echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' + exit 1 +fi + +# Treat a user name of "none" or non-existant user as root +if [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then + USERNAME=root +fi + +if [ "${NODE_VERSION}" = "none" ]; then + export NODE_VERSION= +fi + +# Ensure apt is in non-interactive to avoid prompts +export DEBIAN_FRONTEND=noninteractive + +# Install curl, apt-transport-https, tar, or gpg if missing +if ! dpkg -s apt-transport-https curl ca-certificates tar > /dev/null 2>&1 || ! type gpg > /dev/null 2>&1; then + if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then + apt-get update + fi + apt-get -y install --no-install-recommends apt-transport-https curl ca-certificates tar gnupg2 +fi + +# Install yarn +if type yarn > /dev/null 2>&1; then + echo "Yarn already installed." +else + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT) + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list + apt-get update + apt-get -y install --no-install-recommends yarn +fi + +# Install the specified node version if NVM directory already exists, then exit +if [ -d "${NVM_DIR}" ]; then + echo "NVM already installed." + if [ "${NODE_VERSION}" != "" ]; then + su ${USERNAME} -c "source $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm clear-cache" + fi + exit 0 +fi + + +# Run NVM installer as non-root if needed +mkdir -p ${NVM_DIR} +chown ${USERNAME} ${NVM_DIR} +su ${USERNAME} -c "$(cat << EOF + set -e + + # Do not update profile - we'll do this manually + export PROFILE=/dev/null + + curl -so- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash + source ${NVM_DIR}/nvm.sh + if [ "${NODE_VERSION}" != "" ]; then + nvm alias default ${NODE_VERSION} + fi + nvm clear-cache +EOF +)" 2>&1 + +if [ "${UPDATE_RC}" = "true" ]; then + echo "Updating /etc/bash.bashrc and /etc/zsh/zshrc with NVM scripts..." +(cat < /dev/null 2>&1; then + echo "Fixing permissions of \"\$NVM_DIR\"..." + sudoIf chown -R ${USERNAME}:root \$NVM_DIR + else + echo "Warning: NVM directory is not owned by ${USERNAME} and sudo is not installed. Unable to correct permissions." + fi +fi +[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh" +[ -s "\$NVM_DIR/bash_completion" ] && . "\$NVM_DIR/bash_completion" +EOF +) | tee -a /etc/bash.bashrc >> /etc/zsh/zshrc +fi + +echo "Done!" \ No newline at end of file From c654c2bc30962d814c846b6a8466b326b20fefb0 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 28 Jan 2021 03:59:00 +0300 Subject: [PATCH 196/659] Bump dependencies --- javascript-nodejs/package-lock.json | 345 +++++++++++++++++++++++++++- 1 file changed, 344 insertions(+), 1 deletion(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index a780dbe6..ba7bc831 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -1,8 +1,351 @@ { "name": "rabbitmq-node-tutorial", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "rabbitmq-node-tutorial", + "version": "1.0.0", + "dependencies": { + "amqplib": "latest", + "js-beautify": "^1.9.1" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/amqplib": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.5.tgz", + "integrity": "sha512-sWx1hbfHbyKMw6bXOK2k6+lHL8TESWxjAx5hG8fBtT7wcxoXNIsFxZMnFyBjxt3yL14vn7WqBDe5U6BGOadtLg==", + "dependencies": { + "bitsyntax": "~0.1.0", + "bluebird": "^3.5.2", + "buffer-more-ints": "~1.0.0", + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "~5.1.2", + "url-parse": "~1.4.3" + }, + "engines": { + "node": ">=0.8 <=12" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/bitsyntax": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", + "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", + "dependencies": { + "buffer-more-ints": "~1.0.0", + "debug": "~2.6.9", + "safe-buffer": "~5.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-more-ints": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", + "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/js-beautify": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz", + "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==", + "dependencies": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + }, "dependencies": { "abbrev": { "version": "1.1.1", From 9e71f57e09f416487ec966dedc621f75f63e9ad5 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 7 Apr 2021 00:27:12 +0300 Subject: [PATCH 197/659] PHP: use a more modern way to check if a channel is open References rabbitmq/rabbitmq-website#1162 --- php/composer.json | 2 +- php/receive.php | 2 +- php/receive_logs.php | 2 +- php/receive_logs_direct.php | 2 +- php/receive_logs_topic.php | 2 +- php/rpc_server.php | 2 +- php/worker.php | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/php/composer.json b/php/composer.json index c6d4fe82..d12e9460 100644 --- a/php/composer.json +++ b/php/composer.json @@ -1,5 +1,5 @@ { "require": { - "php-amqplib/php-amqplib": ">=v2.12.1" + "php-amqplib/php-amqplib": ">=3.0" } } diff --git a/php/receive.php b/php/receive.php index cbaf5700..15c7c8f4 100644 --- a/php/receive.php +++ b/php/receive.php @@ -16,7 +16,7 @@ $channel->basic_consume('hello', '', false, true, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } diff --git a/php/receive_logs.php b/php/receive_logs.php index 4b222b8d..1ce9471a 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -20,7 +20,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index 15288956..63a41758 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -28,7 +28,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index 57b7eb2d..6d5d4c89 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -28,7 +28,7 @@ $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } diff --git a/php/rpc_server.php b/php/rpc_server.php index 640a8be5..1ebfc7fd 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -41,7 +41,7 @@ function fib($n) $channel->basic_qos(null, 1, null); $channel->basic_consume('rpc_queue', '', false, false, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } diff --git a/php/worker.php b/php/worker.php index 063b111e..cbd6be81 100644 --- a/php/worker.php +++ b/php/worker.php @@ -20,7 +20,7 @@ $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); -while ($channel->is_consuming()) { +while ($channel->is_open()) { $channel->wait(); } From 7c1e45e0e59e2e6b6b33f970070acafd9f6bad59 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 7 Apr 2021 00:31:32 +0300 Subject: [PATCH 198/659] Update required PHP version to match https://github.com/php-amqplib/php-amqplib/commit/9058cd92bab62b6ef55b4463cc854cb6c695074e --- php/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php/README.md b/php/README.md index 6266f521..cda53e2f 100644 --- a/php/README.md +++ b/php/README.md @@ -7,9 +7,9 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -### PHP 5.3+ +### PHP 7.-+ -You need `PHP 5.3` and `php-amqplib`. To get these +You need `PHP 7.0` and `php-amqplib`. To get these dependencies on Ubuntu type: sudo apt-get install git-core php5-cli From 8df4366b8e1a73300a32e00d71203c78a285f2d3 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 7 Apr 2021 00:31:54 +0300 Subject: [PATCH 199/659] A typo --- php/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/README.md b/php/README.md index cda53e2f..366ab927 100644 --- a/php/README.md +++ b/php/README.md @@ -7,7 +7,7 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -### PHP 7.-+ +### PHP 7.0+ You need `PHP 7.0` and `php-amqplib`. To get these dependencies on Ubuntu type: From 300c6577cc29a79cd48f12e24e65bff3f0c85d33 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 7 Apr 2021 22:48:15 +0300 Subject: [PATCH 200/659] Closes #285 --- python/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/python/README.md b/python/README.md index b2d222e0..201bbbec 100644 --- a/python/README.md +++ b/python/README.md @@ -18,37 +18,37 @@ You may first need to run ## Code -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html): python send.py python receive.py -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html): python new_task.py "A very hard task which takes two seconds.." python worker.py -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html): python receive_logs.py python emit_log.py "info: This is the log message" -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html): python receive_logs_direct.py info python emit_log_direct.py info "The message" -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html): python receive_logs_topic.py "*.rabbit" python emit_log_topic.py red.rabbit Hello -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html): +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html): python rpc_server.py python rpc_client.py From 82904ea114ffa8f5dda29cb1b9b33065e5dce110 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Fri, 9 Apr 2021 21:44:27 +0300 Subject: [PATCH 201/659] Closes #286 --- clojure/README.md | 12 ++++---- common-lisp/README.md | 12 ++++---- dotnet-visual-studio/README.md | 14 +++++----- dotnet/README.md | 14 +++++----- erlang/README.md | 10 +++---- go/README.md | 12 ++++---- haskell/README.md | 50 +++++++++++++++++++++------------- perl/README.md | 12 ++++---- ruby/README.md | 12 ++++---- rust/README.md | 12 ++++---- 10 files changed, 86 insertions(+), 74 deletions(-) diff --git a/clojure/README.md b/clojure/README.md index 08e3341b..3d5fe516 100644 --- a/clojure/README.md +++ b/clojure/README.md @@ -13,32 +13,32 @@ These tutorials will work on JDK 6 through 8 (Oracle or OpenJDK). Code examples are executed via `lein run`: -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-java.html): +Tutorial one: "Hello World!" lein run -m rabbitmq.tutorials.send lein run -m rabbitmq.tutorials.receive -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-java.html): +Tutorial two: Work Queues lein run -m rabbitmq.tutorials.new-task lein run -m rabbitmq.tutorials.worker -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-java.html) +Tutorial three: Publish/Subscribe lein run -m rabbitmq.tutorials.receive-logs lein run -m rabbitmq.tutorials.emit-log -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-java.html) +Tutorial four: Routing lein run -m rabbitmq.tutorials.receive-logs-direct lein run -m rabbitmq.tutorials.emit-log-direct info -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-java.html) +Tutorial five: Topics lein run -m rabbitmq.tutorials.receive-logs-topic lein run -m rabbitmq.tutorials.emit-log-topic info -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-java.html) +Tutorial six: RPC lein run -m rabbitmq.tutorials.rpc-server lein run -m rabbitmq.tutorials.rpc-client diff --git a/common-lisp/README.md b/common-lisp/README.md index bd057e90..1b52d6e7 100644 --- a/common-lisp/README.md +++ b/common-lisp/README.md @@ -17,32 +17,32 @@ All our examples are in fact executable sbcl scripts. You can run them from comm ## Code -[Tutorial one: "Hello World!"](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-one-cl.html): +Tutorial one: "Hello World!"]: ./send.lisp ./receive.lisp -[Tutorial two: Work Queues](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-two-cl.html): +Tutorial two: Work Queues: ./new-task.lisp ./worker.lisp -[Tutorial three: Publish/Subscribe](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-three-cl.html) +Tutorial three: Publish/Subscribe ./receive-logs.lisp ./emit-log.lisp -[Tutorial four: Routing](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-four-cl.html) +Tutorial four: Routing ./receive-logs-direct.lisp ./emit-log-direct.lisp -[Tutorial five: Topics](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-five-cl.html) +Tutorial five: Topics ./receive-logs-topic.lisp ./emit-log-topic.lisp -[Tutorial six: RPC](https://cl-rabbit.io/cl-bunny/tutorials/tutorial-six-cl.html) +Tutorial six: RPC ./rpc-server.lisp ./rpc-client.lisp diff --git a/dotnet-visual-studio/README.md b/dotnet-visual-studio/README.md index d8ebc7de..2e1866f1 100644 --- a/dotnet-visual-studio/README.md +++ b/dotnet-visual-studio/README.md @@ -13,36 +13,36 @@ time opening it in order to get the .NET RabbitMQ dependency from NuGet. ## Code -#### [Tutorial 1: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) +#### [Tutorial 1: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) - 1_Receive - 1_Send -#### [Tutorial 2: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) +#### [Tutorial 2: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) - 2_Worker - 2_NewTask -#### [Tutorial 3: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) +#### [Tutorial 3: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) - 3_ReceiveLogs - 3_EmitLog -#### [Tutorial 4: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) +#### [Tutorial 4: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) - 4_ReceiveLogsDirect - 4_EmitLogDirect -#### [Tutorial 5: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) +#### [Tutorial 5: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) - 5_ReceiveLogsTopic - 5_EmitLogTopic -#### [Tutorial 6: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) +#### [Tutorial 6: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) - 6_RPCServer - 6_RPCClient -#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorial-seven-dotnet.html) +#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) - 7_PublisherConfirms diff --git a/dotnet/README.md b/dotnet/README.md index 4b8e0677..e85ddd64 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -28,36 +28,36 @@ First run the `recompile.sh` script. This will run `dotnet restore` and build each project which is required before they can be run. Alternatively or if you are on windows cd into each project and run `dotnet restore` manually. -#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-dotnet.html) +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) dotnet run -p Receive/Receive.csproj dotnet run -p Send/Send.csproj -#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-dotnet.html) +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) dotnet run -p Worker/Worker.csproj dotnet run -p NewTask/NewTask.csproj -#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-dotnet.html) +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) dotnet run -p ReceiveLogs/ReceiveLogs.csproj dotnet run -p EmitLog/EmitLog.csproj -#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-dotnet.html) +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info dotnet run -p EmitLogDirect/EmitLogDirect.csproj -#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-dotnet.html) +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info dotnet run -p EmitLogTopic/EmitLogTopic.csproj -#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-dotnet.html) +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) dotnet run -p RPCServer/RPCServer.csproj dotnet run -p RPCClient/RPCClient.csproj -#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorial-seven-dotnet.html) +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) dotnet run -p PublisherConfirms/PublisherConfirms.csproj diff --git a/erlang/README.md b/erlang/README.md index a97f685b..6b51adb4 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -21,27 +21,27 @@ You need Erlang Client binaries: ## Code -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html): ./send.erl ./receive.erl -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html): ./new_task.erl "A very hard task which takes two seconds.." ./worker.erl -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html): ./receive_logs.erl ./emit_log.erl "info: This is the log message" -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html): ./receive_logs_direct.erl info ./emit_log_direct.erl info Hello -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html): ./receive_logs_topic.erl "*.rabbit" ./emit_log_topic.erl red.rabbit Hello diff --git a/go/README.md b/go/README.md index 10798d42..d981980a 100644 --- a/go/README.md +++ b/go/README.md @@ -15,32 +15,32 @@ To run this code you need [Go RabbitMQ client](https://github.com/streadway/amqp Code examples are executed via `go run`: -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-go.html): +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-go.html): go run send.go go run receive.go -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-go.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-go.html): go run new_task.go hello world go run worker.go -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-go.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-go.html) go run receive_logs.go go run emit_log.go hello world -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-go.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-go.html) go run receive_logs_direct.go info warn go run emit_log_direct.go warn "a warning" -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-go.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-go.html) go run receive_logs_topic.go "kern.*" "*.critical" go run emit_log_topic.go kern.critical "A critical kernel error" -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-go.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-go.html) go run rpc_server.go go run rpc_client.go 10 diff --git a/haskell/README.md b/haskell/README.md index c0a4a4b2..62b91407 100644 --- a/haskell/README.md +++ b/haskell/README.md @@ -14,36 +14,48 @@ To run this code you need [Network.AMQP](https://hackage.haskell.org/package/amq ## Code -Code examples are executed via `runhaskell`: +Code examples are executed via `runhaskell`. -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): +Tutorial one: - runhaskell send.hs - runhaskell receive.hs +``` shell +runhaskell send.hs +runhaskell receive.hs +``` -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): +Tutorial two: - runhaskell newTask.hs hello world - runhaskell worker.hs +``` shell +runhaskell newTask.hs hello world +runhaskell worker.hs +``` -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html) +Tutorial three: Publish/Subscribe - runhaskell receiveLogs.hs - runhaskell emitLog.hs hello world +``` shell +runhaskell receiveLogs.hs +runhaskell emitLog.hs hello world +``` -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html) +Tutorial four: Routing - runhaskell receiveLogsDirect.hs info warn - runhaskell emitLogDirect.hs warn "a warning" +``` shell +runhaskell receiveLogsDirect.hs info warn +runhaskell emitLogDirect.hs warn "a warning" +``` -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html) +Tutorial five: Topics - runhaskell receiveLogsTopic.hs info warn - runhaskell emitLogTopic.hs warn "a warning" +``` shell +runhaskell receiveLogsTopic.hs info warn +runhaskell emitLogTopic.hs warn "a warning" +``` -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html) +Tutorial six: RPC - runhaskell rpcServer.hs - runhaskell rpcClient.hs +``` shell +runhaskell rpcServer.hs +runhaskell rpcClient.hs +``` To learn more, see [Network.AMQP](https://github.com/hreinhardt/amqp). diff --git a/perl/README.md b/perl/README.md index 6e99ca06..c50ffbe2 100644 --- a/perl/README.md +++ b/perl/README.md @@ -27,37 +27,37 @@ On Ubuntu: ## Code -[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html): +Tutorial one: "Hello World!" perl send.pl perl receive.pl -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html): +Tutorial two: Work Queues perl new_task.pl "A very hard task which takes two seconds.." perl worker.pl -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html): +Tutorial three: Publish/Subscribe perl receive_logs.pl perl emit_log.pl "info: This is the log message" -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html): +Tutorial four: Routing perl receive_logs_direct.pl info perl emit_log_direct.pl info "The message" -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html): +Tutorial five: Topics perl receive_logs_topic.pl "*.rabbit" perl emit_log_topic.pl red.rabbit Hello -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html): +Tutorial six: RPC perl rpc_server.pl perl rpc_client.pl diff --git a/ruby/README.md b/ruby/README.md index 5ae6fa29..ed0e2f52 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -16,42 +16,42 @@ bundle install ## Code -To run [tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-ruby.html): +To run [tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-ruby.html): ``` sh bundle exec ruby send.rb bundle exec ruby receive.rb ``` -[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-ruby.html): +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-ruby.html): ``` sh bundle exec ruby new_task.rb bundle exec ruby worker.rb ``` -[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-ruby.html) +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-ruby.html) ``` sh bundle exec ruby receive_logs.rb bundle exec ruby emit_log.rb ``` -[Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-ruby.html) +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-ruby.html) ``` sh bundle exec ruby receive_logs_direct.rb bundle exec ruby emit_log_direct.rb ``` -[Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-ruby.html) +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-ruby.html) ``` sh bundle exec ruby receive_logs_topic.rb bundle exec ruby emit_log_topic.rb ``` -[Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-ruby.html) +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-ruby.html) ``` sh bundle exec ruby rpc_server.rb diff --git a/rust/README.md b/rust/README.md index d6907b99..525e2009 100644 --- a/rust/README.md +++ b/rust/README.md @@ -14,32 +14,32 @@ You should have a RabbitMQ server running on default port. ## Code Each cargo command should be launched in a separate shell. -#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorial-one-python.html) +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html) cargo run --bin receive cargo run --bin send -#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorial-two-python.html) +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html) cargo run --bin worker cargo run --bin new_task "hi" # specify a custom message -#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorial-three-python.html) +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html) cargo run --bin receive_logs cargo run --bin emit_log "hi" # specify a custom message -#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorial-four-python.html) +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html) cargo run --bin receive_logs_direct info error # specify log levels cargo run --bin emit_log_direct error "help!" # specify severity and custom message -#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorial-five-python.html) +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html) cargo run --bin receive_logs_topic kern.* # specify topic filter cargo run --bin emit_log_topic kern.mem "No memory left!" # specify topic and message -#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorial-six-python.html) +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html) cargo run --bin rpc_server cargo run --bin rpc_client From 2950cee8ded6e493a7530c0b5215b8684356c16f Mon Sep 17 00:00:00 2001 From: laststem Date: Thu, 15 Apr 2021 01:11:11 +0900 Subject: [PATCH 202/659] go: add publisher confirms --- go/publisher_confirms.go | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 go/publisher_confirms.go diff --git a/go/publisher_confirms.go b/go/publisher_confirms.go new file mode 100644 index 00000000..ad131f6b --- /dev/null +++ b/go/publisher_confirms.go @@ -0,0 +1,84 @@ +package main + +import ( + "log" + + "github.com/streadway/amqp" +) + +func failOnError(err error, msg string) { + if err != nil { + log.Fatalf("%s: %s", msg, err) + } +} + +func main() { + conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") + failOnError(err, "Failed to connect to RabbitMQ") + defer conn.Close() + + ch, err := conn.Channel() + failOnError(err, "Failed to open a channel") + defer ch.Close() + + confirms := make(chan amqp.Confirmation) + ch.NotifyPublish(confirms) + go func() { + for confirm := range confirms { + if confirm.Ack { + // code when messages is confirmed + log.Printf("Confirmed") + } else { + // code when messages is nack-ed + log.Printf("Nacked") + } + } + }() + + err = ch.Confirm(false) + failOnError(err, "Failed to confirm") + + q, err := ch.QueueDeclare( + "", // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments + ) + failOnError(err, "Failed to declare a queue") + + consume(ch, q.Name) + publish(ch, q.Name, "hello") + + log.Printf(" [*] Waiting for messages. To exit press CTRL+C") + forever := make(chan bool) + <-forever +} + +func consume(ch *amqp.Channel, qName string) { + msgs, err := ch.Consume( + qName, // queue + "", // consumer + true, // auto-ack + false, // exclusive + false, // no-local + false, // no-wait + nil, // args + ) + failOnError(err, "Failed to register a consumer") + + go func() { + for d := range msgs { + log.Printf("Received a message: %s", d.Body) + } + }() +} + +func publish(ch *amqp.Channel, qName, text string) { + err := ch.Publish("", qName, false, false, amqp.Publishing{ + ContentType: "text/plain", + Body: []byte(text), + }) + failOnError(err, "Failed to publish a message") +} From 2fe488d54dc82df290439efed99f1b8c6a800ccc Mon Sep 17 00:00:00 2001 From: mimme Date: Wed, 2 Jun 2021 23:57:43 +0200 Subject: [PATCH 203/659] Fix #288 - Upgrade dotnet-visual studio to .net50 --- dotnet-visual-studio/1_Receive/1_Receive.csproj | 4 ++-- dotnet-visual-studio/1_Send/1_Send.csproj | 4 ++-- dotnet-visual-studio/2_NewTask/2_NewTask.csproj | 4 ++-- dotnet-visual-studio/2_Worker/2_Worker.csproj | 4 ++-- dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj | 4 ++-- dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj | 4 ++-- dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj | 4 ++-- .../4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj | 4 ++-- dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj | 4 ++-- .../5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj | 4 ++-- dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj | 4 ++-- dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj | 4 ++-- .../7_PublisherConfirms/7_PublisherConfirms.csproj | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ b/dotnet-visual-studio/1_Receive/1_Receive.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ b/dotnet-visual-studio/1_Send/1_Send.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ b/dotnet-visual-studio/2_Worker/2_Worker.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj index a28e0458..c83242bd 100644 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj @@ -2,10 +2,10 @@ Exe - netcoreapp3.1 + net5.0 - + From 52ca462906a6cd10e387e39074cee468f6bd2b47 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 9 Jun 2021 14:58:58 +0300 Subject: [PATCH 204/659] Go: switch to rabbitmq/amqp091-go --- go/README.md | 8 ++++---- go/emit_log.go | 2 +- go/emit_log_direct.go | 2 +- go/emit_log_topic.go | 2 +- go/go.mod | 5 +++++ go/go.sum | 2 ++ go/new_task.go | 2 +- go/publisher_confirms.go | 2 +- go/receive.go | 2 +- go/receive_logs.go | 2 +- go/receive_logs_direct.go | 2 +- go/receive_logs_topic.go | 2 +- go/rpc_client.go | 2 +- go/rpc_server.go | 2 +- go/send.go | 2 +- go/worker.go | 2 +- 16 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 go/go.mod create mode 100644 go/go.sum diff --git a/go/README.md b/go/README.md index d981980a..280b533a 100644 --- a/go/README.md +++ b/go/README.md @@ -6,10 +6,10 @@ Here you can find Go code examples from [RabbitMQ tutorials](https://www.rabbitm ## Requirements -To run this code you need [Go RabbitMQ client](https://github.com/streadway/amqp): - - go get github.com/streadway/amqp +These examples use the [`rabbitmq/amqp091-go`](https://github.com/rabbitmq/amqp091-go) client library. +Get it first with + go get github.com/rabbitmq/amqp091-go ## Code @@ -45,4 +45,4 @@ Code examples are executed via `go run`: go run rpc_server.go go run rpc_client.go 10 -To learn more, see [Go RabbitMQ client](https://github.com/streadway/amqp). +To learn more, see [`rabbitmq/amqp091-go`](https://github.com/rabbitmq/amqp091-go). diff --git a/go/emit_log.go b/go/emit_log.go index 86ed19db..e87d42a0 100644 --- a/go/emit_log.go +++ b/go/emit_log.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/emit_log_direct.go b/go/emit_log_direct.go index ef3075d6..858fff86 100644 --- a/go/emit_log_direct.go +++ b/go/emit_log_direct.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/emit_log_topic.go b/go/emit_log_topic.go index f75d719a..01a9224f 100644 --- a/go/emit_log_topic.go +++ b/go/emit_log_topic.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 00000000..745f6ab5 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,5 @@ +module github.com/rabbitmq/rabbitmq-tutorials + +go 1.16 + +require github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 00000000..75785ad4 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,2 @@ +github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf h1:EBDKctNpOEfxlZAm2At5rUjmztnfswQr4ljWQXvQ3pM= +github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= diff --git a/go/new_task.go b/go/new_task.go index d6838a66..56099f77 100644 --- a/go/new_task.go +++ b/go/new_task.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/publisher_confirms.go b/go/publisher_confirms.go index ad131f6b..57b56ddd 100644 --- a/go/publisher_confirms.go +++ b/go/publisher_confirms.go @@ -3,7 +3,7 @@ package main import ( "log" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/receive.go b/go/receive.go index 54c25610..c22dd2ad 100644 --- a/go/receive.go +++ b/go/receive.go @@ -3,7 +3,7 @@ package main import ( "log" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/receive_logs.go b/go/receive_logs.go index fa6fd131..ec44ce48 100644 --- a/go/receive_logs.go +++ b/go/receive_logs.go @@ -3,7 +3,7 @@ package main import ( "log" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/receive_logs_direct.go b/go/receive_logs_direct.go index 953f43c3..974c535d 100644 --- a/go/receive_logs_direct.go +++ b/go/receive_logs_direct.go @@ -4,7 +4,7 @@ import ( "log" "os" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/receive_logs_topic.go b/go/receive_logs_topic.go index 2d189a2c..3bf8fc25 100644 --- a/go/receive_logs_topic.go +++ b/go/receive_logs_topic.go @@ -4,7 +4,7 @@ import ( "log" "os" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/rpc_client.go b/go/rpc_client.go index dfa23882..a2cb9b2a 100644 --- a/go/rpc_client.go +++ b/go/rpc_client.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/rpc_server.go b/go/rpc_server.go index 017715e0..5e27c3f6 100644 --- a/go/rpc_server.go +++ b/go/rpc_server.go @@ -4,7 +4,7 @@ import ( "log" "strconv" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/send.go b/go/send.go index e271fec6..a335e3fd 100644 --- a/go/send.go +++ b/go/send.go @@ -3,7 +3,7 @@ package main import ( "log" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { diff --git a/go/worker.go b/go/worker.go index baa75dbf..3ac3dedf 100644 --- a/go/worker.go +++ b/go/worker.go @@ -5,7 +5,7 @@ import ( "log" "time" - "github.com/streadway/amqp" + amqp "github.com/rabbitmq/amqp091-go" ) func failOnError(err error, msg string) { From 6fcba990c7799af6b0073f9f174ffa7dd4df614a Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 29 Jun 2021 07:43:23 +0300 Subject: [PATCH 205/659] .NET: bump client dependency to 6.2.2 --- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/PublisherConfirms/PublisherConfirms.csproj | 2 +- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 344ca67d..440881a2 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 7ada7dd5..87a1c419 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index f7ac56a1..df841e26 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 9939e468..128c9daa 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index e800c2a3..894ef631 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -9,7 +9,7 @@ - + diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 50b63a9f..637d3e92 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 3e8e3bf2..ddac86ca 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 90a9eda8..460eff52 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 4019448d..21450e8b 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index 2377a504..ff3040e1 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index ae1de7bb..94d55c8f 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -8,6 +8,6 @@ - + diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index a35d3640..f350c104 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -9,6 +9,6 @@ - + diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 1db2c1aa..c3a6e004 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -8,6 +8,6 @@ - + From 333486ba3cb9b7ab240009770abbc1b718e0246f Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 29 Jun 2021 07:46:06 +0300 Subject: [PATCH 206/659] Node: bump dependencies --- javascript-nodejs/package-lock.json | 198 +++++++++++++--------------- 1 file changed, 92 insertions(+), 106 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index ba7bc831..6152b889 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -18,25 +18,25 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/amqplib": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.5.tgz", - "integrity": "sha512-sWx1hbfHbyKMw6bXOK2k6+lHL8TESWxjAx5hG8fBtT7wcxoXNIsFxZMnFyBjxt3yL14vn7WqBDe5U6BGOadtLg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.8.0.tgz", + "integrity": "sha512-icU+a4kkq4Y1PS4NNi+YPDMwdlbFcZ1EZTQT2nigW3fvOb6AOgUQ9+Mk4ue0Zu5cBg/XpDzB40oH10ysrk2dmA==", "dependencies": { "bitsyntax": "~0.1.0", - "bluebird": "^3.5.2", + "bluebird": "^3.7.2", "buffer-more-ints": "~1.0.0", "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.1.2", - "url-parse": "~1.4.3" + "safe-buffer": "~5.2.1", + "url-parse": "~1.5.1" }, "engines": { - "node": ">=0.8 <=12" + "node": ">=10" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bitsyntax": { "version": "0.1.0", @@ -51,6 +51,11 @@ "node": ">=0.8" } }, + "node_modules/bitsyntax/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -81,9 +86,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -122,9 +127,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -135,6 +140,9 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/inflight": { @@ -162,20 +170,22 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "node_modules/js-beautify": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz", - "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", + "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", "dependencies": { "config-chain": "^1.1.12", "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.1", - "nopt": "~4.0.1" + "nopt": "^5.0.0" }, "bin": { "css-beautify": "js/bin/css-beautify.js", "html-beautify": "js/bin/html-beautify.js", "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/lru-cache": { @@ -198,37 +208,23 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/once": { @@ -239,31 +235,6 @@ "wrappy": "1" } }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -283,9 +254,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "node_modules/querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/readable-stream": { "version": "1.1.14", @@ -304,9 +275,23 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/semver": { "version": "5.7.1", @@ -327,9 +312,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -353,22 +338,22 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "amqplib": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.6.0.tgz", - "integrity": "sha512-zXCh4jQ77TBZe1YtvZ1n7sUxnTjnNagpy8MVi2yc1ive239pS3iLwm4e4d5o4XZGx1BdTKQ/U0ZmaDU3c8MxYQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.8.0.tgz", + "integrity": "sha512-icU+a4kkq4Y1PS4NNi+YPDMwdlbFcZ1EZTQT2nigW3fvOb6AOgUQ9+Mk4ue0Zu5cBg/XpDzB40oH10ysrk2dmA==", "requires": { "bitsyntax": "~0.1.0", - "bluebird": "^3.5.2", + "bluebird": "^3.7.2", "buffer-more-ints": "~1.0.0", "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.1.2", - "url-parse": "~1.4.3" + "safe-buffer": "~5.2.1", + "url-parse": "~1.5.1" } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "bitsyntax": { "version": "0.1.0", @@ -378,6 +363,13 @@ "buffer-more-ints": "~1.0.0", "debug": "~2.6.9", "safe-buffer": "~5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "bluebird": { @@ -410,9 +402,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "requires": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -448,9 +440,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -485,14 +477,13 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "js-beautify": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.5.tgz", - "integrity": "sha512-MsXlH6Z/BiRYSkSRW3clNDqDjSpiSNOiG8xYVUBXt4k0LnGvDhlTGOlHX1VFtAdoLmtwjxMG5qiWKy/g+Ipv5w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", + "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", "requires": { "config-chain": "^1.1.12", "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "^1.0.4", "nopt": "^5.0.0" } }, @@ -513,11 +504,6 @@ "brace-expansion": "^1.1.7" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -576,9 +562,9 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { "version": "5.7.1", @@ -596,9 +582,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" From 6aaad606562e8278686e0b8d607db48a3fdcee74 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 29 Jun 2021 07:47:16 +0300 Subject: [PATCH 207/659] Node: README formatting --- javascript-nodejs/README.md | 42 ++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/javascript-nodejs/README.md b/javascript-nodejs/README.md index 025a64c2..2c90a082 100644 --- a/javascript-nodejs/README.md +++ b/javascript-nodejs/README.md @@ -17,39 +17,51 @@ to run these tutorials. To install `amqp.node` using npm: - npm install amqplib -g +``` shell +npm install amqplib -g +``` ## Code [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html): - node src/send.js - node src/receive.js - +``` shell +node src/send.js +node src/receive.js +``` [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html): - node src/new_task.js "A very hard task which takes two seconds.." - node src/worker.js - +``` shell +node src/new_task.js "A very hard task which takes two seconds.." +node src/worker.js +``` [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-javascript.html) - node src/receive_logs.js - node src/emit_log.js "info: This is the log message" +``` shell +node src/receive_logs.js +node src/emit_log.js "info: This is the log message" +``` [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-javascript.html): - node src/receive_logs_direct.js info - node src/emit_log_direct.js info "The message" +``` shell +node src/receive_logs_direct.js info +node src/emit_log_direct.js info "The message" +``` [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-javascript.html): - node src/receive_logs_topic.js "*.rabbit" - node src/emit_log_topic.js red.rabbit Hello +``` shell +node src/receive_logs_topic.js "*.rabbit" +node src/emit_log_topic.js red.rabbit Hello +``` [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html): - node src/rpc_server.js - node src/rpc_client.js 30 +``` shell +node src/rpc_server.js +node src/rpc_client.js 30 +``` \ No newline at end of file From 49411d1801dbb6939b774211fa7ef1706340a867 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 29 Jun 2021 08:37:17 +0300 Subject: [PATCH 208/659] .NET: target netcoreapp3.1 --- dotnet/EmitLog/EmitLog.csproj | 2 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 2 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 2 +- dotnet/NewTask/NewTask.csproj | 2 +- dotnet/PublisherConfirms/PublisherConfirms.csproj | 2 +- dotnet/RPCClient/RPCClient.csproj | 2 +- dotnet/RPCServer/RPCServer.csproj | 2 +- dotnet/Receive/Receive.csproj | 2 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 2 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 2 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 2 +- dotnet/Send/Send.csproj | 2 +- dotnet/Worker/Worker.csproj | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 440881a2..e67b0d00 100755 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable EmitLog Exe diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 87a1c419..a992cb01 100755 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable EmitLogDirect Exe diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index df841e26..9e67c891 100755 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable EmitLogTopic Exe diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 128c9daa..ea53c62c 100755 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable NewTask Exe diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index 894ef631..3c341c57 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -1,7 +1,7 @@ - netcoreapp2.1 + netcoreapp3.1 portable PublisherConfirms Exe diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 637d3e92..58092421 100755 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable RPCClient Exe diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index ddac86ca..205a7f34 100755 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -1,7 +1,7 @@  - netcoreapp3.0 + netcoreapp3.1 portable RPCServer Exe diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 460eff52..0e71c3dd 100755 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -1,7 +1,7 @@  - netcoreapp3.0 + netcoreapp3.1 portable Receive Exe diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 21450e8b..616d42bb 100755 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable ReceiveLogs Exe diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index ff3040e1..34b29bcc 100755 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable ReceiveLogsDirect Exe diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 94d55c8f..3bd17d89 100755 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable ReceiveLogsTopic Exe diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index f350c104..f3259a91 100755 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -1,7 +1,7 @@  - netcoreapp3.0 + netcoreapp3.1 portable Send Exe diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index c3a6e004..9984d6da 100755 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -1,6 +1,6 @@  - netcoreapp3.0 + netcoreapp3.1 portable Worker Exe From 08d574812fa0f2c5b84a8562bc13df123f29c458 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 29 Jun 2021 08:38:05 +0300 Subject: [PATCH 209/659] .NET: clarify how server-named queues are declared To avoid confusion, references #292 --- dotnet/PublisherConfirms/PublisherConfirms.cs | 9 ++++++--- dotnet/RPCClient/RPCClient.cs | 3 ++- dotnet/ReceiveLogs/ReceiveLogs.cs | 3 ++- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 3 ++- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 3 ++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index 6c3597b3..d11c2f62 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -28,7 +28,8 @@ private static void PublishMessagesIndividually() using (var connection = CreateConnection()) using (var channel = connection.CreateModel()) { - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; channel.ConfirmSelect(); var timer = new Stopwatch(); @@ -49,7 +50,8 @@ private static void PublishMessagesInBatch() using (var connection = CreateConnection()) using (var channel = connection.CreateModel()) { - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; channel.ConfirmSelect(); var batchSize = 100; @@ -82,7 +84,8 @@ private static void HandlePublishConfirmsAsynchronously() using (var connection = CreateConnection()) using (var channel = connection.CreateModel()) { - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; channel.ConfirmSelect(); var outstandingConfirms = new ConcurrentDictionary(); diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 47de79c9..e053031f 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -23,7 +23,8 @@ public RpcClient() connection = factory.CreateConnection(); channel = connection.CreateModel(); - replyQueueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + replyQueueName = channel.QueueDeclare(queue: "").QueueName; consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs index 5b34db00..9d554300 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet/ReceiveLogs/ReceiveLogs.cs @@ -13,7 +13,8 @@ public static void Main() { channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); Console.WriteLine(" [*] Waiting for logs."); diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs index 504affb4..02ca2ed8 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -12,7 +12,8 @@ public static void Main(string[] args) using(var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; if (args.Length < 1) { diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs index 3a5c95db..803b7809 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -12,7 +12,8 @@ public static void Main(string[] args) using(var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); - var queueName = channel.QueueDeclare().QueueName; + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; if (args.Length < 1) { From 12fbf18d9bf27b92419c1ddf6d67b4692bc66479 Mon Sep 17 00:00:00 2001 From: Ivan Agarsky Date: Sun, 8 Aug 2021 14:47:58 +0200 Subject: [PATCH 210/659] Don't call BasicConsume inside Call method --- dotnet/RPCClient/RPCClient.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index e053031f..36aa8ff8 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -34,6 +34,11 @@ public RpcClient() var response = Encoding.UTF8.GetString(body); tcs.TrySetResult(response); }; + + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); } public Task CallAsync(string message, CancellationToken cancellationToken = default(CancellationToken)) @@ -52,11 +57,6 @@ public RpcClient() basicProperties: props, body: messageBytes); - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); - cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); return tcs.Task; } From d4f65fd230f51c55dfdc2601597e070e2867db35 Mon Sep 17 00:00:00 2001 From: Chen Zhang <340355960@qq.com> Date: Tue, 17 Aug 2021 22:07:02 +0800 Subject: [PATCH 211/659] Improve Travis CI build Performance --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8e9edb81..152d7d8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,3 +9,7 @@ branches: - master env: - RUBY=ruby GEM=gem SLOWNESS=6 + +cache: + directories: + - $HOME/.m2 From 654907f04b4e60523ea502b5edfde7b21fe53556 Mon Sep 17 00:00:00 2001 From: Guy Date: Tue, 28 Sep 2021 17:01:42 -0700 Subject: [PATCH 212/659] Add .NET 6.0 tutorials with Visual Studio 2022 --- dotnet-6/.gitignore | 4 + dotnet-6/EmitLog/EmitLog.cs | 21 +++ dotnet-6/EmitLog/EmitLog.csproj | 17 +++ dotnet-6/EmitLogDirect/EmitLogDirect.cs | 17 +++ dotnet-6/EmitLogDirect/EmitLogDirect.csproj | 17 +++ dotnet-6/EmitLogTopic/EmitLogTopic.cs | 15 ++ dotnet-6/EmitLogTopic/EmitLogTopic.csproj | 17 +++ dotnet-6/NewTask/NewTask.cs | 25 ++++ dotnet-6/NewTask/NewTask.csproj | 17 +++ .../PublisherConfirms/PublisherConfirms.cs | 129 ++++++++++++++++++ .../PublisherConfirms.csproj | 17 +++ dotnet-6/README.md | 66 +++++++++ dotnet-6/RPCClient/RPCClient.cs | 89 ++++++++++++ dotnet-6/RPCClient/RPCClient.csproj | 17 +++ dotnet-6/RPCServer/RPCServer.cs | 59 ++++++++ dotnet-6/RPCServer/RPCServer.csproj | 17 +++ dotnet-6/Receive/Receive.cs | 23 ++++ dotnet-6/Receive/Receive.csproj | 17 +++ dotnet-6/ReceiveLogs/ReceiveLogs.cs | 27 ++++ dotnet-6/ReceiveLogs/ReceiveLogs.csproj | 17 +++ .../ReceiveLogsDirect/ReceiveLogsDirect.cs | 41 ++++++ .../ReceiveLogsDirect.csproj | 17 +++ dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs | 41 ++++++ .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 17 +++ dotnet-6/Receiver | 20 +++ dotnet-6/Send/Send.cs | 18 +++ dotnet-6/Send/Send.csproj | 17 +++ dotnet-6/Worker/Worker.cs | 33 +++++ dotnet-6/Worker/Worker.csproj | 17 +++ dotnet-6/dotnet-6.sln | 108 +++++++++++++++ dotnet-6/recompile.bat | 1 + dotnet-6/recompile.ps1 | 7 + dotnet-6/recompile.sh | 6 + dotnet-6/update.ps1 | 6 + 34 files changed, 977 insertions(+) create mode 100644 dotnet-6/.gitignore create mode 100644 dotnet-6/EmitLog/EmitLog.cs create mode 100644 dotnet-6/EmitLog/EmitLog.csproj create mode 100644 dotnet-6/EmitLogDirect/EmitLogDirect.cs create mode 100644 dotnet-6/EmitLogDirect/EmitLogDirect.csproj create mode 100644 dotnet-6/EmitLogTopic/EmitLogTopic.cs create mode 100644 dotnet-6/EmitLogTopic/EmitLogTopic.csproj create mode 100644 dotnet-6/NewTask/NewTask.cs create mode 100644 dotnet-6/NewTask/NewTask.csproj create mode 100644 dotnet-6/PublisherConfirms/PublisherConfirms.cs create mode 100644 dotnet-6/PublisherConfirms/PublisherConfirms.csproj create mode 100644 dotnet-6/README.md create mode 100644 dotnet-6/RPCClient/RPCClient.cs create mode 100644 dotnet-6/RPCClient/RPCClient.csproj create mode 100644 dotnet-6/RPCServer/RPCServer.cs create mode 100644 dotnet-6/RPCServer/RPCServer.csproj create mode 100644 dotnet-6/Receive/Receive.cs create mode 100644 dotnet-6/Receive/Receive.csproj create mode 100644 dotnet-6/ReceiveLogs/ReceiveLogs.cs create mode 100644 dotnet-6/ReceiveLogs/ReceiveLogs.csproj create mode 100644 dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs create mode 100644 dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj create mode 100644 dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs create mode 100644 dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj create mode 100644 dotnet-6/Receiver create mode 100644 dotnet-6/Send/Send.cs create mode 100644 dotnet-6/Send/Send.csproj create mode 100644 dotnet-6/Worker/Worker.cs create mode 100644 dotnet-6/Worker/Worker.csproj create mode 100644 dotnet-6/dotnet-6.sln create mode 100644 dotnet-6/recompile.bat create mode 100644 dotnet-6/recompile.ps1 create mode 100644 dotnet-6/recompile.sh create mode 100644 dotnet-6/update.ps1 diff --git a/dotnet-6/.gitignore b/dotnet-6/.gitignore new file mode 100644 index 00000000..52800612 --- /dev/null +++ b/dotnet-6/.gitignore @@ -0,0 +1,4 @@ +*.dll +*.exe +*.lock.json +packages/ diff --git a/dotnet-6/EmitLog/EmitLog.cs b/dotnet-6/EmitLog/EmitLog.cs new file mode 100644 index 00000000..936b9ea6 --- /dev/null +++ b/dotnet-6/EmitLog/EmitLog.cs @@ -0,0 +1,21 @@ +using RabbitMQ.Client; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); + +var message = GetMessage(args); +var body = Encoding.UTF8.GetBytes(message); +channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body); +Console.WriteLine($" [x] Sent {message}"); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); + +static string GetMessage(string[] args) +{ + return ((args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); +} \ No newline at end of file diff --git a/dotnet-6/EmitLog/EmitLog.csproj b/dotnet-6/EmitLog/EmitLog.csproj new file mode 100644 index 00000000..422940c4 --- /dev/null +++ b/dotnet-6/EmitLog/EmitLog.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + EmitLog + Exe + EmitLog + enable + enable + + + + + + + diff --git a/dotnet-6/EmitLogDirect/EmitLogDirect.cs b/dotnet-6/EmitLogDirect/EmitLogDirect.cs new file mode 100644 index 00000000..2e6aac4b --- /dev/null +++ b/dotnet-6/EmitLogDirect/EmitLogDirect.cs @@ -0,0 +1,17 @@ +using RabbitMQ.Client; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); + +var severity = (args.Length > 0) ? args[0] : "info"; +var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; +var body = Encoding.UTF8.GetBytes(message); +channel.BasicPublish(exchange: "direct_logs", routingKey: severity, basicProperties: null, body: body); +Console.WriteLine($" [x] Sent '{severity}':'{message}'"); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/EmitLogDirect/EmitLogDirect.csproj b/dotnet-6/EmitLogDirect/EmitLogDirect.csproj new file mode 100644 index 00000000..9cb08cf5 --- /dev/null +++ b/dotnet-6/EmitLogDirect/EmitLogDirect.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + EmitLogDirect + Exe + EmitLogDirect + enable + enable + + + + + + + diff --git a/dotnet-6/EmitLogTopic/EmitLogTopic.cs b/dotnet-6/EmitLogTopic/EmitLogTopic.cs new file mode 100644 index 00000000..93f58cfb --- /dev/null +++ b/dotnet-6/EmitLogTopic/EmitLogTopic.cs @@ -0,0 +1,15 @@ +using RabbitMQ.Client; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; + +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); + +var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; +var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; +var body = Encoding.UTF8.GetBytes(message); +channel.BasicPublish(exchange: "topic_logs", routingKey: routingKey, basicProperties: null, body: body); +Console.WriteLine($" [x] Sent '{routingKey}':'{message}'"); \ No newline at end of file diff --git a/dotnet-6/EmitLogTopic/EmitLogTopic.csproj b/dotnet-6/EmitLogTopic/EmitLogTopic.csproj new file mode 100644 index 00000000..655a55ea --- /dev/null +++ b/dotnet-6/EmitLogTopic/EmitLogTopic.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + EmitLogTopic + Exe + EmitLogTopic + enable + enable + + + + + + + diff --git a/dotnet-6/NewTask/NewTask.cs b/dotnet-6/NewTask/NewTask.cs new file mode 100644 index 00000000..a2d254fa --- /dev/null +++ b/dotnet-6/NewTask/NewTask.cs @@ -0,0 +1,25 @@ +using RabbitMQ.Client; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); + +var message = GetMessage(args); +var body = Encoding.UTF8.GetBytes(message); + +var properties = channel.CreateBasicProperties(); +properties.Persistent = true; + +channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); +Console.WriteLine($" [x] Sent {message}"); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); + +static string GetMessage(string[] args) +{ + return ((args.Length > 0) ? string.Join(" ", args) : "Hello World!"); +} \ No newline at end of file diff --git a/dotnet-6/NewTask/NewTask.csproj b/dotnet-6/NewTask/NewTask.csproj new file mode 100644 index 00000000..97bd25fc --- /dev/null +++ b/dotnet-6/NewTask/NewTask.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + NewTask + Exe + NewTask + enable + enable + + + + + + + diff --git a/dotnet-6/PublisherConfirms/PublisherConfirms.cs b/dotnet-6/PublisherConfirms/PublisherConfirms.cs new file mode 100644 index 00000000..97f38865 --- /dev/null +++ b/dotnet-6/PublisherConfirms/PublisherConfirms.cs @@ -0,0 +1,129 @@ +using RabbitMQ.Client; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Text; + +const int MESSAGE_COUNT = 50_000; + +PublishMessagesIndividually(); +PublishMessagesInBatch(); +HandlePublishConfirmsAsynchronously(); + +static IConnection CreateConnection() +{ + var factory = new ConnectionFactory { HostName = "localhost" }; + return factory.CreateConnection(); +} + +static void PublishMessagesIndividually() +{ + using var connection = CreateConnection(); + using var channel = connection.CreateModel(); + + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; + channel.ConfirmSelect(); + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + } + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); +} + +static void PublishMessagesInBatch() +{ + using var connection = CreateConnection(); + using var channel = connection.CreateModel(); + + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; + channel.ConfirmSelect(); + + var batchSize = 100; + var outstandingMessageCount = 0; + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = Encoding.UTF8.GetBytes(i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + outstandingMessageCount++; + + if (outstandingMessageCount == batchSize) + { + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + outstandingMessageCount = 0; + } + } + + if (outstandingMessageCount > 0) + channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); +} + +static void HandlePublishConfirmsAsynchronously() +{ + using var connection = CreateConnection(); + using var channel = connection.CreateModel(); + + // declare a server-named queue + var queueName = channel.QueueDeclare(queue: "").QueueName; + channel.ConfirmSelect(); + + var outstandingConfirms = new ConcurrentDictionary(); + + void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) + { + if (multiple) + { + var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); + foreach (var entry in confirmed) + outstandingConfirms.TryRemove(entry.Key, out _); + } + else + outstandingConfirms.TryRemove(sequenceNumber, out _); + } + + channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + channel.BasicNacks += (sender, ea) => + { + outstandingConfirms.TryGetValue(ea.DeliveryTag, out string? body); + Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); + cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + }; + + var timer = new Stopwatch(); + timer.Start(); + for (int i = 0; i < MESSAGE_COUNT; i++) + { + var body = i.ToString(); + outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); + channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); + } + + if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) + throw new Exception("All messages could not be confirmed in 60 seconds"); + + timer.Stop(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); +} + +static bool WaitUntil(int numberOfSeconds, Func condition) +{ + int waited = 0; + while(!condition() && waited < numberOfSeconds * 1000) + { + Thread.Sleep(100); + waited += 100; + } + + return condition(); +} \ No newline at end of file diff --git a/dotnet-6/PublisherConfirms/PublisherConfirms.csproj b/dotnet-6/PublisherConfirms/PublisherConfirms.csproj new file mode 100644 index 00000000..0755edd1 --- /dev/null +++ b/dotnet-6/PublisherConfirms/PublisherConfirms.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + PublisherConfirms + Exe + PublisherConfirms + enable + enable + + + + + + + diff --git a/dotnet-6/README.md b/dotnet-6/README.md new file mode 100644 index 00000000..8b11ac95 --- /dev/null +++ b/dotnet-6/README.md @@ -0,0 +1,66 @@ +# Dotnet C# code for RabbitMQ tutorials + +Here you can find the C# code examples for [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 6.0. + +You will also find a solution file for Visual Studio 2022. + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +### Requirements on Windows + +* [dotnet core](https://www.microsoft.com/net/core) + +We're using the command line (start->run cmd.exe) to +compile and run -p the code. Alternatively you could use Visual Studio, but this set of tutorials assumes +the command line. + +### Requirements on Linux + +* [dotnet core](https://www.microsoft.com/net/core) + +### Code + +Each command is best run in a separate console/terminal instance run from the root +of the tutorial directory. + +First run the `recompile.sh` script on Linux, for Windows run `recompile.bat` script from Command Line or +`recompile.ps1` script from Power Shell. This will run `dotnet restore` and build each project which is +required before they can be run. Alternatively or if you are on windows cd into each project and run +`dotnet restore` manually. + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) + + dotnet run -p Receive/Receive.csproj + dotnet run -p Send/Send.csproj + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) + + dotnet run -p Worker/Worker.csproj + dotnet run -p NewTask/NewTask.csproj + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) + + dotnet run -p ReceiveLogs/ReceiveLogs.csproj + dotnet run -p EmitLog/EmitLog.csproj + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) + + dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info + dotnet run -p EmitLogDirect/EmitLogDirect.csproj + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) + + dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info + dotnet run -p EmitLogTopic/EmitLogTopic.csproj + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) + + dotnet run -p RPCServer/RPCServer.csproj + dotnet run -p RPCClient/RPCClient.csproj + +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) + + dotnet run -p PublisherConfirms/PublisherConfirms.csproj diff --git a/dotnet-6/RPCClient/RPCClient.cs b/dotnet-6/RPCClient/RPCClient.cs new file mode 100644 index 00000000..6155f836 --- /dev/null +++ b/dotnet-6/RPCClient/RPCClient.cs @@ -0,0 +1,89 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Collections.Concurrent; +using System.Text; + +public class RpcClient +{ + private const string QUEUE_NAME = "rpc_queue"; + + private readonly IConnection connection; + private readonly IModel channel; + private readonly string replyQueueName; + private readonly EventingBasicConsumer consumer; + private readonly ConcurrentDictionary> callbackMapper = new(); + + public RpcClient() + { + var factory = new ConnectionFactory() { HostName = "localhost" }; + + connection = factory.CreateConnection(); + channel = connection.CreateModel(); + // declare a server-named queue + replyQueueName = channel.QueueDeclare(queue: "").QueueName; + consumer = new EventingBasicConsumer(channel); + consumer.Received += (model, ea) => + { + if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource? tcs)) + return; + var body = ea.Body.ToArray(); + var response = Encoding.UTF8.GetString(body); + tcs.TrySetResult(response); + }; + + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); + } + + public Task CallAsync(string message, CancellationToken cancellationToken = default) + { + IBasicProperties props = channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = replyQueueName; + var messageBytes = Encoding.UTF8.GetBytes(message); + var tcs = new TaskCompletionSource(); + callbackMapper.TryAdd(correlationId, tcs); + + channel.BasicPublish( + exchange: "", + routingKey: QUEUE_NAME, + basicProperties: props, + body: messageBytes); + + cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); + return tcs.Task; + } + + public void Close() + { + connection.Close(); + } +} + +public class Rpc +{ + public static void Main(string[] args) + { + Console.WriteLine("RPC Client"); + string n = args.Length > 0 ? args[0] : "30"; + Task t = InvokeAsync(n); + t.Wait(); + + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + } + + private static async Task InvokeAsync(string n) + { + var rpcClient = new RpcClient(); + + Console.WriteLine(" [x] Requesting fib({0})", n); + var response = await rpcClient.CallAsync(n.ToString()); + Console.WriteLine(" [.] Got '{0}'", response); + + rpcClient.Close(); + } +} \ No newline at end of file diff --git a/dotnet-6/RPCClient/RPCClient.csproj b/dotnet-6/RPCClient/RPCClient.csproj new file mode 100644 index 00000000..896de27a --- /dev/null +++ b/dotnet-6/RPCClient/RPCClient.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + RPCClient + Exe + RPCClient + enable + enable + + + + + + + diff --git a/dotnet-6/RPCServer/RPCServer.cs b/dotnet-6/RPCServer/RPCServer.cs new file mode 100644 index 00000000..53f3d075 --- /dev/null +++ b/dotnet-6/RPCServer/RPCServer.cs @@ -0,0 +1,59 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); +channel.BasicQos(0, 1, false); +var consumer = new EventingBasicConsumer(channel); +channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); +Console.WriteLine(" [x] Awaiting RPC requests"); + +consumer.Received += (model, ea) => +{ + string response = string.Empty; + + var body = ea.Body.ToArray(); + var props = ea.BasicProperties; + var replyProps = channel.CreateBasicProperties(); + replyProps.CorrelationId = props.CorrelationId; + + try + { + var message = Encoding.UTF8.GetString(body); + int n = int.Parse(message); + Console.WriteLine($" [.] fib({message})"); + response = fib(n).ToString(); + } + catch (Exception e) + { + Console.WriteLine($" [.] {e.Message}"); + response = ""; + } + finally + { + var responseBytes = Encoding.UTF8.GetBytes(response); + channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); + channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + } +}; + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); + +///

    +/// Assumes only valid positive integer input. +/// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. +/// +static int fib(int n) +{ + if (n == 0 || n == 1) + { + return n; + } + + return fib(n - 1) + fib(n - 2); +} \ No newline at end of file diff --git a/dotnet-6/RPCServer/RPCServer.csproj b/dotnet-6/RPCServer/RPCServer.csproj new file mode 100644 index 00000000..e55ce07f --- /dev/null +++ b/dotnet-6/RPCServer/RPCServer.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + RPCServer + Exe + RPCServer + enable + enable + + + + + + + diff --git a/dotnet-6/Receive/Receive.cs b/dotnet-6/Receive/Receive.cs new file mode 100644 index 00000000..a5b53048 --- /dev/null +++ b/dotnet-6/Receive/Receive.cs @@ -0,0 +1,23 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); + +Console.WriteLine(" [*] Waiting for messages."); + +var consumer = new EventingBasicConsumer(channel); +consumer.Received += (model, ea) => +{ + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + Console.WriteLine($" [x] Received {message}"); +}; +channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/Receive/Receive.csproj b/dotnet-6/Receive/Receive.csproj new file mode 100644 index 00000000..fca9a1c3 --- /dev/null +++ b/dotnet-6/Receive/Receive.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + Receive + Exe + Receive + enable + enable + + + + + + + diff --git a/dotnet-6/ReceiveLogs/ReceiveLogs.cs b/dotnet-6/ReceiveLogs/ReceiveLogs.cs new file mode 100644 index 00000000..8ede7ae5 --- /dev/null +++ b/dotnet-6/ReceiveLogs/ReceiveLogs.cs @@ -0,0 +1,27 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); + +// declare a server-named queue +var queueName = channel.QueueDeclare(queue: "").QueueName; +channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); + +Console.WriteLine(" [*] Waiting for logs."); + +var consumer = new EventingBasicConsumer(channel); +consumer.Received += (model, ea) => +{ + byte[] body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + Console.WriteLine($" [x] {message}"); +}; +channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/ReceiveLogs/ReceiveLogs.csproj b/dotnet-6/ReceiveLogs/ReceiveLogs.csproj new file mode 100644 index 00000000..73b9d47a --- /dev/null +++ b/dotnet-6/ReceiveLogs/ReceiveLogs.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + ReceiveLogs + Exe + ReceiveLogs + enable + enable + + + + + + + diff --git a/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs new file mode 100644 index 00000000..f8721297 --- /dev/null +++ b/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -0,0 +1,41 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; + +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); +// declare a server-named queue +var queueName = channel.QueueDeclare(queue: "").QueueName; + +if (args.Length < 1) +{ + Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + Environment.ExitCode = 1; + return; +} + +foreach(var severity in args) +{ + channel.QueueBind(queue: queueName, exchange: "direct_logs", routingKey: severity); +} + +Console.WriteLine(" [*] Waiting for messages."); + +var consumer = new EventingBasicConsumer(channel); +consumer.Received += (model, ea) => +{ + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + var routingKey = ea.RoutingKey; + Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); +}; +channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj new file mode 100644 index 00000000..d67c2f75 --- /dev/null +++ b/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + ReceiveLogsDirect + Exe + ReceiveLogsDirect + enable + enable + + + + + + + diff --git a/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs new file mode 100644 index 00000000..de869149 --- /dev/null +++ b/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -0,0 +1,41 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; + +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); +// declare a server-named queue +var queueName = channel.QueueDeclare(queue: "").QueueName; + +if (args.Length < 1) +{ + Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + Environment.ExitCode = 1; + return; +} + +foreach(var bindingKey in args) +{ + channel.QueueBind(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); +} + +Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); + +var consumer = new EventingBasicConsumer(channel); +consumer.Received += (model, ea) => +{ + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + var routingKey = ea.RoutingKey; + Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); +}; +channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj new file mode 100644 index 00000000..a1c09ae9 --- /dev/null +++ b/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + ReceiveLogsTopic + Exe + ReceiveLogsTopic + enable + enable + + + + + + + diff --git a/dotnet-6/Receiver b/dotnet-6/Receiver new file mode 100644 index 00000000..a05ac538 --- /dev/null +++ b/dotnet-6/Receiver @@ -0,0 +1,20 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "debugType": "portable", + "emitEntryPoint": true + }, + "dependencies": {}, + "frameworks": { + "netcoreapp1.0": { + "dependencies": { + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.0" + }, + "RabbitMQ.Client": "5.0.*" + }, + "imports": "dnxcore50" + } + } +} diff --git a/dotnet-6/Send/Send.cs b/dotnet-6/Send/Send.cs new file mode 100644 index 00000000..bde7e19c --- /dev/null +++ b/dotnet-6/Send/Send.cs @@ -0,0 +1,18 @@ +using RabbitMQ.Client; +using System.Text; + + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); + +string message = "Hello World!"; +var body = Encoding.UTF8.GetBytes(message); + +channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); +Console.WriteLine($" [x] Sent {message}"); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/Send/Send.csproj b/dotnet-6/Send/Send.csproj new file mode 100644 index 00000000..7d24d70b --- /dev/null +++ b/dotnet-6/Send/Send.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + Send + Exe + Send + enable + enable + + + + + + + diff --git a/dotnet-6/Worker/Worker.cs b/dotnet-6/Worker/Worker.cs new file mode 100644 index 00000000..8e210902 --- /dev/null +++ b/dotnet-6/Worker/Worker.cs @@ -0,0 +1,33 @@ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +var factory = new ConnectionFactory() { HostName = "localhost" }; +using var connection = factory.CreateConnection(); +using var channel = connection.CreateModel(); + +channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); + +channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); + +Console.WriteLine(" [*] Waiting for messages."); + +var consumer = new EventingBasicConsumer(channel); +consumer.Received += (model, ea) => +{ + byte[] body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + Console.WriteLine($" [x] Received {message}"); + + int dots = message.Split('.').Length - 1; + Thread.Sleep(dots * 1000); + + Console.WriteLine(" [x] Done"); + + // here channel could also be accessed as ((EventingBasicConsumer)sender).Model + channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); +}; +channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-6/Worker/Worker.csproj b/dotnet-6/Worker/Worker.csproj new file mode 100644 index 00000000..9417ae7b --- /dev/null +++ b/dotnet-6/Worker/Worker.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + portable + Worker + Exe + Worker + enable + enable + + + + + + + diff --git a/dotnet-6/dotnet-6.sln b/dotnet-6/dotnet-6.sln new file mode 100644 index 00000000..b3a78af9 --- /dev/null +++ b/dotnet-6/dotnet-6.sln @@ -0,0 +1,108 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31717.71 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLog", "EmitLog\EmitLog.csproj", "{38520F1F-5F59-4D6C-815A-BCB811B8335E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogDirect", "EmitLogDirect\EmitLogDirect.csproj", "{303D712F-9107-41D9-A855-46A281DA250C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogTopic", "EmitLogTopic\EmitLogTopic.csproj", "{E1A0AF83-F505-483E-9F22-C0A137E4B190}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewTask", "NewTask\NewTask.csproj", "{7575E7F7-4C5E-42A2-894D-DDCD16D964DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublisherConfirms", "PublisherConfirms\PublisherConfirms.csproj", "{0BBAF99D-B711-4201-B30B-114D88EDD276}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receive", "Receive\Receive.csproj", "{BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogs", "ReceiveLogs\ReceiveLogs.csproj", "{63E5ECF3-C78E-4461-8247-33F3BF019EF1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsDirect", "ReceiveLogsDirect\ReceiveLogsDirect.csproj", "{D16666BC-C69F-49D4-96B9-3DC562CC11C4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCClient", "RPCClient\RPCClient.csproj", "{6161C019-58A6-4A72-B3F8-D1A1FD2681E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Send", "Send\Send.csproj", "{1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "Worker\Worker.csproj", "{0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCServer", "RPCServer\RPCServer.csproj", "{7317B766-BBD8-402B-82E3-1DBAA376FA64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsTopic", "ReceiveLogsTopic\ReceiveLogsTopic.csproj", "{497698C7-9D59-478F-9394-265915455F00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Folder", "Solution Folder", "{853BA576-BFDF-4547-BA70-BC7781EDAB10}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + README.md = README.md + Receiver = Receiver + recompile.bat = recompile.bat + recompile.ps1 = recompile.ps1 + recompile.sh = recompile.sh + update.ps1 = update.ps1 + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.Build.0 = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.Build.0 = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.Build.0 = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.Build.0 = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.Build.0 = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.Build.0 = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.Build.0 = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.Build.0 = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.Build.0 = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.Build.0 = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.Build.0 = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.Build.0 = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {22E2792A-85EF-4497-AA49-1A9C62A33CAC} + EndGlobalSection +EndGlobal diff --git a/dotnet-6/recompile.bat b/dotnet-6/recompile.bat new file mode 100644 index 00000000..7f486ec1 --- /dev/null +++ b/dotnet-6/recompile.bat @@ -0,0 +1 @@ +for /D %%s in (.\*) do @dotnet build %%s diff --git a/dotnet-6/recompile.ps1 b/dotnet-6/recompile.ps1 new file mode 100644 index 00000000..53c42e21 --- /dev/null +++ b/dotnet-6/recompile.ps1 @@ -0,0 +1,7 @@ +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose + +Get-Childitem -Recurse '*.csproj' | ForEach-Object { + # & dotnet build $_.FullName + & dotnet build $_ +} diff --git a/dotnet-6/recompile.sh b/dotnet-6/recompile.sh new file mode 100644 index 00000000..d67be133 --- /dev/null +++ b/dotnet-6/recompile.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +for f in */; do \ + dotnet restore $f + dotnet build $f +done diff --git a/dotnet-6/update.ps1 b/dotnet-6/update.ps1 new file mode 100644 index 00000000..21724b99 --- /dev/null +++ b/dotnet-6/update.ps1 @@ -0,0 +1,6 @@ +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose + +Get-Childitem -Recurse '*.csproj' | ForEach-Object { + & dotnet add $_ package --version '6.0.0' RabbitMQ.Client +} From b79f11746799b3ebb38349f6caa2e52449b518e9 Mon Sep 17 00:00:00 2001 From: Kracekumar Date: Mon, 4 Oct 2021 00:21:02 +0530 Subject: [PATCH 213/659] Add julia RabbitMQ examples --- julia/README.md | 63 ++++++++++++++++++++++++++++++++ julia/emit_log.jl | 29 +++++++++++++++ julia/emit_log_direct.jl | 31 ++++++++++++++++ julia/emit_log_topic.jl | 31 ++++++++++++++++ julia/new_task.jl | 32 ++++++++++++++++ julia/receive.jl | 48 ++++++++++++++++++++++++ julia/receive_logs.jl | 44 ++++++++++++++++++++++ julia/receive_logs_direct.jl | 55 ++++++++++++++++++++++++++++ julia/receive_logs_topic.jl | 56 ++++++++++++++++++++++++++++ julia/rpc_client.jl | 62 +++++++++++++++++++++++++++++++ julia/rpc_server.jl | 71 ++++++++++++++++++++++++++++++++++++ julia/send.jl | 24 ++++++++++++ julia/worker.jl | 48 ++++++++++++++++++++++++ 13 files changed, 594 insertions(+) create mode 100644 julia/README.md create mode 100644 julia/emit_log.jl create mode 100644 julia/emit_log_direct.jl create mode 100644 julia/emit_log_topic.jl create mode 100644 julia/new_task.jl create mode 100644 julia/receive.jl create mode 100644 julia/receive_logs.jl create mode 100644 julia/receive_logs_direct.jl create mode 100644 julia/receive_logs_topic.jl create mode 100644 julia/rpc_client.jl create mode 100644 julia/rpc_server.jl create mode 100755 julia/send.jl create mode 100644 julia/worker.jl diff --git a/julia/README.md b/julia/README.md new file mode 100644 index 00000000..cc6ca9c6 --- /dev/null +++ b/julia/README.md @@ -0,0 +1,63 @@ +# Julia code for RabbitMQ tutorials + +Here you can find Julia code examples from [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +To run this code you need to install the `AMQPClient` and `JSON`. To install it, run + +``` julia +julia> using Pkg + +julia> Pkg.add("AMQPClient") + Updating registry at `~/.julia/registries/General` + Resolving package versions... + No Changes to `~/.julia/environments/v1.6/Project.toml` + No Changes to `~/.julia/environments/v1.6/Manifest.toml` + +julia> Pkg.add("JSON") + Resolving package versions... + No Changes to `~/.julia/environments/v1.6/Project.toml` + No Changes to `~/.julia/environments/v1.6/Manifest.toml` + +``` + +## Code + +Tutorial one: "Hello World!" + + julia send.jl + julia receive.jl + + +Tutorial two: Work Queues: + + julia new_task.jl "A very hard task which takes two seconds.." + julia worker.jl + + +Tutorial three: Publish/Subscribe + + julia receive_logs.jl + julia emit_log.jl "info: This is the log message" + + +Tutorial four: Routing + + julia receive_logs_direct.jl info + julia emit_log_direct.jl info "The message" + + +Tutorial five: Topics + + julia receive_logs_topic.jl "*.rabbit" + julia emit_log_topic.jl red.rabbit Hello + + +Tutorial six: RPC + + julia rpc_server.jl + julia rpc_client.jl diff --git a/julia/emit_log.jl b/julia/emit_log.jl new file mode 100644 index 00000000..64666287 --- /dev/null +++ b/julia/emit_log.jl @@ -0,0 +1,29 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + +function send() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + exchange = "logs" + # 3. Declare the exchange + exchange_declare(chan, exchange, EXCHANGE_TYPE_FANOUT) + if length(Base.ARGS) >= 1 + received = join(Base.ARGS, ' ') + else + received = "info: Hello World" + end + + data = convert(Vector{UInt8}, codeunits(received)) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT) + + # 4. Publish message + basic_publish(chan, msg; exchange=exchange, routing_key="") + println("Message sent: $received") + end + end +end + +send() diff --git a/julia/emit_log_direct.jl b/julia/emit_log_direct.jl new file mode 100644 index 00000000..adf65c7d --- /dev/null +++ b/julia/emit_log_direct.jl @@ -0,0 +1,31 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function send() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare exchange + exchange = "direct_logs" + exchange_declare(chan, exchange, EXCHANGE_TYPE_DIRECT) + # 4. Get severity and message + if length(Base.ARGS) >= 3 + severity = Base.ARGS[1] + received = join(Base.ARGS[2:end], ' ') + else + severity = "info" + received = "Hello World" + end + data = convert(Vector{UInt8}, codeunits(received)) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT) + # 5. Publish the message + basic_publish(chan, msg; exchange=exchange, routing_key=severity) + println("Message sent: $received, Severity: $severity") + end + end +end + +send() diff --git a/julia/emit_log_topic.jl b/julia/emit_log_topic.jl new file mode 100644 index 00000000..31be4964 --- /dev/null +++ b/julia/emit_log_topic.jl @@ -0,0 +1,31 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + +function send() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare Exchange + exchange = "topic_logs" + exchange_topic = "topic" + exchange_declare(chan, exchange, EXCHANGE_TYPE_TOPIC) + # 4. Get input data + if length(Base.ARGS) >= 2 + routing_key = Base.ARGS[1] + received = join(Base.ARGS[2:end], ' ') + else + routing_key = "info" + received = "Hello World" + end + # 5. Prepare and send data + data = convert(Vector{UInt8}, codeunits(received)) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT) + basic_publish(chan, msg; exchange=exchange, routing_key=routing_key) + println("Message sent: $received, routing key: $routing_key") + end + end +end + +send() diff --git a/julia/new_task.jl b/julia/new_task.jl new file mode 100644 index 00000000..000bd22c --- /dev/null +++ b/julia/new_task.jl @@ -0,0 +1,32 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + +function send() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + queue = "task_queue" + # 3. Configure the queue + success, queue_name, message_count, consumer_count = queue_declare(chan, queue, durable=true) + + # 4. Prepare the message text + if length(Base.ARGS) >= 1 + received = Base.ARGS[1] + else + received = "Hello World" + end + + # 5. Prepare the payload + data = convert(Vector{UInt8}, codeunits(received)) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT) + + # 6. Send the payload + basic_publish(chan, msg; exchange="", routing_key=queue) + println("Message sent: $received") + end + end +end + +send() diff --git a/julia/receive.jl b/julia/receive.jl new file mode 100644 index 00000000..02b7fe05 --- /dev/null +++ b/julia/receive.jl @@ -0,0 +1,48 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + println("Connection established") + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a queue + println("Channel created") + queue = "hello" + success, queue_name, message_count, consumer_count = queue_declare(chan, queue) + + # 4. Setup to receive + on_receive = (msg) -> begin + # 4.1 Receive message is Vector{UInt8} + data = String(msg.data) + println("Received the message: $data") + # 4.2 Acknowledge the message + basic_ack(chan, msg.delivery_tag) + end + + success, consumer_tag = basic_consume(chan, queue, on_receive) + @assert success == true + + # 5. Run for-ever + # listen to new messages + while true + sleep(1) + end + end + end +end + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/receive_logs.jl b/julia/receive_logs.jl new file mode 100644 index 00000000..819a52c9 --- /dev/null +++ b/julia/receive_logs.jl @@ -0,0 +1,44 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a exchange + exchange = "logs" + exchange_declare(chan, exchange, EXCHANGE_TYPE_FANOUT) + result, queue, _, _ = queue_declare(chan, "", durable=true) + # 4. Bind the queue + queue_bind(chan, queue, exchange, EXCHANGE_TYPE_FANOUT) + + println(" [*] Waiting for messages. To exit press CTRL+C") + on_receive = (msg) -> begin + data = String(msg.data) + println("Received the message: $data") + basic_ack(chan, msg.delivery_tag) + end + + success, consumer_tag = basic_consume(chan, queue, on_receive) + + while true + sleep(1) + end + end + end +end + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/receive_logs_direct.jl b/julia/receive_logs_direct.jl new file mode 100644 index 00000000..01f92f43 --- /dev/null +++ b/julia/receive_logs_direct.jl @@ -0,0 +1,55 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a exchange + exchange = "direct_logs" + exchange_declare(chan, exchange, EXCHANGE_TYPE_DIRECT) + + result, queue_name, _, _ = queue_declare(chan, "", exclusive=true) + + # 4. Receive queues to bind + if length(Base.ARGS) <= 0 + println(Base.stdout, "Usage: [info] [warning] [error]\n") + Base.exit(1) + end + + # 4.1 Bind queues + for severity in Base.ARGS[1:end] + queue_bind(chan, queue_name, exchange, + severity) + end + + println(" [*] Waiting for messages. To exit press CTRL+C") + on_receive = (msg) -> begin + data = String(msg.data) + println("Received the message: $data") + basic_ack(chan, msg.delivery_tag) + end + + success, consumer_tag = basic_consume(chan, queue_name, on_receive) + + while true + sleep(1) + end + end + end +end + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/receive_logs_topic.jl b/julia/receive_logs_topic.jl new file mode 100644 index 00000000..69ecc9ac --- /dev/null +++ b/julia/receive_logs_topic.jl @@ -0,0 +1,56 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a exchange and queue + exchange = "topic_logs" + exchange_declare(chan, exchange, EXCHANGE_TYPE_TOPIC) + result, queue_name, _, _ = queue_declare(chan, "", exclusive=true) + + if length(Base.ARGS) <= 0 + println(Base.stdout, "Usage: [binding_key] \n") + Base.exit(1) + end + + # 3.1 Bind all queues + for binding_key in Base.ARGS[1:end] + queue_bind(chan, queue_name, exchange, + binding_key) + end + + println(" [*] Waiting for messages. To exit press CTRL+C") + + # 4. Receive messages + on_receive = (msg) -> begin + data = String(msg.data) + println("Received the message: $data") + basic_ack(chan, msg.delivery_tag) + end + + success, consumer_tag = basic_consume(chan, queue_name, on_receive) + + while true + sleep(1) + end + end + end +end + + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/rpc_client.jl b/julia/rpc_client.jl new file mode 100644 index 00000000..da13e968 --- /dev/null +++ b/julia/rpc_client.jl @@ -0,0 +1,62 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" +using UUIDs +using JSON + +function send(n) + # 1. Create Connection + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + println("Created Connection") + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + println("Created Channel") + # 3. Create queue for response + success, queue_name, message_count, consumer_count = queue_declare(chan, "", exclusive=true) + corr_id = string(uuid4()) + + # 4. Receive the response + on_receive = (msg) -> begin + try + response = String(msg.data) + msg_corr_id = convert(String, msg.properties[:correlation_id]) + println(msg_corr_id) + if msg_corr_id == corr_id + println("Received RPC response: $response") + end + basic_ack(chan, msg.delivery_tag) + catch err + println(err) + end + end + + success, consumer_tag = basic_consume(chan, queue_name, on_receive) + + # 5. Send RPC Request in JSON encoding since integer is disallowed + data = convert(Vector{UInt8}, codeunits(JSON.json(n))) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT, correlation_id=corr_id, + reply_to=queue_name) + routing_key = "rpc_queue" + basic_publish(chan, msg; exchange="", routing_key=routing_key) + println("RPC Request sent: $n, routing_key: $queue_name") + + # Listen for ever + while true + sleep(1) + end + + end + end +end + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + send(30) +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/rpc_server.jl b/julia/rpc_server.jl new file mode 100644 index 00000000..db3f6816 --- /dev/null +++ b/julia/rpc_server.jl @@ -0,0 +1,71 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" +using JSON + + +function fib(n) + if n == 0 + return 0 + elseif n == 1 + return 1 + else + return fib(n - 1) + fib(n - 2) + end +end + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + println("Connection established") + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a queue + println("Channel created") + queue = "rpc_queue" + success, queue_name, message_count, consumer_count = queue_declare(chan, queue; durable=true) + + # 4. Receiver requests and dispatch response + on_receive = (msg) -> begin + data = String(msg.data) + # 4.1 Deserialize + number = JSON.parse(data) + println("Received requets to calculate fib[$number]") + try + output = fib(number) + res = convert(Vector{UInt8}, codeunits(JSON.json(output))) + # 4.2 Ack the received request + basic_ack(chan, msg.delivery_tag) + # 4.3 Get the reply details from the message + reply_to = convert(String, msg.properties[:reply_to]) + corr_id = convert(String, msg.properties[:correlation_id]) + resp = Message(res, content_type="text/plain", delivery_mode=PERSISTENT, correlation_id=corr_id) + # Sent the response + basic_publish(chan, resp; exchange="", routing_key=reply_to) + println("Sent response for $number as $output") + catch err + println(err) + end + end + + + # 5. Consume requests for-ever + success, consumer_tag = basic_consume(chan, queue, on_receive) + + while true + sleep(1) + end + end + end +end +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end diff --git a/julia/send.jl b/julia/send.jl new file mode 100755 index 00000000..a1d422b6 --- /dev/null +++ b/julia/send.jl @@ -0,0 +1,24 @@ +using AMQPClient +const VIRTUALHOST ="/" +const HOST = "127.0.0.1" + + +function send(message) + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a queue + success, queue_name, message_count, consumer_count = queue_declare(chan, "hello") + # 4.1 Create a message, AMQPCleint only accepts message in UInt8 + data = convert(Vector{UInt8}, codeunits(message)) + msg = Message(data, content_type="text/plain", delivery_mode=PERSISTENT) + # 4.2 Send a message + basic_publish(chan, msg; exchange="", routing_key="hello") + println("Message sent: $message") + # 5. Auto-closes the channel and connection + end + end +end + +send("Hello World!") diff --git a/julia/worker.jl b/julia/worker.jl new file mode 100644 index 00000000..d52e9c25 --- /dev/null +++ b/julia/worker.jl @@ -0,0 +1,48 @@ +using AMQPClient +const VIRTUALHOST = "/" +const HOST = "127.0.0.1" + + +function receive() + # 1. Create a connection to the localhost or 127.0.0.1 of virtualhost '/' + connection(; virtualhost=VIRTUALHOST, host=HOST) do conn + # 2. Create a channel to send messages + channel(conn, AMQPClient.UNUSED_CHANNEL, true) do chan + # 3. Declare a queue + queue = "task_queue" + success, queue_name, message_count, consumer_count = queue_declare(chan, queue, durable=true) + println(" [*] Waiting for messages. To exit press CTRL+C") + + # 4. Setup function to receive message + on_receive = (msg) -> begin + data = String(msg.data) + println("Received the message: $data") + basic_ack(chan, msg.delivery_tag) + end + + # 5. Configure Quality of Service + basic_qos(chan, 0, 1, false) + success, consumer_tag = basic_consume(chan, queue, on_receive) + + @assert success == true + + while true + sleep(1) + end + # 5. Close the connection + end + end +end + + +# Don't exit on Ctrl-C +Base.exit_on_sigint(false) +try + receive() +catch ex + if ex isa InterruptException + println("Interrupted") + else + println("Exception: $ex") + end +end From ce318ee40759448170658e4624e728fec4f9c6e9 Mon Sep 17 00:00:00 2001 From: Guy Date: Sat, 9 Oct 2021 11:56:05 -0700 Subject: [PATCH 214/659] Add C# .NET 6.0 to List of Languages --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 31fbb8a2..331f27b4 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ The following ports are available: * [C#](./dotnet) * [C# (with Visual Studio)](./dotnet-visual-studio) + * [C# (.NET 6.0)](./dotnet-6) * [Clojure](./clojure) * [Common Lisp](./common-lisp) * [Dart](./dart) From 137b6b1ab23d3827608b70870b1c9ff8e06cbf95 Mon Sep 17 00:00:00 2001 From: bighunter513 Date: Thu, 28 Oct 2021 20:19:02 +0800 Subject: [PATCH 215/659] Update Makefile use rabar3 to make --- erlang/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erlang/Makefile b/erlang/Makefile index ca516084..5cd70d94 100644 --- a/erlang/Makefile +++ b/erlang/Makefile @@ -1,5 +1,5 @@ -DEPS = amqp_client +all: + rebar3 compile -dep_amqp_client = hex 3.7.13 - -include erlang.mk +clean: + rebar3 clean && rm -rf _build From 3224adc0da48501c7b98ce51412cc6b9a9945f9c Mon Sep 17 00:00:00 2001 From: bighunter513 Date: Thu, 28 Oct 2021 20:20:14 +0800 Subject: [PATCH 216/659] Create rebar.config --- erlang/rebar.config | 1 + 1 file changed, 1 insertion(+) create mode 100644 erlang/rebar.config diff --git a/erlang/rebar.config b/erlang/rebar.config new file mode 100644 index 00000000..9bbaad68 --- /dev/null +++ b/erlang/rebar.config @@ -0,0 +1 @@ +{deps, [{amqp_client, "3.9.8"}]}. From c503a3ad2516cd50c14799acb1f1765f372e3501 Mon Sep 17 00:00:00 2001 From: Andrii Maliuta <36703491+AndriiMaliuta@users.noreply.github.com> Date: Mon, 1 Nov 2021 13:02:15 +0200 Subject: [PATCH 217/659] Update Recv.java StandardCharsets.UTF_8 used instead of String value --- java/Recv.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/Recv.java b/java/Recv.java index 509823be..da85a777 100644 --- a/java/Recv.java +++ b/java/Recv.java @@ -17,7 +17,7 @@ public static void main(String[] argv) throws Exception { System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); DeliverCallback deliverCallback = (consumerTag, delivery) -> { - String message = new String(delivery.getBody(), "UTF-8"); + String message = new String(delivery.getBody(), StandardCharsets.UTF_8); System.out.println(" [x] Received '" + message + "'"); }; channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); From 98a3ff7c1f6a410e93533296a1f3327476cf1319 Mon Sep 17 00:00:00 2001 From: Ignacio Taranto Date: Thu, 18 Nov 2021 16:09:36 -0300 Subject: [PATCH 218/659] Go: Use log.Panicf instead log.Fatalf The problem is that log.Fatalf calls os.Exit(1) behind the covers and defer statements won't be called. --- go/emit_log.go | 2 +- go/emit_log_direct.go | 6 +++--- go/emit_log_topic.go | 6 +++--- go/new_task.go | 2 +- go/publisher_confirms.go | 2 +- go/receive.go | 2 +- go/receive_logs.go | 2 +- go/receive_logs_direct.go | 2 +- go/receive_logs_topic.go | 2 +- go/rpc_client.go | 2 +- go/rpc_server.go | 2 +- go/send.go | 4 ++-- go/worker.go | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go/emit_log.go b/go/emit_log.go index e87d42a0..780e08d6 100644 --- a/go/emit_log.go +++ b/go/emit_log.go @@ -10,7 +10,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/emit_log_direct.go b/go/emit_log_direct.go index 858fff86..5294ec98 100644 --- a/go/emit_log_direct.go +++ b/go/emit_log_direct.go @@ -10,7 +10,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } @@ -38,8 +38,8 @@ func main() { err = ch.Publish( "logs_direct", // exchange severityFrom(os.Args), // routing key - false, // mandatory - false, // immediate + false, // mandatory + false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), diff --git a/go/emit_log_topic.go b/go/emit_log_topic.go index 01a9224f..8de74ba0 100644 --- a/go/emit_log_topic.go +++ b/go/emit_log_topic.go @@ -10,7 +10,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } @@ -38,8 +38,8 @@ func main() { err = ch.Publish( "logs_topic", // exchange severityFrom(os.Args), // routing key - false, // mandatory - false, // immediate + false, // mandatory + false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), diff --git a/go/new_task.go b/go/new_task.go index 56099f77..4ebcfd00 100644 --- a/go/new_task.go +++ b/go/new_task.go @@ -10,7 +10,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/publisher_confirms.go b/go/publisher_confirms.go index 57b56ddd..6a851a03 100644 --- a/go/publisher_confirms.go +++ b/go/publisher_confirms.go @@ -8,7 +8,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/receive.go b/go/receive.go index c22dd2ad..3ec33f11 100644 --- a/go/receive.go +++ b/go/receive.go @@ -8,7 +8,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/receive_logs.go b/go/receive_logs.go index ec44ce48..c52573ea 100644 --- a/go/receive_logs.go +++ b/go/receive_logs.go @@ -8,7 +8,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/receive_logs_direct.go b/go/receive_logs_direct.go index 974c535d..8d8347ec 100644 --- a/go/receive_logs_direct.go +++ b/go/receive_logs_direct.go @@ -9,7 +9,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/receive_logs_topic.go b/go/receive_logs_topic.go index 3bf8fc25..9abd43c3 100644 --- a/go/receive_logs_topic.go +++ b/go/receive_logs_topic.go @@ -9,7 +9,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/rpc_client.go b/go/rpc_client.go index a2cb9b2a..7e360f33 100644 --- a/go/rpc_client.go +++ b/go/rpc_client.go @@ -13,7 +13,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/rpc_server.go b/go/rpc_server.go index 5e27c3f6..dc3d2f83 100644 --- a/go/rpc_server.go +++ b/go/rpc_server.go @@ -9,7 +9,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } diff --git a/go/send.go b/go/send.go index a335e3fd..b455d9b7 100644 --- a/go/send.go +++ b/go/send.go @@ -8,7 +8,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } @@ -42,5 +42,5 @@ func main() { Body: []byte(body), }) failOnError(err, "Failed to publish a message") - log.Printf(" [x] Sent %s", body) + log.Printf(" [x] Sent %s\n", body) } diff --git a/go/worker.go b/go/worker.go index 3ac3dedf..bd5a664c 100644 --- a/go/worker.go +++ b/go/worker.go @@ -10,7 +10,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Fatalf("%s: %s", msg, err) + log.Panicf("%s: %s", msg, err) } } From 1f4aed4c1dd1661a6086fb9beb6739c62268efe8 Mon Sep 17 00:00:00 2001 From: decorator-factory <42166884+decorator-factory@users.noreply.github.com> Date: Mon, 6 Dec 2021 22:13:21 +0300 Subject: [PATCH 219/659] Use named constant instead of 2 in `new_task.py` --- python/new_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/new_task.py b/python/new_task.py index d1e4fe0e..f040aea3 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -14,7 +14,7 @@ routing_key='task_queue', body=message, properties=pika.BasicProperties( - delivery_mode=2, # make message persistent + delivery_mode=pika.spec.PERSISTENT_DELIVERY_MODE, )) print(" [x] Sent %r" % message) connection.close() From f739ed67d839e18d6ff9119fa1b0dbca4a74bf25 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 28 Dec 2021 20:21:03 +0300 Subject: [PATCH 220/659] Address a GitHub security alert --- javascript-nodejs/package-lock.json | 15 ++++++++------- javascript-nodejs/package.json | 3 ++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 6152b889..85a4fbdb 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "dependencies": { "amqplib": "latest", - "js-beautify": "^1.9.1" + "js-beautify": "^1.9.1", + "url-parse": ">=1.5.2" } }, "node_modules/abbrev": { @@ -312,9 +313,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", + "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -582,9 +583,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", + "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index 3eda701d..4e9d56bf 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -4,6 +4,7 @@ "description": "RabbitMQ amqp.node tutorial ", "dependencies": { "amqplib": "latest", - "js-beautify": "^1.9.1" + "js-beautify": "^1.9.1", + "url-parse": ">=1.5.2" } } From 5ce55d4c45d13c9bfe8f0ff4ff02d2c7f7c61cdc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Feb 2022 21:58:55 +0000 Subject: [PATCH 221/659] Bump url-parse from 1.5.4 to 1.5.6 in /javascript-nodejs Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.4 to 1.5.6. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.4...1.5.6) --- updated-dependencies: - dependency-name: url-parse dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- javascript-nodejs/package-lock.json | 16 ++++++++-------- javascript-nodejs/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 85a4fbdb..968a70e1 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -8,9 +8,9 @@ "name": "rabbitmq-node-tutorial", "version": "1.0.0", "dependencies": { - "amqplib": "latest", + "amqplib": "*", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.2" + "url-parse": ">=1.5.6" } }, "node_modules/abbrev": { @@ -313,9 +313,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", + "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -583,9 +583,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", + "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index 4e9d56bf..886bf510 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -5,6 +5,6 @@ "dependencies": { "amqplib": "latest", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.2" + "url-parse": ">=1.5.6" } } From 3d5daf6797aa305dfaadaaeffc6d00cf8c9abc1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Feb 2022 04:13:34 +0000 Subject: [PATCH 222/659] Bump url-parse from 1.5.6 to 1.5.8 in /javascript-nodejs Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.6 to 1.5.8. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.6...1.5.8) --- updated-dependencies: - dependency-name: url-parse dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- javascript-nodejs/package-lock.json | 14 +++++++------- javascript-nodejs/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 968a70e1..67015f6f 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "amqplib": "*", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.6" + "url-parse": ">=1.5.8" } }, "node_modules/abbrev": { @@ -313,9 +313,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/url-parse": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", - "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.8.tgz", + "integrity": "sha512-9JZ5zDrn9wJoOy/t+rH00HHejbU8dq9VsOYVu272TYDrCiyVAgHKUSpPh3ruZIpv8PMVR+NXLZvfRPJv8xAcQw==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -583,9 +583,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", - "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.8.tgz", + "integrity": "sha512-9JZ5zDrn9wJoOy/t+rH00HHejbU8dq9VsOYVu272TYDrCiyVAgHKUSpPh3ruZIpv8PMVR+NXLZvfRPJv8xAcQw==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index 886bf510..f91e025f 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -5,6 +5,6 @@ "dependencies": { "amqplib": "latest", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.6" + "url-parse": ">=1.5.8" } } From 68afdf0361ab9caa69c36fd925ea4d77a9088307 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Mar 2022 02:50:22 +0000 Subject: [PATCH 223/659] Bump url-parse from 1.5.8 to 1.5.9 in /javascript-nodejs Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.8 to 1.5.9. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.8...1.5.9) --- updated-dependencies: - dependency-name: url-parse dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- javascript-nodejs/package-lock.json | 14 +++++++------- javascript-nodejs/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 67015f6f..4f411187 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "amqplib": "*", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.8" + "url-parse": ">=1.5.9" } }, "node_modules/abbrev": { @@ -313,9 +313,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/url-parse": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.8.tgz", - "integrity": "sha512-9JZ5zDrn9wJoOy/t+rH00HHejbU8dq9VsOYVu272TYDrCiyVAgHKUSpPh3ruZIpv8PMVR+NXLZvfRPJv8xAcQw==", + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.9.tgz", + "integrity": "sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -583,9 +583,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "url-parse": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.8.tgz", - "integrity": "sha512-9JZ5zDrn9wJoOy/t+rH00HHejbU8dq9VsOYVu272TYDrCiyVAgHKUSpPh3ruZIpv8PMVR+NXLZvfRPJv8xAcQw==", + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.9.tgz", + "integrity": "sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index f91e025f..a8dc7ec7 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -5,6 +5,6 @@ "dependencies": { "amqplib": "latest", "js-beautify": "^1.9.1", - "url-parse": ">=1.5.8" + "url-parse": ">=1.5.9" } } From bd2c06f28f88cbc4a1ef85e7adaf95743110d83a Mon Sep 17 00:00:00 2001 From: Simon Alling Date: Wed, 9 Mar 2022 16:12:15 +0100 Subject: [PATCH 224/659] Clarify `forever` channel declarations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The current idiom forever := make(chan bool) gives the impression that booleans will be sent through `forever`. But the channel never has anything sent through it; its purpose is just to block indefinitely. Go doesn't have any bottom type (empty type; ⊥), but it does have a unit type, namely `struct{}`. Because not even such values will be sent, the channel need not even exist at all, leaving no doubts as to its purpose. --- go/publisher_confirms.go | 2 +- go/receive.go | 2 +- go/receive_logs.go | 2 +- go/receive_logs_direct.go | 2 +- go/receive_logs_topic.go | 2 +- go/rpc_server.go | 2 +- go/worker.go | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/go/publisher_confirms.go b/go/publisher_confirms.go index 6a851a03..a9457926 100644 --- a/go/publisher_confirms.go +++ b/go/publisher_confirms.go @@ -52,7 +52,7 @@ func main() { publish(ch, q.Name, "hello") log.Printf(" [*] Waiting for messages. To exit press CTRL+C") - forever := make(chan bool) + var forever chan struct{} <-forever } diff --git a/go/receive.go b/go/receive.go index 3ec33f11..5ebbd25d 100644 --- a/go/receive.go +++ b/go/receive.go @@ -42,7 +42,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { diff --git a/go/receive_logs.go b/go/receive_logs.go index c52573ea..a30cb571 100644 --- a/go/receive_logs.go +++ b/go/receive_logs.go @@ -61,7 +61,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { diff --git a/go/receive_logs_direct.go b/go/receive_logs_direct.go index 8d8347ec..87d81387 100644 --- a/go/receive_logs_direct.go +++ b/go/receive_logs_direct.go @@ -69,7 +69,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { diff --git a/go/receive_logs_topic.go b/go/receive_logs_topic.go index 9abd43c3..b7180834 100644 --- a/go/receive_logs_topic.go +++ b/go/receive_logs_topic.go @@ -69,7 +69,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { diff --git a/go/rpc_server.go b/go/rpc_server.go index dc3d2f83..06fd557d 100644 --- a/go/rpc_server.go +++ b/go/rpc_server.go @@ -60,7 +60,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { diff --git a/go/worker.go b/go/worker.go index bd5a664c..7d1c2466 100644 --- a/go/worker.go +++ b/go/worker.go @@ -51,7 +51,7 @@ func main() { ) failOnError(err, "Failed to register a consumer") - forever := make(chan bool) + var forever chan struct{} go func() { for d := range msgs { From 64b96a5bd7dee6468b87fb2ce42a4c140668c623 Mon Sep 17 00:00:00 2001 From: mbgattu <74077269+mbgattu@users.noreply.github.com> Date: Wed, 6 Apr 2022 12:51:28 -0400 Subject: [PATCH 225/659] Update Recv.java Adding additional import statement to fix following error received while compiling Recv.java:20: error: cannot find symbol String message = new String(delivery.getBody(), StandardCharsets.UTF_8); ^ symbol: variable StandardCharsets location: class Recv 1 error --- java/Recv.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/Recv.java b/java/Recv.java index da85a777..e1e4cb3e 100644 --- a/java/Recv.java +++ b/java/Recv.java @@ -2,6 +2,7 @@ import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback; +import java.nio.charset.StandardCharsets; public class Recv { From 2bd7f7957bd5521975dad3834d1020a0476d6d4b Mon Sep 17 00:00:00 2001 From: Stefano Occhetti <59913417+StefanoOcchetti@users.noreply.github.com> Date: Sat, 7 May 2022 09:27:00 +0200 Subject: [PATCH 226/659] Update RPCClient.cs The client hangs during connection.Close(), if the channel was not closed. Closing the channel before the connection fixes this behavior. --- dotnet/RPCClient/RPCClient.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 36aa8ff8..adba5216 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -63,7 +63,8 @@ public RpcClient() public void Close() { - connection.Close(); + channel.Close(); + connection.Close(); } } From 06bb06ff238f34eaedf777d0643cf18d94ce91f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jun 2022 19:02:29 +0000 Subject: [PATCH 227/659] Bump crossbeam-utils from 0.8.0 to 0.8.8 in /rust Bumps [crossbeam-utils](https://github.com/crossbeam-rs/crossbeam) from 0.8.0 to 0.8.8. - [Release notes](https://github.com/crossbeam-rs/crossbeam/releases) - [Changelog](https://github.com/crossbeam-rs/crossbeam/blob/master/CHANGELOG.md) - [Commits](https://github.com/crossbeam-rs/crossbeam/compare/crossbeam-utils-0.8.0...crossbeam-utils-0.8.8) --- updated-dependencies: - dependency-name: crossbeam-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust/Cargo.lock | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 24f3996b..faa2a2d6 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "aho-corasick" version = "0.7.15" @@ -124,12 +126,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "const_fn" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab" - [[package]] name = "cookie-factory" version = "0.3.1" @@ -164,13 +160,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.0" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ - "autocfg", "cfg-if 1.0.0", - "const_fn", "lazy_static", ] From 31a9b6f9ec7c9a7b12c7c5d1931b9b61a98b19bd Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Wed, 8 Jun 2022 13:24:25 +0200 Subject: [PATCH 228/659] Update rust dependecies Signed-off-by: Gabriele Santomaggio --- rust/Cargo.lock | 1032 ++++++++++++++++++++++++++------------- rust/Cargo.toml | 9 +- rust/src/bin/receive.rs | 24 +- rust/src/bin/send.rs | 2 +- 4 files changed, 711 insertions(+), 356 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index faa2a2d6..9e1d73d2 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -2,33 +2,25 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "aho-corasick" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" -dependencies = [ - "memchr", -] - [[package]] name = "amq-protocol" -version = "6.0.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede228647914ef8ac4ef4cfddbe3be4c23afea8d8c7f95451a2f53efe6ce8f2f" +checksum = "acc7cad07d1b4533fcb46f0819a6126fa201fd0385469aba75e405424f3fe009" dependencies = [ "amq-protocol-tcp", "amq-protocol-types", "amq-protocol-uri", "cookie-factory", "nom", + "serde", ] [[package]] name = "amq-protocol-tcp" -version = "6.0.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4860b3d63ffb63b3ed440b78ccd549b009e0f72d995b9e9aec51e8e1af01e694" +checksum = "5d8b20aba8c35a0b885e1e978eff456ced925730a4e012e63e4ff89a1deb602b" dependencies = [ "amq-protocol-uri", "tcp-stream", @@ -37,9 +29,9 @@ dependencies = [ [[package]] name = "amq-protocol-types" -version = "6.0.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ebe159bbe5fff48b5702d639ba9b0a7b1b2f24c4404fe38db0cbcafd057c01" +checksum = "e245e0e9083b6a6db5f8c10013074cb382266eb9e2a37204d19c651b8d3b8114" dependencies = [ "cookie-factory", "nom", @@ -49,19 +41,105 @@ dependencies = [ [[package]] name = "amq-protocol-uri" -version = "6.0.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82403806f8fef7e9d8dc6dcb41839a47a8eab9419f9dca52ef6b19904e0047e" +checksum = "56987108bf48d2eb500cae8896cd9291564eedd8744776ecc5c3338a8b2ca5f8" dependencies = [ + "amq-protocol-types", "percent-encoding", "url", ] [[package]] -name = "arrayvec" -version = "0.5.2" +name = "async-channel" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880" +dependencies = [ + "async-channel", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "async-global-executor-trait" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +dependencies = [ + "async-global-executor", + "async-trait", + "executor-trait", +] + +[[package]] +name = "async-io" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" +dependencies = [ + "concurrent-queue", + "futures-lite", + "libc", + "log", + "once_cell", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi", +] + +[[package]] +name = "async-lock" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-reactor-trait" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" +dependencies = [ + "async-io", + "async-trait", + "futures-core", + "reactor-trait", +] [[package]] name = "async-task" @@ -69,17 +147,34 @@ version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +[[package]] +name = "async-trait" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" + [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.12.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bitflags" @@ -88,15 +183,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] -name = "bitvec" -version = "0.19.4" +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ba35e9565969edb811639dbebfe34edc0368e472c5018474c8eb2543397f81" +checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" dependencies = [ - "funty", - "radium", - "tap", - "wyz", + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +dependencies = [ + "async-channel", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "once_cell", +] + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", ] [[package]] @@ -118,12 +260,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cloudabi" -version = "0.1.0" +name = "cipher" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ - "bitflags", + "crypto-common", + "inout", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", ] [[package]] @@ -149,23 +301,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" [[package]] -name = "crossbeam-channel" -version = "0.5.0" +name = "cpufeatures" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", + "libc", ] [[package]] -name = "crossbeam-utils" -version = "0.8.8" +name = "crypto-common" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" dependencies = [ - "cfg-if 1.0.0", - "lazy_static", + "generic-array", + "typenum", +] + +[[package]] +name = "des" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" +dependencies = [ + "cipher", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", ] [[package]] @@ -175,19 +346,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "event-listener" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] +name = "executor-trait" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08" +dependencies = [ + "async-trait", +] + +[[package]] +name = "fastrand" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" dependencies = [ - "foreign-types-shared", + "instant", ] [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "flume" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" +dependencies = [ + "futures-core", + "futures-sink", + "pin-project", + "spin 0.9.3", +] [[package]] name = "form_urlencoded" @@ -199,17 +391,11 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "funty" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba62103ce691c2fd80fbae2213dfdda9ce60804973ac6b6e97de818ea7f52c8" - [[package]] name = "futures" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" dependencies = [ "futures-channel", "futures-core", @@ -222,9 +408,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" dependencies = [ "futures-core", "futures-sink", @@ -232,15 +418,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" dependencies = [ "futures-core", "futures-task", @@ -249,17 +435,31 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.9", + "waker-fn", +] [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -267,24 +467,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" -dependencies = [ - "once_cell", -] +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" dependencies = [ "futures-channel", "futures-core", @@ -293,33 +490,50 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project", + "pin-project-lite 0.2.9", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" -version = "0.1.15" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "wasi", + "wasi 0.10.2+wasi-snapshot-preview1", ] [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "idna" version = "0.2.0" @@ -331,6 +545,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + [[package]] name = "instant" version = "0.1.9" @@ -346,20 +570,35 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +[[package]] +name = "js-sys" +version = "0.3.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lapin" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549ae1dd23261582bae51d7bc12161be435da2768e77eec709dd5676185397d6" +checksum = "bd03ea5831b44775e296239a64851e2fd14a80a363d202ba147009ffc994ff0f" dependencies = [ "amq-protocol", - "async-task", - "crossbeam-channel", + "async-global-executor-trait", + "async-reactor-trait", + "async-trait", + "executor-trait", + "flume", "futures-core", - "log", - "mio", + "futures-io", "parking_lot", "pinky-swear", + "reactor-trait", + "serde", + "tracing", + "waker-fn", ] [[package]] @@ -368,31 +607,19 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lexical-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" -dependencies = [ - "arrayvec", - "bitflags", - "cfg-if 0.1.10", - "ryu", - "static_assertions", -] - [[package]] name = "libc" -version = "0.2.80" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] @@ -418,72 +645,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] -name = "mio" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33bc887064ef1fd66020c9adfc45bb9f33d75a42096c81e7c56c65b75dd1a8b" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.6" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" -dependencies = [ - "socket2", - "winapi", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "native-tls" -version = "0.2.6" +name = "mio" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcc7939b5edc4e4f86b1b4a04bb1498afaaf871b1a6691838ed06fcb48d3a3f" +checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" dependencies = [ - "lazy_static", "libc", "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", ] [[package]] name = "nom" -version = "6.0.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4489ccc7d668957ddf64af7cd027c081728903afa6479d35da7e99bf5728f75f" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ - "bitvec", - "lexical-core", "memchr", - "version_check", -] - -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", + "minimal-lexical", ] [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ "hermit-abi", "libc", @@ -495,20 +688,6 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" -[[package]] -name = "openssl" -version = "0.10.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" -dependencies = [ - "bitflags", - "cfg-if 0.1.10", - "foreign-types", - "lazy_static", - "libc", - "openssl-sys", -] - [[package]] name = "openssl-probe" version = "0.1.2" @@ -516,53 +695,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] -name = "openssl-sys" -version = "0.9.58" +name = "p12" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +checksum = "d4873306de53fe82e7e484df31e1e947d61514b6ea2ed6cd7b45d63006fd9224" dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", + "cbc", + "cipher", + "des", + "getrandom", + "hmac", + "lazy_static", + "rc2", + "sha1", + "yasna", ] +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + [[package]] name = "parking_lot" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "instant", "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ - "cfg-if 0.1.10", - "cloudabi", - "instant", + "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", - "winapi", -] - -[[package]] -name = "pem" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59698ea79df9bf77104aefd39cc3ec990cb9693fb59c3b0a70ddf2646fdffb4b" -dependencies = [ - "base64", - "once_cell", - "regex", + "windows-sys", ] [[package]] @@ -599,9 +774,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -611,46 +786,36 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pinky-swear" -version = "4.4.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf8cda6f8e1500338634e4e3ce90ac59eb7929a1e088b6946c742be1cc44dc1" +checksum = "d894b67aa7a4bf295db5e85349078c604edaa6fa5c8721e8eca3c7729a27f2ac" dependencies = [ "doc-comment", + "flume", "parking_lot", "tracing", ] [[package]] -name = "pkg-config" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" - -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.6" +name = "polling" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi", +] [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -669,87 +834,97 @@ dependencies = [ "futures", "lapin", "tokio", + "tokio-stream", "uuid", ] [[package]] -name = "radium" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" - -[[package]] -name = "rand" -version = "0.7.3" +name = "rc2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +checksum = "62c64daa8e9438b84aaae55010a93f396f8e60e3911590fcba770d04643fc1dd" dependencies = [ - "getrandom", - "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "cipher", ] [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "reactor-trait" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "438a4293e4d097556730f4711998189416232f009c137389e0f961d2bc0ddc58" dependencies = [ - "ppv-lite86", - "rand_core", + "async-trait", + "futures-core", + "futures-io", ] [[package]] -name = "rand_core" -version = "0.5.1" +name = "redox_syscall" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ - "getrandom", + "bitflags", ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "rand_core", + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", ] [[package]] -name = "redox_syscall" -version = "0.1.57" +name = "rustls" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] [[package]] -name = "regex" -version = "1.4.2" +name = "rustls-connector" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +checksum = "9c6a18f8d10f71bce9bca6eaeb80429460e652f3bcf0381f0c5f8954abf7b3b8" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", - "thread_local", + "log", + "rustls", + "rustls-native-certs", + "webpki", ] [[package]] -name = "regex-syntax" -version = "0.6.21" +name = "rustls-native-certs" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "rustls-pemfile" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" dependencies = [ - "winapi", + "base64", ] [[package]] @@ -774,6 +949,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "security-framework" version = "2.0.0" @@ -828,6 +1013,26 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + [[package]] name = "slab" version = "0.4.2" @@ -836,78 +1041,62 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" -version = "1.5.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "socket2" -version = "0.3.16" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ - "cfg-if 0.1.10", "libc", - "redox_syscall", "winapi", ] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "spin" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "syn" -version = "1.0.48" +name = "spin" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", + "lock_api", ] [[package]] -name = "tap" -version = "1.0.0" +name = "subtle" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36474e732d1affd3a6ed582781b3683df3d0563714c59c39591e8ff707cf078e" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] -name = "tcp-stream" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3526e11bb30e7406a12a18b65b60ac084aa23630ee8811947354fe35c1ff2f6" -dependencies = [ - "cfg-if 1.0.0", - "mio", - "native-tls", - "pem", -] - -[[package]] -name = "tempfile" -version = "3.1.0" +name = "syn" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" dependencies = [ - "cfg-if 0.1.10", - "libc", - "rand", - "redox_syscall", - "remove_dir_all", - "winapi", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "thread_local" -version = "1.0.1" +name = "tcp-stream" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +checksum = "09a4b0a70bac0a58ca6a7659d1328e34ee462339c70b0fa49f72bad1f278910a" dependencies = [ - "lazy_static", + "cfg-if 1.0.0", + "p12", + "rustls-connector", + "rustls-pemfile", ] [[package]] @@ -927,29 +1116,46 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.3.4" +version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dfe2523e6fa84ddf5e688151d4e5fddc51678de9752c6512a24714c23818d61" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ - "autocfg", - "futures-core", + "bytes", + "libc", + "memchr", + "mio", "num_cpus", - "pin-project-lite 0.2.0", - "slab", + "once_cell", + "parking_lot", + "pin-project-lite 0.2.9", + "signal-hook-registry", + "socket2", "tokio-macros", + "winapi", ] [[package]] name = "tokio-macros" -version = "0.3.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d30fdbb5dc2d8f91049691aa1a9d4d4ae422a21c334ce8936e5886d30c5c45" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "tokio-stream" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.9", + "tokio", +] + [[package]] name = "tracing" version = "0.1.21" @@ -967,6 +1173,12 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "unicode-bidi" version = "0.3.4" @@ -976,6 +1188,12 @@ dependencies = [ "matches", ] +[[package]] +name = "unicode-ident" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" + [[package]] name = "unicode-normalization" version = "0.1.16" @@ -986,10 +1204,10 @@ dependencies = [ ] [[package]] -name = "unicode-xid" -version = "0.2.1" +name = "untrusted" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" @@ -1005,30 +1223,119 @@ dependencies = [ [[package]] name = "uuid" -version = "0.8.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" +checksum = "c6d5d669b51467dcf7b2f1a796ce0f955f05f01cafda6c19d6e95f730df29238" dependencies = [ - "rand", + "getrandom", ] -[[package]] -name = "vcpkg" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" - [[package]] name = "version_check" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" + +[[package]] +name = "web-sys" +version = "0.3.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] [[package]] name = "winapi" @@ -1053,7 +1360,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "wyz" -version = "0.2.0" +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "yasna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" +checksum = "346d34a236c9d3e5f3b9b74563f238f955bbd05fa0b8b4efa53c130c43982f4c" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 5ae89d6d..70b8196b 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -5,7 +5,8 @@ authors = ["Michal Malek "] edition = "2018" [dependencies] -futures = "0.3.7" -lapin = "1.5" -tokio = { version = "0.3.3", features = ["macros", "rt-multi-thread", "stream"] } -uuid = { version = "0.8.1", features = ["v4"] } +futures = "0.3.21" +lapin = "2.1.1" +tokio = { version = "1.19.2", features = ["full"] } +uuid = { version = "1.1.1", features = ["v4"] } +tokio-stream = "0.1" diff --git a/rust/src/bin/receive.rs b/rust/src/bin/receive.rs index 55fdc93d..29b93f4e 100644 --- a/rust/src/bin/receive.rs +++ b/rust/src/bin/receive.rs @@ -1,4 +1,5 @@ -use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties}; +use futures::StreamExt; +use lapin::{Connection, ConnectionProperties, options::*, types::FieldTable}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -14,23 +15,26 @@ async fn main() -> Result<(), Box> { ) .await?; - let consumer = channel + let mut consumer = channel .basic_consume( "hello", "consumer", - BasicConsumeOptions { - no_ack: true, - ..Default::default() - }, + BasicConsumeOptions::default(), FieldTable::default(), ) - .await?; + .await + .expect("basic_consume"); println!(" [*] Waiting for messages. To exit press CTRL+C"); - for delivery in consumer { - let (_, delivery) = delivery?; - println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + delivery.ack(BasicAckOptions::default()) + .await + .expect("basic_ack"); + } } Ok(()) diff --git a/rust/src/bin/send.rs b/rust/src/bin/send.rs index 9116096a..10629037 100644 --- a/rust/src/bin/send.rs +++ b/rust/src/bin/send.rs @@ -19,7 +19,7 @@ async fn main() -> Result<(), Box> { "", "hello", BasicPublishOptions::default(), - b"Hello World!".to_vec(), + &*b"Hello World!".to_vec(), BasicProperties::default(), ) .await?; From b60bdc3db7f76a91f147ed4e1280df5251e98b24 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Wed, 8 Jun 2022 14:37:24 +0200 Subject: [PATCH 229/659] Fix send Signed-off-by: Gabriele Santomaggio --- rust/src/bin/rpc_client.rs | 2 +- rust/src/bin/send.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/rust/src/bin/rpc_client.rs b/rust/src/bin/rpc_client.rs index 22a864a1..d46f57b0 100644 --- a/rust/src/bin/rpc_client.rs +++ b/rust/src/bin/rpc_client.rs @@ -77,7 +77,7 @@ impl FibonacciRpcClient { "", "rpc_queue", BasicPublishOptions::default(), - n.to_le_bytes().to_vec(), + &*n.to_le_bytes().to_vec(), BasicProperties::default() .with_reply_to(self.callback_queue.name().clone()) .with_correlation_id(self.correlation_id.clone()), diff --git a/rust/src/bin/send.rs b/rust/src/bin/send.rs index 10629037..3a9668da 100644 --- a/rust/src/bin/send.rs +++ b/rust/src/bin/send.rs @@ -14,12 +14,13 @@ async fn main() -> Result<(), Box> { ) .await?; + let payload = b"Hello world!"; channel .basic_publish( "", "hello", BasicPublishOptions::default(), - &*b"Hello World!".to_vec(), + payload, BasicProperties::default(), ) .await?; From 735b801e41b463e9919092f9cacb63b332f810f6 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Wed, 8 Jun 2022 16:57:16 +0200 Subject: [PATCH 230/659] Fix publishers Signed-off-by: Gabriele Santomaggio --- rust/src/bin/emit_log.rs | 8 ++++---- rust/src/bin/emit_log_direct.rs | 2 +- rust/src/bin/emit_log_topic.rs | 8 ++++---- rust/src/bin/new_task.rs | 10 +++++----- rust/src/bin/send.rs | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/rust/src/bin/emit_log.rs b/rust/src/bin/emit_log.rs index 9064328c..060c48f3 100644 --- a/rust/src/bin/emit_log.rs +++ b/rust/src/bin/emit_log.rs @@ -6,8 +6,8 @@ use lapin::{ async fn main() -> Result<(), Box> { let args: Vec<_> = std::env::args().skip(1).collect(); let message = match args.len() { - 0 => b"hello".to_vec(), - _ => args.join(" ").into_bytes(), + 0 => "hello".to_string(), + _ => args.join(" ").to_string(), }; let addr = "amqp://127.0.0.1:5672"; @@ -28,12 +28,12 @@ async fn main() -> Result<(), Box> { "logs", "", BasicPublishOptions::default(), - message.clone(), + message.as_bytes(), BasicProperties::default(), ) .await?; - println!(" [x] Sent {:?}", std::str::from_utf8(&message)?); + println!(" [x] Sent {:?}", std::str::from_utf8(&message.as_bytes())?); conn.close(0, "").await?; diff --git a/rust/src/bin/emit_log_direct.rs b/rust/src/bin/emit_log_direct.rs index 1847c6d7..4ad34db3 100644 --- a/rust/src/bin/emit_log_direct.rs +++ b/rust/src/bin/emit_log_direct.rs @@ -29,7 +29,7 @@ async fn main() -> Result<(), Box> { "direct_logs", severity, BasicPublishOptions::default(), - message.clone(), + &*message.clone(), BasicProperties::default(), ) .await?; diff --git a/rust/src/bin/emit_log_topic.rs b/rust/src/bin/emit_log_topic.rs index e9e71287..09b720a4 100644 --- a/rust/src/bin/emit_log_topic.rs +++ b/rust/src/bin/emit_log_topic.rs @@ -7,8 +7,8 @@ async fn main() -> Result<(), Box> { let args: Vec<_> = std::env::args().skip(1).collect(); let routing_key = args.first().map(String::as_str).unwrap_or("anonymous.info"); let message = match args.len() { - x if x < 2 => b"Hello, world!".to_vec(), - _ => args[1..].join(" ").into_bytes(), + x if x < 2 => "Hello, world!".to_string(), + _ => args[1..].join(" ").to_string(), }; let addr = "amqp://127.0.0.1:5672"; @@ -29,7 +29,7 @@ async fn main() -> Result<(), Box> { "topic_logs", routing_key, BasicPublishOptions::default(), - message.clone(), + message.as_bytes(), BasicProperties::default(), ) .await?; @@ -37,7 +37,7 @@ async fn main() -> Result<(), Box> { println!( " [x] Sent {}:{:?}", routing_key, - std::str::from_utf8(&message)? + std::str::from_utf8(message.as_bytes())? ); conn.close(0, "").await?; diff --git a/rust/src/bin/new_task.rs b/rust/src/bin/new_task.rs index d2a8b195..247e3669 100644 --- a/rust/src/bin/new_task.rs +++ b/rust/src/bin/new_task.rs @@ -1,11 +1,11 @@ -use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties}; +use lapin::{BasicProperties, Connection, ConnectionProperties, options::*, types::FieldTable}; #[tokio::main] async fn main() -> Result<(), Box> { let args: Vec<_> = std::env::args().skip(1).collect(); let message = match args.len() { - 0 => b"hello".to_vec(), - _ => args.join(" ").into_bytes(), + 0 => "hello".to_string(), + _ => args.join(" ").to_string(), }; let addr = "amqp://127.0.0.1:5672"; @@ -25,12 +25,12 @@ async fn main() -> Result<(), Box> { "", "task_queue", BasicPublishOptions::default(), - message.clone(), + message.as_bytes(), BasicProperties::default(), ) .await?; - println!(" [x] Sent {:?}", std::str::from_utf8(&message)?); + println!(" [x] Sent {:?}", std::str::from_utf8(message.as_bytes())?); conn.close(0, "").await?; diff --git a/rust/src/bin/send.rs b/rust/src/bin/send.rs index 3a9668da..4aef0c90 100644 --- a/rust/src/bin/send.rs +++ b/rust/src/bin/send.rs @@ -14,7 +14,7 @@ async fn main() -> Result<(), Box> { ) .await?; - let payload = b"Hello world!"; + let payload = "Hello world!".as_bytes(); channel .basic_publish( "", From 3d1c9e5f210b148b85a9c73c5a1a27bba886537d Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Thu, 9 Jun 2022 12:21:37 +0200 Subject: [PATCH 231/659] Update receivers Signed-off-by: Gabriele Santomaggio --- rust/src/bin/emit_log_direct.rs | 8 ++++---- rust/src/bin/receive_logs.rs | 12 ++++++++---- rust/src/bin/receive_logs_direct.rs | 27 +++++++++++++++------------ 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/rust/src/bin/emit_log_direct.rs b/rust/src/bin/emit_log_direct.rs index 4ad34db3..a3d4161c 100644 --- a/rust/src/bin/emit_log_direct.rs +++ b/rust/src/bin/emit_log_direct.rs @@ -7,8 +7,8 @@ async fn main() -> Result<(), Box> { let args: Vec<_> = std::env::args().skip(1).collect(); let severity = args.first().map(String::as_str).unwrap_or("info"); let message = match args.len() { - x if x < 2 => b"Hello, world!".to_vec(), - _ => args[1..].join(" ").into_bytes(), + x if x < 2 => "Hello, world!".to_string(), + _ => args[1..].join(" ").to_string(), }; let addr = "amqp://127.0.0.1:5672"; @@ -29,7 +29,7 @@ async fn main() -> Result<(), Box> { "direct_logs", severity, BasicPublishOptions::default(), - &*message.clone(), + message.as_bytes(), BasicProperties::default(), ) .await?; @@ -37,7 +37,7 @@ async fn main() -> Result<(), Box> { println!( " [x] Sent {}:{:?}", severity, - std::str::from_utf8(&message)? + std::str::from_utf8(message.as_bytes())? ); conn.close(0, "").await?; diff --git a/rust/src/bin/receive_logs.rs b/rust/src/bin/receive_logs.rs index e72d7393..65f9d8d5 100644 --- a/rust/src/bin/receive_logs.rs +++ b/rust/src/bin/receive_logs.rs @@ -1,3 +1,4 @@ +use futures::StreamExt; use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; #[tokio::main] @@ -36,7 +37,7 @@ async fn main() -> Result<(), Box> { ) .await?; - let consumer = channel + let mut consumer = channel .basic_consume( queue.name().as_str(), "consumer", @@ -50,10 +51,13 @@ async fn main() -> Result<(), Box> { println!(" [*] Waiting for logs. To exit press CTRL+C"); - for delivery in consumer { - let (_, delivery) = delivery?; - println!(" [x] {:?}", std::str::from_utf8(&delivery.data)?); + + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + } } + Ok(()) } diff --git a/rust/src/bin/receive_logs_direct.rs b/rust/src/bin/receive_logs_direct.rs index 77fd4637..f18337d6 100644 --- a/rust/src/bin/receive_logs_direct.rs +++ b/rust/src/bin/receive_logs_direct.rs @@ -1,4 +1,7 @@ -use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; +use std::borrow::Borrow; + +use futures::StreamExt; +use lapin::{Connection, ConnectionProperties, ExchangeKind, options::*, types::FieldTable}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -35,6 +38,7 @@ async fn main() -> Result<(), Box> { ) .await?; + futures::future::join_all(severities.into_iter().map(|severity| { channel.queue_bind( queue.name().as_str(), @@ -43,10 +47,9 @@ async fn main() -> Result<(), Box> { QueueBindOptions::default(), FieldTable::default(), ) - })) - .await; + })).await; - let consumer = channel + let mut consumer = channel .basic_consume( queue.name().as_str(), "consumer", @@ -60,14 +63,14 @@ async fn main() -> Result<(), Box> { println!(" [*] Waiting for logs. To exit press CTRL+C"); - for delivery in consumer { - let (_, delivery) = delivery?; - println!( - " [x] {}:{:?}", - delivery.routing_key, - std::str::from_utf8(&delivery.data)? - ); + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!( + " [x] {}:{:?}", + delivery.routing_key, + std::str::from_utf8(&delivery.data)? + ); + } } - Ok(()) } From 5c727cbc8248ffae81ef6c0dbaac39b956eb0417 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Fri, 10 Jun 2022 14:35:20 +0200 Subject: [PATCH 232/659] Update log directs Signed-off-by: Gabriele Santomaggio --- rust/src/bin/receive_logs_direct.rs | 4 +--- rust/src/bin/rpc_client.rs | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rust/src/bin/receive_logs_direct.rs b/rust/src/bin/receive_logs_direct.rs index f18337d6..67753baa 100644 --- a/rust/src/bin/receive_logs_direct.rs +++ b/rust/src/bin/receive_logs_direct.rs @@ -1,5 +1,3 @@ -use std::borrow::Borrow; - use futures::StreamExt; use lapin::{Connection, ConnectionProperties, ExchangeKind, options::*, types::FieldTable}; @@ -39,7 +37,7 @@ async fn main() -> Result<(), Box> { .await?; - futures::future::join_all(severities.into_iter().map(|severity| { + futures::future::join_all(severities.iter().map(|severity| { channel.queue_bind( queue.name().as_str(), "direct_logs", diff --git a/rust/src/bin/rpc_client.rs b/rust/src/bin/rpc_client.rs index d46f57b0..40bb955d 100644 --- a/rust/src/bin/rpc_client.rs +++ b/rust/src/bin/rpc_client.rs @@ -1,3 +1,4 @@ +use futures::StreamExt; use lapin::{ options::*, types::FieldTable, types::ShortString, BasicProperties, Channel, Connection, ConnectionProperties, Consumer, Queue, From da48867c1748faaaea39e5b6c0fe3cafcb5e39f6 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Fri, 10 Jun 2022 15:02:39 +0200 Subject: [PATCH 233/659] Update rpc Signed-off-by: Gabriele Santomaggio --- rust/src/bin/receive_logs_topic.rs | 22 ++++---- rust/src/bin/rpc_client.rs | 20 +++---- rust/src/bin/rpc_server.rs | 85 ++++++++++++++++-------------- 3 files changed, 68 insertions(+), 59 deletions(-) diff --git a/rust/src/bin/receive_logs_topic.rs b/rust/src/bin/receive_logs_topic.rs index 62bab8b1..547aea71 100644 --- a/rust/src/bin/receive_logs_topic.rs +++ b/rust/src/bin/receive_logs_topic.rs @@ -1,3 +1,4 @@ +use futures::StreamExt; use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties, ExchangeKind}; #[tokio::main] @@ -35,7 +36,7 @@ async fn main() -> Result<(), Box> { ) .await?; - futures::future::join_all(binding_keys.into_iter().map(|binding_key| { + futures::future::join_all(binding_keys.iter().map(|binding_key| { channel.queue_bind( queue.name().as_str(), "topic_logs", @@ -46,7 +47,7 @@ async fn main() -> Result<(), Box> { })) .await; - let consumer = channel + let mut consumer = channel .basic_consume( queue.name().as_str(), "consumer", @@ -60,14 +61,17 @@ async fn main() -> Result<(), Box> { println!(" [*] Waiting for logs. To exit press CTRL+C"); - for delivery in consumer { - let (_, delivery) = delivery?; - println!( - " [x] {}:{:?}", - delivery.routing_key, - std::str::from_utf8(&delivery.data)? - ); + + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!( + " [x] {}:{:?}", + delivery.routing_key, + std::str::from_utf8(&delivery.data)? + ); + } } + Ok(()) } diff --git a/rust/src/bin/rpc_client.rs b/rust/src/bin/rpc_client.rs index 40bb955d..691a2cd9 100644 --- a/rust/src/bin/rpc_client.rs +++ b/rust/src/bin/rpc_client.rs @@ -5,7 +5,6 @@ use lapin::{ }; use std::convert::TryInto; use std::fmt::Display; -use tokio::stream::StreamExt; use uuid::Uuid; #[derive(Debug)] @@ -87,15 +86,16 @@ impl FibonacciRpcClient { .await?; while let Some(delivery) = self.consumer.next().await { - let (_, reply) = delivery?; - if reply.properties.correlation_id().as_ref() == Some(&self.correlation_id) { - return Ok(u64::from_le_bytes( - reply - .data - .as_slice() - .try_into() - .map_err(|_| Error::CannotDecodeReply)?, - )); + if let Ok(delivery) = delivery { + if delivery.properties.correlation_id().as_ref() == Some(&self.correlation_id) { + return Ok(u64::from_le_bytes( + delivery + .data + .as_slice() + .try_into() + .map_err(|_| Error::CannotDecodeReply)?, + )); + } } } diff --git a/rust/src/bin/rpc_server.rs b/rust/src/bin/rpc_server.rs index 899a1e94..f8fe6b81 100644 --- a/rust/src/bin/rpc_server.rs +++ b/rust/src/bin/rpc_server.rs @@ -1,6 +1,7 @@ -use lapin::{options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties}; use std::convert::TryInto; use std::fmt::Display; +use futures::StreamExt; +use lapin::{BasicProperties, Connection, ConnectionProperties, options::*, types::FieldTable}; #[derive(Debug)] enum Error { @@ -45,7 +46,7 @@ async fn main() -> Result<(), Box> { channel.basic_qos(1, BasicQosOptions::default()).await?; - let consumer = channel + let mut consumer = channel .basic_consume( "rpc_queue", "rpc_server", @@ -56,44 +57,48 @@ async fn main() -> Result<(), Box> { println!(" [x] Awaiting RPC requests"); - for delivery in consumer { - let (channel, delivery) = delivery?; - let n = u64::from_le_bytes( - delivery - .data - .as_slice() - .try_into() - .map_err(|_| Error::CannotDecodeArg)?, - ); - println!(" [.] fib({})", n); - let response = fib(n); - - let routing_key = delivery - .properties - .reply_to() - .as_ref() - .ok_or(Error::MissingReplyTo)? - .as_str(); - - let correlation_id = delivery - .properties - .correlation_id() - .clone() - .ok_or(Error::MissingCorrelationId)?; - - channel - .basic_publish( - "", - routing_key, - BasicPublishOptions::default(), - response.to_le_bytes().to_vec(), - BasicProperties::default().with_correlation_id(correlation_id), - ) - .await?; - - channel - .basic_ack(delivery.delivery_tag, BasicAckOptions::default()) - .await?; + + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + let n = u64::from_le_bytes( + delivery + .data + .as_slice() + .try_into() + .map_err(|_| Error::CannotDecodeArg)?, + ); + println!(" [.] fib({})", n); + let response = fib(n); + let payload = response.to_be_bytes(); + + let routing_key = delivery + .properties + .reply_to() + .as_ref() + .ok_or(Error::MissingReplyTo)? + .as_str(); + + let correlation_id = delivery + .properties + .correlation_id() + .clone() + .ok_or(Error::MissingCorrelationId)?; + + channel + .basic_publish( + "", + routing_key, + BasicPublishOptions::default(), + &payload, + BasicProperties::default().with_correlation_id(correlation_id), + ) + .await?; + + channel + .basic_ack(delivery.delivery_tag, BasicAckOptions::default()) + .await?; + } } Ok(()) From 152dff1dcd204c82df2d8d4ac5222666e3460dd7 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 11 Jun 2022 01:08:09 +0400 Subject: [PATCH 234/659] Commit dependency updates --- rust/Cargo.lock | 181 ++++++++++++++++++++++-------------------------- 1 file changed, 83 insertions(+), 98 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 9e1d73d2..13c1e37b 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -143,9 +143,9 @@ dependencies = [ [[package]] name = "async-task" -version = "4.0.3" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" [[package]] name = "async-trait" @@ -178,9 +178,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" @@ -243,15 +243,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.63" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9c6140b5a2c7db40ea56eb1821245e5362b44385c05b76288b1a599934ac87" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -280,15 +274,15 @@ dependencies = [ [[package]] name = "cookie-factory" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f21b581d2f0cb891554812435667bb9610d74feb1a4c6415bf09c28ff0381d" +checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -296,9 +290,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" @@ -371,9 +365,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.12" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" +checksum = "1ceeb589a3157cac0ab8cc585feb749bd2cea5cb55a6ee802ad72d9fd38303da" dependencies = [ "futures-core", "futures-sink", @@ -383,9 +377,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", "percent-encoding", @@ -450,7 +444,7 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.9", + "pin-project-lite", "waker-fn", ] @@ -490,7 +484,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.9", + "pin-project-lite", "pin-utils", "slab", ] @@ -511,7 +505,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] @@ -536,9 +530,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -557,18 +551,18 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "itoa" -version = "0.4.6" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" @@ -625,24 +619,24 @@ dependencies = [ [[package]] name = "log" -version = "0.4.11" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", ] [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.3.4" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "minimal-lexical" @@ -684,15 +678,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.5.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "openssl-probe" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "p12" @@ -733,7 +727,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "smallvec", @@ -748,30 +742,24 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project" -version = "1.0.2" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.2" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "pin-project-lite" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" - [[package]] name = "pin-project-lite" version = "0.2.9" @@ -802,7 +790,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "log", "wepoll-ffi", @@ -820,9 +808,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.7" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] @@ -929,18 +917,18 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -961,9 +949,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.0.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -974,9 +962,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.0.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -984,18 +972,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.117" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.117" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1004,9 +992,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa", "ryu", @@ -1019,7 +1007,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest", ] @@ -1035,9 +1023,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "smallvec" @@ -1093,7 +1081,7 @@ version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09a4b0a70bac0a58ca6a7659d1328e34ee462339c70b0fa49f72bad1f278910a" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "p12", "rustls-connector", "rustls-pemfile", @@ -1101,9 +1089,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.0.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -1127,7 +1115,7 @@ dependencies = [ "num_cpus", "once_cell", "parking_lot", - "pin-project-lite 0.2.9", + "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", @@ -1152,26 +1140,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" dependencies = [ "futures-core", - "pin-project-lite 0.2.9", + "pin-project-lite", "tokio", ] [[package]] name = "tracing" -version = "0.1.21" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ - "cfg-if 0.1.10", - "pin-project-lite 0.1.11", + "cfg-if", + "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921" [[package]] name = "typenum" @@ -1181,12 +1169,9 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" @@ -1196,9 +1181,9 @@ checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" [[package]] name = "unicode-normalization" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" dependencies = [ "tinyvec", ] @@ -1211,9 +1196,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", "idna", @@ -1232,9 +1217,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "waker-fn" @@ -1260,7 +1245,7 @@ version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] From 9b51b98751cc52327b1a16876c20f6944de730f8 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 11 Jun 2022 01:11:55 +0400 Subject: [PATCH 235/659] Update Rust tutorial 2 consumer --- rust/src/bin/worker.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/rust/src/bin/worker.rs b/rust/src/bin/worker.rs index 2115503d..665c6dc5 100644 --- a/rust/src/bin/worker.rs +++ b/rust/src/bin/worker.rs @@ -1,6 +1,7 @@ -use lapin::{options::*, types::FieldTable, Connection, ConnectionProperties}; +use futures::StreamExt; use std::thread; use std::time::Duration; +use lapin::{Connection, ConnectionProperties, options::*, types::FieldTable}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -16,25 +17,27 @@ async fn main() -> Result<(), Box> { ) .await?; - let consumer = channel + let mut consumer = channel .basic_consume( "task_queue", "consumer", BasicConsumeOptions::default(), FieldTable::default(), ) - .await?; + .await + .expect("basic_consume"); println!(" [*] Waiting for messages. To exit press CTRL+C"); - for delivery in consumer { - let (channel, delivery) = delivery?; - println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); - thread::sleep(Duration::from_secs(delivery.data.len() as u64)); - println!(" [x] Done"); - channel - .basic_ack(delivery.delivery_tag, BasicAckOptions::default()) - .await?; + while let Some(delivery) = consumer.next().await { + if let Ok(delivery) = delivery { + println!(" [x] Received {:?}", std::str::from_utf8(&delivery.data)?); + thread::sleep(Duration::from_secs(delivery.data.len() as u64)); + println!(" [x] Done"); + delivery.ack(BasicAckOptions::default()) + .await + .expect("basic_ack"); + } } Ok(()) From ea93ffa5464112119fe0155c67f71c828830b783 Mon Sep 17 00:00:00 2001 From: ChamRun Date: Mon, 20 Jun 2022 08:22:30 +0430 Subject: [PATCH 236/659] short sleeps in response checker loop "while self.response is None" causes 100% CPU usage --- python/rpc_client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/rpc_client.py b/python/rpc_client.py index c31ec26b..021adad5 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -19,6 +19,9 @@ def __init__(self): on_message_callback=self.on_response, auto_ack=True) + self.response = None + self.corr_id = None + def on_response(self, ch, method, props, body): if self.corr_id == props.correlation_id: self.response = body @@ -36,6 +39,7 @@ def call(self, n): body=str(n)) while self.response is None: self.connection.process_data_events() + self.connection.sleep(0.00001) return int(self.response) From 5e427cda945a7cd663e16c1ad7e38ba36a821286 Mon Sep 17 00:00:00 2001 From: ChamRun Date: Mon, 20 Jun 2022 10:59:27 +0430 Subject: [PATCH 237/659] set None time_limit for process_data_events --- python/rpc_client.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/rpc_client.py b/python/rpc_client.py index 021adad5..9af505dd 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -38,8 +38,7 @@ def call(self, n): ), body=str(n)) while self.response is None: - self.connection.process_data_events() - self.connection.sleep(0.00001) + self.connection.process_data_events(None) return int(self.response) From 3bed207b5256056e98cdc41c17a2fb54eae9adcf Mon Sep 17 00:00:00 2001 From: ChamRun Date: Mon, 20 Jun 2022 11:31:26 +0430 Subject: [PATCH 238/659] remove `while self.response is None` loop `self.connection.process_data_events(time_limit=None)` blocks, until response is ready. --- python/rpc_client.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/rpc_client.py b/python/rpc_client.py index 9af505dd..74f56652 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -37,8 +37,7 @@ def call(self, n): correlation_id=self.corr_id, ), body=str(n)) - while self.response is None: - self.connection.process_data_events(None) + self.connection.process_data_events(time_limit=None) return int(self.response) From fce59eb21de3d4ea786fe77ec4a20b4b4aef57e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bark=C3=A5?= Date: Mon, 27 Jun 2022 15:42:21 +0200 Subject: [PATCH 239/659] Changed Send.cs formatting to match tutorial text. Changed formatting to exactly match tutorial text at this page: https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html --- dotnet/Send/Send.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dotnet/Send/Send.cs b/dotnet/Send/Send.cs index cf2144f1..5599df38 100644 --- a/dotnet/Send/Send.cs +++ b/dotnet/Send/Send.cs @@ -10,12 +10,19 @@ public static void Main() using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); + channel.QueueDeclare(queue: "hello", + durable: false, + exclusive: false, + autoDelete: false, + arguments: null); string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); + channel.BasicPublish(exchange: "", + routingKey: "hello", + basicProperties: null, + body: body); Console.WriteLine(" [x] Sent {0}", message); } From da48161b96406c1d8fd47fe6bed6c94f6f423908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bark=C3=A5?= Date: Mon, 27 Jun 2022 15:52:55 +0200 Subject: [PATCH 240/659] Updated Recieve.cs to match tutorial Updated Recieve.cs (formatting and removing one writeline) to exactly match tutorial here: https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html --- dotnet/Receive/Receive.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs index a64ee46e..85c44da5 100644 --- a/dotnet/Receive/Receive.cs +++ b/dotnet/Receive/Receive.cs @@ -11,9 +11,11 @@ public static void Main() using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { - channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); - - Console.WriteLine(" [*] Waiting for messages."); + channel.QueueDeclare(queue: "hello", + durable: false, + exclusive: false, + autoDelete: false, + arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => @@ -22,7 +24,9 @@ public static void Main() var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; - channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); + channel.BasicConsume(queue: "hello", + autoAck: true, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); From e4fee05c96d0bc2f158bca974874d422a46ddbe2 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Mon, 5 Sep 2022 11:34:35 +0200 Subject: [PATCH 241/659] Use PublishWithContext instad of Publish (#337) Update the GO tutorials with PublishWithContext instead of Publish Publish is deprecated. As context, I used: `context.WithTimeout(context.Background(), 5*time.Second)` update the Golang Version to 1.7 Signed-off-by: Gabriele Santomaggio G.santomaggio@gmail.com --- go/emit_log.go | 7 ++++++- go/emit_log_direct.go | 7 ++++++- go/emit_log_topic.go | 7 ++++++- go/go.mod | 4 ++-- go/go.sum | 39 +++++++++++++++++++++++++++++++++++++++ go/new_task.go | 7 ++++++- go/publisher_confirms.go | 6 +++++- go/rpc_client.go | 6 +++++- go/rpc_server.go | 6 +++++- go/send.go | 6 +++++- 10 files changed, 85 insertions(+), 10 deletions(-) diff --git a/go/emit_log.go b/go/emit_log.go index 780e08d6..8ee2e29b 100644 --- a/go/emit_log.go +++ b/go/emit_log.go @@ -1,9 +1,11 @@ package main import ( + "context" "log" "os" "strings" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -34,8 +36,11 @@ func main() { ) failOnError(err, "Failed to declare an exchange") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + body := bodyFrom(os.Args) - err = ch.Publish( + err = ch.PublishWithContext(ctx, "logs", // exchange "", // routing key false, // mandatory diff --git a/go/emit_log_direct.go b/go/emit_log_direct.go index 5294ec98..0d1cfdcf 100644 --- a/go/emit_log_direct.go +++ b/go/emit_log_direct.go @@ -1,9 +1,11 @@ package main import ( + "context" "log" "os" "strings" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -34,8 +36,11 @@ func main() { ) failOnError(err, "Failed to declare an exchange") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + body := bodyFrom(os.Args) - err = ch.Publish( + err = ch.PublishWithContext(ctx, "logs_direct", // exchange severityFrom(os.Args), // routing key false, // mandatory diff --git a/go/emit_log_topic.go b/go/emit_log_topic.go index 8de74ba0..a405e280 100644 --- a/go/emit_log_topic.go +++ b/go/emit_log_topic.go @@ -1,9 +1,11 @@ package main import ( + "context" "log" "os" "strings" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -34,8 +36,11 @@ func main() { ) failOnError(err, "Failed to declare an exchange") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + body := bodyFrom(os.Args) - err = ch.Publish( + err = ch.PublishWithContext(ctx, "logs_topic", // exchange severityFrom(os.Args), // routing key false, // mandatory diff --git a/go/go.mod b/go/go.mod index 745f6ab5..538d97cf 100644 --- a/go/go.mod +++ b/go/go.mod @@ -1,5 +1,5 @@ module github.com/rabbitmq/rabbitmq-tutorials -go 1.16 +go 1.17 -require github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf +require github.com/rabbitmq/amqp091-go v1.4.0 diff --git a/go/go.sum b/go/go.sum index 75785ad4..e8a0ad5c 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,2 +1,41 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf h1:EBDKctNpOEfxlZAm2At5rUjmztnfswQr4ljWQXvQ3pM= github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= +github.com/rabbitmq/amqp091-go v1.4.0 h1:T2G+J9W9OY4p64Di23J6yH7tOkMocgnESvYeBjuG9cY= +github.com/rabbitmq/amqp091-go v1.4.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/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.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +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-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/new_task.go b/go/new_task.go index 4ebcfd00..5b296ebc 100644 --- a/go/new_task.go +++ b/go/new_task.go @@ -1,9 +1,11 @@ package main import ( + "context" "log" "os" "strings" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -33,8 +35,11 @@ func main() { ) failOnError(err, "Failed to declare a queue") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + body := bodyFrom(os.Args) - err = ch.Publish( + err = ch.PublishWithContext(ctx, "", // exchange q.Name, // routing key false, // mandatory diff --git a/go/publisher_confirms.go b/go/publisher_confirms.go index a9457926..d8cdf658 100644 --- a/go/publisher_confirms.go +++ b/go/publisher_confirms.go @@ -1,7 +1,9 @@ package main import ( + "context" "log" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -76,7 +78,9 @@ func consume(ch *amqp.Channel, qName string) { } func publish(ch *amqp.Channel, qName, text string) { - err := ch.Publish("", qName, false, false, amqp.Publishing{ + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + err := ch.PublishWithContext(ctx, "", qName, false, false, amqp.Publishing{ ContentType: "text/plain", Body: []byte(text), }) diff --git a/go/rpc_client.go b/go/rpc_client.go index 7e360f33..fd5f7363 100644 --- a/go/rpc_client.go +++ b/go/rpc_client.go @@ -1,6 +1,7 @@ package main import ( + "context" "log" "math/rand" "os" @@ -61,7 +62,10 @@ func fibonacciRPC(n int) (res int, err error) { corrId := randomString(32) - err = ch.Publish( + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + err = ch.PublishWithContext(ctx, "", // exchange "rpc_queue", // routing key false, // mandatory diff --git a/go/rpc_server.go b/go/rpc_server.go index 06fd557d..bbca71ae 100644 --- a/go/rpc_server.go +++ b/go/rpc_server.go @@ -1,8 +1,10 @@ package main import ( + "context" "log" "strconv" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -63,6 +65,8 @@ func main() { var forever chan struct{} go func() { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() for d := range msgs { n, err := strconv.Atoi(string(d.Body)) failOnError(err, "Failed to convert body to integer") @@ -70,7 +74,7 @@ func main() { log.Printf(" [.] fib(%d)", n) response := fib(n) - err = ch.Publish( + err = ch.PublishWithContext(ctx, "", // exchange d.ReplyTo, // routing key false, // mandatory diff --git a/go/send.go b/go/send.go index b455d9b7..56fb379c 100644 --- a/go/send.go +++ b/go/send.go @@ -1,7 +1,9 @@ package main import ( + "context" "log" + "time" amqp "github.com/rabbitmq/amqp091-go" ) @@ -30,9 +32,11 @@ func main() { nil, // arguments ) failOnError(err, "Failed to declare a queue") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() body := "Hello World!" - err = ch.Publish( + err = ch.PublishWithContext(ctx, "", // exchange q.Name, // routing key false, // mandatory From a04cfcc23310c5fa8917b46b015d8d48ee7412d6 Mon Sep 17 00:00:00 2001 From: Michel Lammertink Date: Tue, 20 Sep 2022 19:28:25 +0200 Subject: [PATCH 242/659] Simplified RPC examples --- java/RPCClient.java | 14 ++++----- java/RPCServer.java | 77 ++++++++++++++++++--------------------------- 2 files changed, 36 insertions(+), 55 deletions(-) diff --git a/java/RPCClient.java b/java/RPCClient.java index 623ca429..6c72dd4e 100644 --- a/java/RPCClient.java +++ b/java/RPCClient.java @@ -5,9 +5,7 @@ import java.io.IOException; import java.util.UUID; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.*; public class RPCClient implements AutoCloseable { @@ -31,12 +29,12 @@ public static void main(String[] argv) { String response = fibonacciRpc.call(i_str); System.out.println(" [.] Got '" + response + "'"); } - } catch (IOException | TimeoutException | InterruptedException e) { + } catch (IOException | TimeoutException | InterruptedException | ExecutionException e) { e.printStackTrace(); } } - public String call(String message) throws IOException, InterruptedException { + public String call(String message) throws IOException, InterruptedException, ExecutionException { final String corrId = UUID.randomUUID().toString(); String replyQueueName = channel.queueDeclare().getQueue(); @@ -48,16 +46,16 @@ public String call(String message) throws IOException, InterruptedException { channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8")); - final BlockingQueue response = new ArrayBlockingQueue<>(1); + final CompletableFuture response = new CompletableFuture<>(); String ctag = channel.basicConsume(replyQueueName, true, (consumerTag, delivery) -> { if (delivery.getProperties().getCorrelationId().equals(corrId)) { - response.offer(new String(delivery.getBody(), "UTF-8")); + response.complete(new String(delivery.getBody(), "UTF-8")); } }, consumerTag -> { }); - String result = response.take(); + String result = response.get(); channel.basicCancel(ctag); return result; } diff --git a/java/RPCServer.java b/java/RPCServer.java index 26591c33..af04fd2e 100644 --- a/java/RPCServer.java +++ b/java/RPCServer.java @@ -14,53 +14,36 @@ public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); - channel.queuePurge(RPC_QUEUE_NAME); - - channel.basicQos(1); - - System.out.println(" [x] Awaiting RPC requests"); - - Object monitor = new Object(); - DeliverCallback deliverCallback = (consumerTag, delivery) -> { - AMQP.BasicProperties replyProps = new AMQP.BasicProperties - .Builder() - .correlationId(delivery.getProperties().getCorrelationId()) - .build(); - - String response = ""; - - try { - String message = new String(delivery.getBody(), "UTF-8"); - int n = Integer.parseInt(message); - - System.out.println(" [.] fib(" + message + ")"); - response += fib(n); - } catch (RuntimeException e) { - System.out.println(" [.] " + e.toString()); - } finally { - channel.basicPublish("", delivery.getProperties().getReplyTo(), replyProps, response.getBytes("UTF-8")); - channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); - // RabbitMq consumer worker thread notifies the RPC server owner thread - synchronized (monitor) { - monitor.notify(); - } - } - }; - - channel.basicConsume(RPC_QUEUE_NAME, false, deliverCallback, (consumerTag -> { })); - // Wait and be prepared to consume the message from RPC client. - while (true) { - synchronized (monitor) { - try { - monitor.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + channel.queueDeclare(RPC_QUEUE_NAME, false, false, false, null); + channel.queuePurge(RPC_QUEUE_NAME); + + channel.basicQos(1); + + System.out.println(" [x] Awaiting RPC requests"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + AMQP.BasicProperties replyProps = new AMQP.BasicProperties + .Builder() + .correlationId(delivery.getProperties().getCorrelationId()) + .build(); + + String response = ""; + try { + String message = new String(delivery.getBody(), "UTF-8"); + int n = Integer.parseInt(message); + + System.out.println(" [.] fib(" + message + ")"); + response += fib(n); + } catch (RuntimeException e) { + System.out.println(" [.] " + e); + } finally { + channel.basicPublish("", delivery.getProperties().getReplyTo(), replyProps, response.getBytes("UTF-8")); + channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); } - } + }; + + channel.basicConsume(RPC_QUEUE_NAME, false, deliverCallback, (consumerTag -> {})); } } \ No newline at end of file From 0ce32cf4ab103a727023fd3de492727a5842b877 Mon Sep 17 00:00:00 2001 From: Simon Unge Date: Wed, 28 Sep 2022 10:29:04 -0400 Subject: [PATCH 243/659] Update code to reflect rebar3 usage --- erlang/Makefile | 4 +- erlang/README.md | 4 +- erlang/emit_log.erl | 2 +- erlang/emit_log_direct.erl | 2 +- erlang/emit_log_topic.erl | 2 +- erlang/erlang.mk | 7575 -------------------------------- erlang/new_task.erl | 2 +- erlang/receive.erl | 2 +- erlang/receive_logs.erl | 2 +- erlang/receive_logs_direct.erl | 2 +- erlang/receive_logs_topic.erl | 2 +- erlang/send.erl | 2 +- erlang/worker.erl | 2 +- 13 files changed, 15 insertions(+), 7588 deletions(-) delete mode 100644 erlang/erlang.mk diff --git a/erlang/Makefile b/erlang/Makefile index 5cd70d94..b26876df 100644 --- a/erlang/Makefile +++ b/erlang/Makefile @@ -1,5 +1,5 @@ all: - rebar3 compile + rebar3 compile clean: - rebar3 clean && rm -rf _build + rebar3 clean && rm -rf _build diff --git a/erlang/README.md b/erlang/README.md index 6b51adb4..02e8e71c 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -15,9 +15,11 @@ using apt: sudo apt-get install erlang +You also need rebar3: https://rebar3.readme.io/docs/getting-started + You need Erlang Client binaries: - make deps + make all ## Code diff --git a/erlang/emit_log.erl b/erlang/emit_log.erl index 2b41495c..93c126e0 100755 --- a/erlang/emit_log.erl +++ b/erlang/emit_log.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_direct.erl b/erlang/emit_log_direct.erl index c1a24ba9..07cf7ba9 100755 --- a/erlang/emit_log_direct.erl +++ b/erlang/emit_log_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_topic.erl b/erlang/emit_log_topic.erl index 1edc0fe0..3f1f3e12 100755 --- a/erlang/emit_log_topic.erl +++ b/erlang/emit_log_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/erlang.mk b/erlang/erlang.mk deleted file mode 100644 index 09506d22..00000000 --- a/erlang/erlang.mk +++ /dev/null @@ -1,7575 +0,0 @@ -# Copyright (c) 2013-2016, Loïc Hoguin -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -.PHONY: all app apps deps search rel relup docs install-docs check tests clean distclean help erlang-mk - -ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) -export ERLANG_MK_FILENAME - -ERLANG_MK_VERSION = fb87e18 -ERLANG_MK_WITHOUT = - -# Make 3.81 and 3.82 are deprecated. - -ifeq ($(MAKELEVEL)$(MAKE_VERSION),03.81) -$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) -endif - -ifeq ($(MAKELEVEL)$(MAKE_VERSION),03.82) -$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) -endif - -# Core configuration. - -PROJECT ?= $(notdir $(CURDIR)) -PROJECT := $(strip $(PROJECT)) - -PROJECT_VERSION ?= rolling -PROJECT_MOD ?= $(PROJECT)_app -PROJECT_ENV ?= [] - -# Verbosity. - -V ?= 0 - -verbose_0 = @ -verbose_2 = set -x; -verbose = $(verbose_$(V)) - -ifeq ($(V),3) -SHELL := $(SHELL) -x -endif - -gen_verbose_0 = @echo " GEN " $@; -gen_verbose_2 = set -x; -gen_verbose = $(gen_verbose_$(V)) - -gen_verbose_esc_0 = @echo " GEN " $$@; -gen_verbose_esc_2 = set -x; -gen_verbose_esc = $(gen_verbose_esc_$(V)) - -# Temporary files directory. - -ERLANG_MK_TMP ?= $(CURDIR)/.erlang.mk -export ERLANG_MK_TMP - -# "erl" command. - -ERL = erl +A0 -noinput -boot start_clean - -# Platform detection. - -ifeq ($(PLATFORM),) -UNAME_S := $(shell uname -s) - -ifeq ($(UNAME_S),Linux) -PLATFORM = linux -else ifeq ($(UNAME_S),Darwin) -PLATFORM = darwin -else ifeq ($(UNAME_S),SunOS) -PLATFORM = solaris -else ifeq ($(UNAME_S),GNU) -PLATFORM = gnu -else ifeq ($(UNAME_S),FreeBSD) -PLATFORM = freebsd -else ifeq ($(UNAME_S),NetBSD) -PLATFORM = netbsd -else ifeq ($(UNAME_S),OpenBSD) -PLATFORM = openbsd -else ifeq ($(UNAME_S),DragonFly) -PLATFORM = dragonfly -else ifeq ($(shell uname -o),Msys) -PLATFORM = msys2 -else -$(error Unable to detect platform. Please open a ticket with the output of uname -a.) -endif - -export PLATFORM -endif - -# Core targets. - -all:: deps app rel - -# Noop to avoid a Make warning when there's nothing to do. -rel:: - $(verbose) : - -relup:: deps app - -check:: tests - -clean:: clean-crashdump - -clean-crashdump: -ifneq ($(wildcard erl_crash.dump),) - $(gen_verbose) rm -f erl_crash.dump -endif - -distclean:: clean distclean-tmp - -$(ERLANG_MK_TMP): - $(verbose) mkdir -p $(ERLANG_MK_TMP) - -distclean-tmp: - $(gen_verbose) rm -rf $(ERLANG_MK_TMP) - -help:: - $(verbose) printf "%s\n" \ - "erlang.mk (version $(ERLANG_MK_VERSION)) is distributed under the terms of the ISC License." \ - "Copyright (c) 2013-2016 Loïc Hoguin " \ - "" \ - "Usage: [V=1] $(MAKE) [target]..." \ - "" \ - "Core targets:" \ - " all Run deps, app and rel targets in that order" \ - " app Compile the project" \ - " deps Fetch dependencies (if needed) and compile them" \ - " fetch-deps Fetch dependencies recursively (if needed) without compiling them" \ - " list-deps List dependencies recursively on stdout" \ - " search q=... Search for a package in the built-in index" \ - " rel Build a release for this project, if applicable" \ - " docs Build the documentation for this project" \ - " install-docs Install the man pages for this project" \ - " check Compile and run all tests and analysis for this project" \ - " tests Run the tests for this project" \ - " clean Delete temporary and output files from most targets" \ - " distclean Delete all temporary and output files" \ - " help Display this help and exit" \ - " erlang-mk Update erlang.mk to the latest version" - -# Core functions. - -empty := -space := $(empty) $(empty) -tab := $(empty) $(empty) -comma := , - -define newline - - -endef - -define comma_list -$(subst $(space),$(comma),$(strip $(1))) -endef - -define escape_dquotes -$(subst ",\",$1) -endef - -# Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy. -define erlang -$(ERL) $2 -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(call escape_dquotes,$1))" -- erlang.mk -endef - -ifeq ($(PLATFORM),msys2) -core_native_path = $(subst \,\\\\,$(shell cygpath -w $1)) -else -core_native_path = $1 -endif - -core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$1) $2 - -core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) - -# We skip files that contain spaces because they end up causing issues. -core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2) | grep -v " ")) - -core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) - -core_ls = $(filter-out $(1),$(shell echo $(1))) - -# @todo Use a solution that does not require using perl. -core_relpath = $(shell perl -e 'use File::Spec; print File::Spec->abs2rel(@ARGV) . "\n"' $1 $2) - -define core_render - printf -- '$(subst $(newline),\n,$(subst %,%%,$(subst ','\'',$(subst $(tab),$(WS),$(call $(1))))))\n' > $(2) -endef - -# Automated update. - -ERLANG_MK_REPO ?= https://github.com/ninenines/erlang.mk -ERLANG_MK_COMMIT ?= -ERLANG_MK_BUILD_CONFIG ?= build.config -ERLANG_MK_BUILD_DIR ?= .erlang.mk.build - -erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT) -erlang-mk: -ifdef ERLANG_MK_COMMIT - $(verbose) git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) - $(verbose) cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT) -else - $(verbose) git clone --depth 1 $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) -endif - $(verbose) if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi - $(gen_verbose) $(MAKE) --no-print-directory -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))' UPGRADE=1 - $(verbose) cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk - $(verbose) rm -rf $(ERLANG_MK_BUILD_DIR) - $(verbose) rm -rf $(ERLANG_MK_TMP) - -# The erlang.mk package index is bundled in the default erlang.mk build. -# Search for the string "copyright" to skip to the rest of the code. - -# Copyright (c) 2015-2017, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: distclean-kerl - -KERL_INSTALL_DIR ?= $(HOME)/erlang - -ifeq ($(strip $(KERL)),) -KERL := $(ERLANG_MK_TMP)/kerl/kerl -endif - -KERL_DIR = $(ERLANG_MK_TMP)/kerl - -export KERL - -KERL_GIT ?= https://github.com/kerl/kerl -KERL_COMMIT ?= master - -KERL_MAKEFLAGS ?= - -OTP_GIT ?= https://github.com/erlang/otp - -define kerl_otp_target -$(KERL_INSTALL_DIR)/$(1): $(KERL) - $(verbose) if [ ! -d $$@ ]; then \ - MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1); \ - $(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1); \ - fi -endef - -define kerl_hipe_target -$(KERL_INSTALL_DIR)/$1-native: $(KERL) - $(verbose) if [ ! -d $$@ ]; then \ - KERL_CONFIGURE_OPTIONS=--enable-native-libs \ - MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native; \ - $(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native; \ - fi -endef - -$(KERL): $(KERL_DIR) - -$(KERL_DIR): | $(ERLANG_MK_TMP) - $(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl - $(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT) - $(verbose) chmod +x $(KERL) - -distclean:: distclean-kerl - -distclean-kerl: - $(gen_verbose) rm -rf $(KERL_DIR) - -# Allow users to select which version of Erlang/OTP to use for a project. - -ifneq ($(strip $(LATEST_ERLANG_OTP)),) -ERLANG_OTP := $(notdir $(lastword $(sort $(filter-out $(KERL_INSTALL_DIR)/OTP_R%,\ - $(filter-out %-rc1 %-rc2 %-rc3,$(wildcard $(KERL_INSTALL_DIR)/*[^-native])))))) -endif - -ERLANG_OTP ?= -ERLANG_HIPE ?= - -# Use kerl to enforce a specific Erlang/OTP version for a project. -ifneq ($(strip $(ERLANG_OTP)),) -export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH) -SHELL := env PATH=$(PATH) $(SHELL) -$(eval $(call kerl_otp_target,$(ERLANG_OTP))) - -# Build Erlang/OTP only if it doesn't already exist. -ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),) -$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...) -$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2) -endif - -else -# Same for a HiPE enabled VM. -ifneq ($(strip $(ERLANG_HIPE)),) -export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH) -SHELL := env PATH=$(PATH) $(SHELL) -$(eval $(call kerl_hipe_target,$(ERLANG_HIPE))) - -# Build Erlang/OTP only if it doesn't already exist. -ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native)$(BUILD_ERLANG_OTP),) -$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...) -$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2) -endif - -endif -endif - -PACKAGES += aberth -pkg_aberth_name = aberth -pkg_aberth_description = Generic BERT-RPC server in Erlang -pkg_aberth_homepage = https://github.com/a13x/aberth -pkg_aberth_fetch = git -pkg_aberth_repo = https://github.com/a13x/aberth -pkg_aberth_commit = master - -PACKAGES += active -pkg_active_name = active -pkg_active_description = Active development for Erlang: rebuild and reload source/binary files while the VM is running -pkg_active_homepage = https://github.com/proger/active -pkg_active_fetch = git -pkg_active_repo = https://github.com/proger/active -pkg_active_commit = master - -PACKAGES += actordb_core -pkg_actordb_core_name = actordb_core -pkg_actordb_core_description = ActorDB main source -pkg_actordb_core_homepage = https://www.actordb.com/ -pkg_actordb_core_fetch = git -pkg_actordb_core_repo = https://github.com/biokoda/actordb_core -pkg_actordb_core_commit = master - -PACKAGES += actordb_thrift -pkg_actordb_thrift_name = actordb_thrift -pkg_actordb_thrift_description = Thrift API for ActorDB -pkg_actordb_thrift_homepage = https://www.actordb.com/ -pkg_actordb_thrift_fetch = git -pkg_actordb_thrift_repo = https://github.com/biokoda/actordb_thrift -pkg_actordb_thrift_commit = master - -PACKAGES += aleppo -pkg_aleppo_name = aleppo -pkg_aleppo_description = Alternative Erlang Pre-Processor -pkg_aleppo_homepage = https://github.com/ErlyORM/aleppo -pkg_aleppo_fetch = git -pkg_aleppo_repo = https://github.com/ErlyORM/aleppo -pkg_aleppo_commit = master - -PACKAGES += alog -pkg_alog_name = alog -pkg_alog_description = Simply the best logging framework for Erlang -pkg_alog_homepage = https://github.com/siberian-fast-food/alogger -pkg_alog_fetch = git -pkg_alog_repo = https://github.com/siberian-fast-food/alogger -pkg_alog_commit = master - -PACKAGES += amqp_client -pkg_amqp_client_name = amqp_client -pkg_amqp_client_description = RabbitMQ Erlang AMQP client -pkg_amqp_client_homepage = https://www.rabbitmq.com/erlang-client-user-guide.html -pkg_amqp_client_fetch = git -pkg_amqp_client_repo = https://github.com/rabbitmq/rabbitmq-erlang-client.git -pkg_amqp_client_commit = master - -PACKAGES += annotations -pkg_annotations_name = annotations -pkg_annotations_description = Simple code instrumentation utilities -pkg_annotations_homepage = https://github.com/hyperthunk/annotations -pkg_annotations_fetch = git -pkg_annotations_repo = https://github.com/hyperthunk/annotations -pkg_annotations_commit = master - -PACKAGES += antidote -pkg_antidote_name = antidote -pkg_antidote_description = Large-scale computation without synchronisation -pkg_antidote_homepage = https://syncfree.lip6.fr/ -pkg_antidote_fetch = git -pkg_antidote_repo = https://github.com/SyncFree/antidote -pkg_antidote_commit = master - -PACKAGES += apns -pkg_apns_name = apns -pkg_apns_description = Apple Push Notification Server for Erlang -pkg_apns_homepage = https://inaka.github.com/apns4erl -pkg_apns_fetch = git -pkg_apns_repo = https://github.com/inaka/apns4erl -pkg_apns_commit = master - -PACKAGES += asciideck -pkg_asciideck_name = asciideck -pkg_asciideck_description = Asciidoc for Erlang. -pkg_asciideck_homepage = https://ninenines.eu -pkg_asciideck_fetch = git -pkg_asciideck_repo = https://github.com/ninenines/asciideck -pkg_asciideck_commit = master - -PACKAGES += azdht -pkg_azdht_name = azdht -pkg_azdht_description = Azureus Distributed Hash Table (DHT) in Erlang -pkg_azdht_homepage = https://github.com/arcusfelis/azdht -pkg_azdht_fetch = git -pkg_azdht_repo = https://github.com/arcusfelis/azdht -pkg_azdht_commit = master - -PACKAGES += backoff -pkg_backoff_name = backoff -pkg_backoff_description = Simple exponential backoffs in Erlang -pkg_backoff_homepage = https://github.com/ferd/backoff -pkg_backoff_fetch = git -pkg_backoff_repo = https://github.com/ferd/backoff -pkg_backoff_commit = master - -PACKAGES += barrel_tcp -pkg_barrel_tcp_name = barrel_tcp -pkg_barrel_tcp_description = barrel is a generic TCP acceptor pool with low latency in Erlang. -pkg_barrel_tcp_homepage = https://github.com/benoitc-attic/barrel_tcp -pkg_barrel_tcp_fetch = git -pkg_barrel_tcp_repo = https://github.com/benoitc-attic/barrel_tcp -pkg_barrel_tcp_commit = master - -PACKAGES += basho_bench -pkg_basho_bench_name = basho_bench -pkg_basho_bench_description = A load-generation and testing tool for basically whatever you can write a returning Erlang function for. -pkg_basho_bench_homepage = https://github.com/basho/basho_bench -pkg_basho_bench_fetch = git -pkg_basho_bench_repo = https://github.com/basho/basho_bench -pkg_basho_bench_commit = master - -PACKAGES += bcrypt -pkg_bcrypt_name = bcrypt -pkg_bcrypt_description = Bcrypt Erlang / C library -pkg_bcrypt_homepage = https://github.com/erlangpack/bcrypt -pkg_bcrypt_fetch = git -pkg_bcrypt_repo = https://github.com/erlangpack/bcrypt.git -pkg_bcrypt_commit = master - -PACKAGES += beam -pkg_beam_name = beam -pkg_beam_description = BEAM emulator written in Erlang -pkg_beam_homepage = https://github.com/tonyrog/beam -pkg_beam_fetch = git -pkg_beam_repo = https://github.com/tonyrog/beam -pkg_beam_commit = master - -PACKAGES += beanstalk -pkg_beanstalk_name = beanstalk -pkg_beanstalk_description = An Erlang client for beanstalkd -pkg_beanstalk_homepage = https://github.com/tim/erlang-beanstalk -pkg_beanstalk_fetch = git -pkg_beanstalk_repo = https://github.com/tim/erlang-beanstalk -pkg_beanstalk_commit = master - -PACKAGES += bear -pkg_bear_name = bear -pkg_bear_description = a set of statistics functions for erlang -pkg_bear_homepage = https://github.com/boundary/bear -pkg_bear_fetch = git -pkg_bear_repo = https://github.com/boundary/bear -pkg_bear_commit = master - -PACKAGES += bertconf -pkg_bertconf_name = bertconf -pkg_bertconf_description = Make ETS tables out of statc BERT files that are auto-reloaded -pkg_bertconf_homepage = https://github.com/ferd/bertconf -pkg_bertconf_fetch = git -pkg_bertconf_repo = https://github.com/ferd/bertconf -pkg_bertconf_commit = master - -PACKAGES += bifrost -pkg_bifrost_name = bifrost -pkg_bifrost_description = Erlang FTP Server Framework -pkg_bifrost_homepage = https://github.com/thorstadt/bifrost -pkg_bifrost_fetch = git -pkg_bifrost_repo = https://github.com/thorstadt/bifrost -pkg_bifrost_commit = master - -PACKAGES += binpp -pkg_binpp_name = binpp -pkg_binpp_description = Erlang Binary Pretty Printer -pkg_binpp_homepage = https://github.com/jtendo/binpp -pkg_binpp_fetch = git -pkg_binpp_repo = https://github.com/jtendo/binpp -pkg_binpp_commit = master - -PACKAGES += bisect -pkg_bisect_name = bisect -pkg_bisect_description = Ordered fixed-size binary dictionary in Erlang -pkg_bisect_homepage = https://github.com/knutin/bisect -pkg_bisect_fetch = git -pkg_bisect_repo = https://github.com/knutin/bisect -pkg_bisect_commit = master - -PACKAGES += bitcask -pkg_bitcask_name = bitcask -pkg_bitcask_description = because you need another a key/value storage engine -pkg_bitcask_homepage = https://github.com/basho/bitcask -pkg_bitcask_fetch = git -pkg_bitcask_repo = https://github.com/basho/bitcask -pkg_bitcask_commit = develop - -PACKAGES += bitstore -pkg_bitstore_name = bitstore -pkg_bitstore_description = A document based ontology development environment -pkg_bitstore_homepage = https://github.com/bdionne/bitstore -pkg_bitstore_fetch = git -pkg_bitstore_repo = https://github.com/bdionne/bitstore -pkg_bitstore_commit = master - -PACKAGES += bootstrap -pkg_bootstrap_name = bootstrap -pkg_bootstrap_description = A simple, yet powerful Erlang cluster bootstrapping application. -pkg_bootstrap_homepage = https://github.com/schlagert/bootstrap -pkg_bootstrap_fetch = git -pkg_bootstrap_repo = https://github.com/schlagert/bootstrap -pkg_bootstrap_commit = master - -PACKAGES += boss -pkg_boss_name = boss -pkg_boss_description = Erlang web MVC, now featuring Comet -pkg_boss_homepage = https://github.com/ChicagoBoss/ChicagoBoss -pkg_boss_fetch = git -pkg_boss_repo = https://github.com/ChicagoBoss/ChicagoBoss -pkg_boss_commit = master - -PACKAGES += boss_db -pkg_boss_db_name = boss_db -pkg_boss_db_description = BossDB: a sharded, caching, pooling, evented ORM for Erlang -pkg_boss_db_homepage = https://github.com/ErlyORM/boss_db -pkg_boss_db_fetch = git -pkg_boss_db_repo = https://github.com/ErlyORM/boss_db -pkg_boss_db_commit = master - -PACKAGES += brod -pkg_brod_name = brod -pkg_brod_description = Kafka client in Erlang -pkg_brod_homepage = https://github.com/klarna/brod -pkg_brod_fetch = git -pkg_brod_repo = https://github.com/klarna/brod.git -pkg_brod_commit = master - -PACKAGES += bson -pkg_bson_name = bson -pkg_bson_description = BSON documents in Erlang, see bsonspec.org -pkg_bson_homepage = https://github.com/comtihon/bson-erlang -pkg_bson_fetch = git -pkg_bson_repo = https://github.com/comtihon/bson-erlang -pkg_bson_commit = master - -PACKAGES += bullet -pkg_bullet_name = bullet -pkg_bullet_description = Simple, reliable, efficient streaming for Cowboy. -pkg_bullet_homepage = https://ninenines.eu -pkg_bullet_fetch = git -pkg_bullet_repo = https://github.com/ninenines/bullet -pkg_bullet_commit = master - -PACKAGES += cache -pkg_cache_name = cache -pkg_cache_description = Erlang in-memory cache -pkg_cache_homepage = https://github.com/fogfish/cache -pkg_cache_fetch = git -pkg_cache_repo = https://github.com/fogfish/cache -pkg_cache_commit = master - -PACKAGES += cake -pkg_cake_name = cake -pkg_cake_description = Really simple terminal colorization -pkg_cake_homepage = https://github.com/darach/cake-erl -pkg_cake_fetch = git -pkg_cake_repo = https://github.com/darach/cake-erl -pkg_cake_commit = master - -PACKAGES += carotene -pkg_carotene_name = carotene -pkg_carotene_description = Real-time server -pkg_carotene_homepage = https://github.com/carotene/carotene -pkg_carotene_fetch = git -pkg_carotene_repo = https://github.com/carotene/carotene -pkg_carotene_commit = master - -PACKAGES += cberl -pkg_cberl_name = cberl -pkg_cberl_description = NIF based Erlang bindings for Couchbase -pkg_cberl_homepage = https://github.com/chitika/cberl -pkg_cberl_fetch = git -pkg_cberl_repo = https://github.com/chitika/cberl -pkg_cberl_commit = master - -PACKAGES += cecho -pkg_cecho_name = cecho -pkg_cecho_description = An ncurses library for Erlang -pkg_cecho_homepage = https://github.com/mazenharake/cecho -pkg_cecho_fetch = git -pkg_cecho_repo = https://github.com/mazenharake/cecho -pkg_cecho_commit = master - -PACKAGES += cferl -pkg_cferl_name = cferl -pkg_cferl_description = Rackspace / Open Stack Cloud Files Erlang Client -pkg_cferl_homepage = https://github.com/ddossot/cferl -pkg_cferl_fetch = git -pkg_cferl_repo = https://github.com/ddossot/cferl -pkg_cferl_commit = master - -PACKAGES += chaos_monkey -pkg_chaos_monkey_name = chaos_monkey -pkg_chaos_monkey_description = This is The CHAOS MONKEY. It will kill your processes. -pkg_chaos_monkey_homepage = https://github.com/dLuna/chaos_monkey -pkg_chaos_monkey_fetch = git -pkg_chaos_monkey_repo = https://github.com/dLuna/chaos_monkey -pkg_chaos_monkey_commit = master - -PACKAGES += check_node -pkg_check_node_name = check_node -pkg_check_node_description = Nagios Scripts for monitoring Riak -pkg_check_node_homepage = https://github.com/basho-labs/riak_nagios -pkg_check_node_fetch = git -pkg_check_node_repo = https://github.com/basho-labs/riak_nagios -pkg_check_node_commit = master - -PACKAGES += chronos -pkg_chronos_name = chronos -pkg_chronos_description = Timer module for Erlang that makes it easy to abstact time out of the tests. -pkg_chronos_homepage = https://github.com/lehoff/chronos -pkg_chronos_fetch = git -pkg_chronos_repo = https://github.com/lehoff/chronos -pkg_chronos_commit = master - -PACKAGES += chumak -pkg_chumak_name = chumak -pkg_chumak_description = Pure Erlang implementation of ZeroMQ Message Transport Protocol. -pkg_chumak_homepage = http://choven.ca -pkg_chumak_fetch = git -pkg_chumak_repo = https://github.com/chovencorp/chumak -pkg_chumak_commit = master - -PACKAGES += cl -pkg_cl_name = cl -pkg_cl_description = OpenCL binding for Erlang -pkg_cl_homepage = https://github.com/tonyrog/cl -pkg_cl_fetch = git -pkg_cl_repo = https://github.com/tonyrog/cl -pkg_cl_commit = master - -PACKAGES += clique -pkg_clique_name = clique -pkg_clique_description = CLI Framework for Erlang -pkg_clique_homepage = https://github.com/basho/clique -pkg_clique_fetch = git -pkg_clique_repo = https://github.com/basho/clique -pkg_clique_commit = develop - -PACKAGES += cloudi_core -pkg_cloudi_core_name = cloudi_core -pkg_cloudi_core_description = CloudI internal service runtime -pkg_cloudi_core_homepage = https://cloudi.org/ -pkg_cloudi_core_fetch = git -pkg_cloudi_core_repo = https://github.com/CloudI/cloudi_core -pkg_cloudi_core_commit = master - -PACKAGES += cloudi_service_api_requests -pkg_cloudi_service_api_requests_name = cloudi_service_api_requests -pkg_cloudi_service_api_requests_description = CloudI Service API requests (JSON-RPC/Erlang-term support) -pkg_cloudi_service_api_requests_homepage = https://cloudi.org/ -pkg_cloudi_service_api_requests_fetch = git -pkg_cloudi_service_api_requests_repo = https://github.com/CloudI/cloudi_service_api_requests -pkg_cloudi_service_api_requests_commit = master - -PACKAGES += cloudi_service_db -pkg_cloudi_service_db_name = cloudi_service_db -pkg_cloudi_service_db_description = CloudI Database (in-memory/testing/generic) -pkg_cloudi_service_db_homepage = https://cloudi.org/ -pkg_cloudi_service_db_fetch = git -pkg_cloudi_service_db_repo = https://github.com/CloudI/cloudi_service_db -pkg_cloudi_service_db_commit = master - -PACKAGES += cloudi_service_db_cassandra -pkg_cloudi_service_db_cassandra_name = cloudi_service_db_cassandra -pkg_cloudi_service_db_cassandra_description = Cassandra CloudI Service -pkg_cloudi_service_db_cassandra_homepage = https://cloudi.org/ -pkg_cloudi_service_db_cassandra_fetch = git -pkg_cloudi_service_db_cassandra_repo = https://github.com/CloudI/cloudi_service_db_cassandra -pkg_cloudi_service_db_cassandra_commit = master - -PACKAGES += cloudi_service_db_cassandra_cql -pkg_cloudi_service_db_cassandra_cql_name = cloudi_service_db_cassandra_cql -pkg_cloudi_service_db_cassandra_cql_description = Cassandra CQL CloudI Service -pkg_cloudi_service_db_cassandra_cql_homepage = https://cloudi.org/ -pkg_cloudi_service_db_cassandra_cql_fetch = git -pkg_cloudi_service_db_cassandra_cql_repo = https://github.com/CloudI/cloudi_service_db_cassandra_cql -pkg_cloudi_service_db_cassandra_cql_commit = master - -PACKAGES += cloudi_service_db_couchdb -pkg_cloudi_service_db_couchdb_name = cloudi_service_db_couchdb -pkg_cloudi_service_db_couchdb_description = CouchDB CloudI Service -pkg_cloudi_service_db_couchdb_homepage = https://cloudi.org/ -pkg_cloudi_service_db_couchdb_fetch = git -pkg_cloudi_service_db_couchdb_repo = https://github.com/CloudI/cloudi_service_db_couchdb -pkg_cloudi_service_db_couchdb_commit = master - -PACKAGES += cloudi_service_db_elasticsearch -pkg_cloudi_service_db_elasticsearch_name = cloudi_service_db_elasticsearch -pkg_cloudi_service_db_elasticsearch_description = elasticsearch CloudI Service -pkg_cloudi_service_db_elasticsearch_homepage = https://cloudi.org/ -pkg_cloudi_service_db_elasticsearch_fetch = git -pkg_cloudi_service_db_elasticsearch_repo = https://github.com/CloudI/cloudi_service_db_elasticsearch -pkg_cloudi_service_db_elasticsearch_commit = master - -PACKAGES += cloudi_service_db_memcached -pkg_cloudi_service_db_memcached_name = cloudi_service_db_memcached -pkg_cloudi_service_db_memcached_description = memcached CloudI Service -pkg_cloudi_service_db_memcached_homepage = https://cloudi.org/ -pkg_cloudi_service_db_memcached_fetch = git -pkg_cloudi_service_db_memcached_repo = https://github.com/CloudI/cloudi_service_db_memcached -pkg_cloudi_service_db_memcached_commit = master - -PACKAGES += cloudi_service_db_mysql -pkg_cloudi_service_db_mysql_name = cloudi_service_db_mysql -pkg_cloudi_service_db_mysql_description = MySQL CloudI Service -pkg_cloudi_service_db_mysql_homepage = https://cloudi.org/ -pkg_cloudi_service_db_mysql_fetch = git -pkg_cloudi_service_db_mysql_repo = https://github.com/CloudI/cloudi_service_db_mysql -pkg_cloudi_service_db_mysql_commit = master - -PACKAGES += cloudi_service_db_pgsql -pkg_cloudi_service_db_pgsql_name = cloudi_service_db_pgsql -pkg_cloudi_service_db_pgsql_description = PostgreSQL CloudI Service -pkg_cloudi_service_db_pgsql_homepage = https://cloudi.org/ -pkg_cloudi_service_db_pgsql_fetch = git -pkg_cloudi_service_db_pgsql_repo = https://github.com/CloudI/cloudi_service_db_pgsql -pkg_cloudi_service_db_pgsql_commit = master - -PACKAGES += cloudi_service_db_riak -pkg_cloudi_service_db_riak_name = cloudi_service_db_riak -pkg_cloudi_service_db_riak_description = Riak CloudI Service -pkg_cloudi_service_db_riak_homepage = https://cloudi.org/ -pkg_cloudi_service_db_riak_fetch = git -pkg_cloudi_service_db_riak_repo = https://github.com/CloudI/cloudi_service_db_riak -pkg_cloudi_service_db_riak_commit = master - -PACKAGES += cloudi_service_db_tokyotyrant -pkg_cloudi_service_db_tokyotyrant_name = cloudi_service_db_tokyotyrant -pkg_cloudi_service_db_tokyotyrant_description = Tokyo Tyrant CloudI Service -pkg_cloudi_service_db_tokyotyrant_homepage = https://cloudi.org/ -pkg_cloudi_service_db_tokyotyrant_fetch = git -pkg_cloudi_service_db_tokyotyrant_repo = https://github.com/CloudI/cloudi_service_db_tokyotyrant -pkg_cloudi_service_db_tokyotyrant_commit = master - -PACKAGES += cloudi_service_filesystem -pkg_cloudi_service_filesystem_name = cloudi_service_filesystem -pkg_cloudi_service_filesystem_description = Filesystem CloudI Service -pkg_cloudi_service_filesystem_homepage = https://cloudi.org/ -pkg_cloudi_service_filesystem_fetch = git -pkg_cloudi_service_filesystem_repo = https://github.com/CloudI/cloudi_service_filesystem -pkg_cloudi_service_filesystem_commit = master - -PACKAGES += cloudi_service_http_client -pkg_cloudi_service_http_client_name = cloudi_service_http_client -pkg_cloudi_service_http_client_description = HTTP client CloudI Service -pkg_cloudi_service_http_client_homepage = https://cloudi.org/ -pkg_cloudi_service_http_client_fetch = git -pkg_cloudi_service_http_client_repo = https://github.com/CloudI/cloudi_service_http_client -pkg_cloudi_service_http_client_commit = master - -PACKAGES += cloudi_service_http_cowboy -pkg_cloudi_service_http_cowboy_name = cloudi_service_http_cowboy -pkg_cloudi_service_http_cowboy_description = cowboy HTTP/HTTPS CloudI Service -pkg_cloudi_service_http_cowboy_homepage = https://cloudi.org/ -pkg_cloudi_service_http_cowboy_fetch = git -pkg_cloudi_service_http_cowboy_repo = https://github.com/CloudI/cloudi_service_http_cowboy -pkg_cloudi_service_http_cowboy_commit = master - -PACKAGES += cloudi_service_http_elli -pkg_cloudi_service_http_elli_name = cloudi_service_http_elli -pkg_cloudi_service_http_elli_description = elli HTTP CloudI Service -pkg_cloudi_service_http_elli_homepage = https://cloudi.org/ -pkg_cloudi_service_http_elli_fetch = git -pkg_cloudi_service_http_elli_repo = https://github.com/CloudI/cloudi_service_http_elli -pkg_cloudi_service_http_elli_commit = master - -PACKAGES += cloudi_service_map_reduce -pkg_cloudi_service_map_reduce_name = cloudi_service_map_reduce -pkg_cloudi_service_map_reduce_description = Map/Reduce CloudI Service -pkg_cloudi_service_map_reduce_homepage = https://cloudi.org/ -pkg_cloudi_service_map_reduce_fetch = git -pkg_cloudi_service_map_reduce_repo = https://github.com/CloudI/cloudi_service_map_reduce -pkg_cloudi_service_map_reduce_commit = master - -PACKAGES += cloudi_service_oauth1 -pkg_cloudi_service_oauth1_name = cloudi_service_oauth1 -pkg_cloudi_service_oauth1_description = OAuth v1.0 CloudI Service -pkg_cloudi_service_oauth1_homepage = https://cloudi.org/ -pkg_cloudi_service_oauth1_fetch = git -pkg_cloudi_service_oauth1_repo = https://github.com/CloudI/cloudi_service_oauth1 -pkg_cloudi_service_oauth1_commit = master - -PACKAGES += cloudi_service_queue -pkg_cloudi_service_queue_name = cloudi_service_queue -pkg_cloudi_service_queue_description = Persistent Queue Service -pkg_cloudi_service_queue_homepage = https://cloudi.org/ -pkg_cloudi_service_queue_fetch = git -pkg_cloudi_service_queue_repo = https://github.com/CloudI/cloudi_service_queue -pkg_cloudi_service_queue_commit = master - -PACKAGES += cloudi_service_quorum -pkg_cloudi_service_quorum_name = cloudi_service_quorum -pkg_cloudi_service_quorum_description = CloudI Quorum Service -pkg_cloudi_service_quorum_homepage = https://cloudi.org/ -pkg_cloudi_service_quorum_fetch = git -pkg_cloudi_service_quorum_repo = https://github.com/CloudI/cloudi_service_quorum -pkg_cloudi_service_quorum_commit = master - -PACKAGES += cloudi_service_router -pkg_cloudi_service_router_name = cloudi_service_router -pkg_cloudi_service_router_description = CloudI Router Service -pkg_cloudi_service_router_homepage = https://cloudi.org/ -pkg_cloudi_service_router_fetch = git -pkg_cloudi_service_router_repo = https://github.com/CloudI/cloudi_service_router -pkg_cloudi_service_router_commit = master - -PACKAGES += cloudi_service_tcp -pkg_cloudi_service_tcp_name = cloudi_service_tcp -pkg_cloudi_service_tcp_description = TCP CloudI Service -pkg_cloudi_service_tcp_homepage = https://cloudi.org/ -pkg_cloudi_service_tcp_fetch = git -pkg_cloudi_service_tcp_repo = https://github.com/CloudI/cloudi_service_tcp -pkg_cloudi_service_tcp_commit = master - -PACKAGES += cloudi_service_timers -pkg_cloudi_service_timers_name = cloudi_service_timers -pkg_cloudi_service_timers_description = Timers CloudI Service -pkg_cloudi_service_timers_homepage = https://cloudi.org/ -pkg_cloudi_service_timers_fetch = git -pkg_cloudi_service_timers_repo = https://github.com/CloudI/cloudi_service_timers -pkg_cloudi_service_timers_commit = master - -PACKAGES += cloudi_service_udp -pkg_cloudi_service_udp_name = cloudi_service_udp -pkg_cloudi_service_udp_description = UDP CloudI Service -pkg_cloudi_service_udp_homepage = https://cloudi.org/ -pkg_cloudi_service_udp_fetch = git -pkg_cloudi_service_udp_repo = https://github.com/CloudI/cloudi_service_udp -pkg_cloudi_service_udp_commit = master - -PACKAGES += cloudi_service_validate -pkg_cloudi_service_validate_name = cloudi_service_validate -pkg_cloudi_service_validate_description = CloudI Validate Service -pkg_cloudi_service_validate_homepage = https://cloudi.org/ -pkg_cloudi_service_validate_fetch = git -pkg_cloudi_service_validate_repo = https://github.com/CloudI/cloudi_service_validate -pkg_cloudi_service_validate_commit = master - -PACKAGES += cloudi_service_zeromq -pkg_cloudi_service_zeromq_name = cloudi_service_zeromq -pkg_cloudi_service_zeromq_description = ZeroMQ CloudI Service -pkg_cloudi_service_zeromq_homepage = https://cloudi.org/ -pkg_cloudi_service_zeromq_fetch = git -pkg_cloudi_service_zeromq_repo = https://github.com/CloudI/cloudi_service_zeromq -pkg_cloudi_service_zeromq_commit = master - -PACKAGES += cluster_info -pkg_cluster_info_name = cluster_info -pkg_cluster_info_description = Fork of Hibari's nifty cluster_info OTP app -pkg_cluster_info_homepage = https://github.com/basho/cluster_info -pkg_cluster_info_fetch = git -pkg_cluster_info_repo = https://github.com/basho/cluster_info -pkg_cluster_info_commit = master - -PACKAGES += color -pkg_color_name = color -pkg_color_description = ANSI colors for your Erlang -pkg_color_homepage = https://github.com/julianduque/erlang-color -pkg_color_fetch = git -pkg_color_repo = https://github.com/julianduque/erlang-color -pkg_color_commit = master - -PACKAGES += confetti -pkg_confetti_name = confetti -pkg_confetti_description = Erlang configuration provider / application:get_env/2 on steroids -pkg_confetti_homepage = https://github.com/jtendo/confetti -pkg_confetti_fetch = git -pkg_confetti_repo = https://github.com/jtendo/confetti -pkg_confetti_commit = master - -PACKAGES += couchbeam -pkg_couchbeam_name = couchbeam -pkg_couchbeam_description = Apache CouchDB client in Erlang -pkg_couchbeam_homepage = https://github.com/benoitc/couchbeam -pkg_couchbeam_fetch = git -pkg_couchbeam_repo = https://github.com/benoitc/couchbeam -pkg_couchbeam_commit = master - -PACKAGES += covertool -pkg_covertool_name = covertool -pkg_covertool_description = Tool to convert Erlang cover data files into Cobertura XML reports -pkg_covertool_homepage = https://github.com/idubrov/covertool -pkg_covertool_fetch = git -pkg_covertool_repo = https://github.com/idubrov/covertool -pkg_covertool_commit = master - -PACKAGES += cowboy -pkg_cowboy_name = cowboy -pkg_cowboy_description = Small, fast and modular HTTP server. -pkg_cowboy_homepage = https://ninenines.eu -pkg_cowboy_fetch = git -pkg_cowboy_repo = https://github.com/ninenines/cowboy -pkg_cowboy_commit = 1.0.4 - -PACKAGES += cowdb -pkg_cowdb_name = cowdb -pkg_cowdb_description = Pure Key/Value database library for Erlang Applications -pkg_cowdb_homepage = https://github.com/refuge/cowdb -pkg_cowdb_fetch = git -pkg_cowdb_repo = https://github.com/refuge/cowdb -pkg_cowdb_commit = master - -PACKAGES += cowlib -pkg_cowlib_name = cowlib -pkg_cowlib_description = Support library for manipulating Web protocols. -pkg_cowlib_homepage = https://ninenines.eu -pkg_cowlib_fetch = git -pkg_cowlib_repo = https://github.com/ninenines/cowlib -pkg_cowlib_commit = 1.0.2 - -PACKAGES += cpg -pkg_cpg_name = cpg -pkg_cpg_description = CloudI Process Groups -pkg_cpg_homepage = https://github.com/okeuday/cpg -pkg_cpg_fetch = git -pkg_cpg_repo = https://github.com/okeuday/cpg -pkg_cpg_commit = master - -PACKAGES += cqerl -pkg_cqerl_name = cqerl -pkg_cqerl_description = Native Erlang CQL client for Cassandra -pkg_cqerl_homepage = https://matehat.github.io/cqerl/ -pkg_cqerl_fetch = git -pkg_cqerl_repo = https://github.com/matehat/cqerl -pkg_cqerl_commit = master - -PACKAGES += cr -pkg_cr_name = cr -pkg_cr_description = Chain Replication -pkg_cr_homepage = https://synrc.com/apps/cr/doc/cr.htm -pkg_cr_fetch = git -pkg_cr_repo = https://github.com/spawnproc/cr -pkg_cr_commit = master - -PACKAGES += cuttlefish -pkg_cuttlefish_name = cuttlefish -pkg_cuttlefish_description = never lose your childlike sense of wonder baby cuttlefish, promise me? -pkg_cuttlefish_homepage = https://github.com/basho/cuttlefish -pkg_cuttlefish_fetch = git -pkg_cuttlefish_repo = https://github.com/basho/cuttlefish -pkg_cuttlefish_commit = master - -PACKAGES += damocles -pkg_damocles_name = damocles -pkg_damocles_description = Erlang library for generating adversarial network conditions for QAing distributed applications/systems on a single Linux box. -pkg_damocles_homepage = https://github.com/lostcolony/damocles -pkg_damocles_fetch = git -pkg_damocles_repo = https://github.com/lostcolony/damocles -pkg_damocles_commit = master - -PACKAGES += debbie -pkg_debbie_name = debbie -pkg_debbie_description = .DEB Built In Erlang -pkg_debbie_homepage = https://github.com/crownedgrouse/debbie -pkg_debbie_fetch = git -pkg_debbie_repo = https://github.com/crownedgrouse/debbie -pkg_debbie_commit = master - -PACKAGES += decimal -pkg_decimal_name = decimal -pkg_decimal_description = An Erlang decimal arithmetic library -pkg_decimal_homepage = https://github.com/tim/erlang-decimal -pkg_decimal_fetch = git -pkg_decimal_repo = https://github.com/tim/erlang-decimal -pkg_decimal_commit = master - -PACKAGES += detergent -pkg_detergent_name = detergent -pkg_detergent_description = An emulsifying Erlang SOAP library -pkg_detergent_homepage = https://github.com/devinus/detergent -pkg_detergent_fetch = git -pkg_detergent_repo = https://github.com/devinus/detergent -pkg_detergent_commit = master - -PACKAGES += detest -pkg_detest_name = detest -pkg_detest_description = Tool for running tests on a cluster of erlang nodes -pkg_detest_homepage = https://github.com/biokoda/detest -pkg_detest_fetch = git -pkg_detest_repo = https://github.com/biokoda/detest -pkg_detest_commit = master - -PACKAGES += dh_date -pkg_dh_date_name = dh_date -pkg_dh_date_description = Date formatting / parsing library for erlang -pkg_dh_date_homepage = https://github.com/daleharvey/dh_date -pkg_dh_date_fetch = git -pkg_dh_date_repo = https://github.com/daleharvey/dh_date -pkg_dh_date_commit = master - -PACKAGES += dirbusterl -pkg_dirbusterl_name = dirbusterl -pkg_dirbusterl_description = DirBuster successor in Erlang -pkg_dirbusterl_homepage = https://github.com/silentsignal/DirBustErl -pkg_dirbusterl_fetch = git -pkg_dirbusterl_repo = https://github.com/silentsignal/DirBustErl -pkg_dirbusterl_commit = master - -PACKAGES += dispcount -pkg_dispcount_name = dispcount -pkg_dispcount_description = Erlang task dispatcher based on ETS counters. -pkg_dispcount_homepage = https://github.com/ferd/dispcount -pkg_dispcount_fetch = git -pkg_dispcount_repo = https://github.com/ferd/dispcount -pkg_dispcount_commit = master - -PACKAGES += dlhttpc -pkg_dlhttpc_name = dlhttpc -pkg_dlhttpc_description = dispcount-based lhttpc fork for massive amounts of requests to limited endpoints -pkg_dlhttpc_homepage = https://github.com/ferd/dlhttpc -pkg_dlhttpc_fetch = git -pkg_dlhttpc_repo = https://github.com/ferd/dlhttpc -pkg_dlhttpc_commit = master - -PACKAGES += dns -pkg_dns_name = dns -pkg_dns_description = Erlang DNS library -pkg_dns_homepage = https://github.com/aetrion/dns_erlang -pkg_dns_fetch = git -pkg_dns_repo = https://github.com/aetrion/dns_erlang -pkg_dns_commit = master - -PACKAGES += dnssd -pkg_dnssd_name = dnssd -pkg_dnssd_description = Erlang interface to Apple's Bonjour D NS Service Discovery implementation -pkg_dnssd_homepage = https://github.com/benoitc/dnssd_erlang -pkg_dnssd_fetch = git -pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang -pkg_dnssd_commit = master - -PACKAGES += dynamic_compile -pkg_dynamic_compile_name = dynamic_compile -pkg_dynamic_compile_description = compile and load erlang modules from string input -pkg_dynamic_compile_homepage = https://github.com/jkvor/dynamic_compile -pkg_dynamic_compile_fetch = git -pkg_dynamic_compile_repo = https://github.com/jkvor/dynamic_compile -pkg_dynamic_compile_commit = master - -PACKAGES += e2 -pkg_e2_name = e2 -pkg_e2_description = Library to simply writing correct OTP applications. -pkg_e2_homepage = http://e2project.org -pkg_e2_fetch = git -pkg_e2_repo = https://github.com/gar1t/e2 -pkg_e2_commit = master - -PACKAGES += eamf -pkg_eamf_name = eamf -pkg_eamf_description = eAMF provides Action Message Format (AMF) support for Erlang -pkg_eamf_homepage = https://github.com/mrinalwadhwa/eamf -pkg_eamf_fetch = git -pkg_eamf_repo = https://github.com/mrinalwadhwa/eamf -pkg_eamf_commit = master - -PACKAGES += eavro -pkg_eavro_name = eavro -pkg_eavro_description = Apache Avro encoder/decoder -pkg_eavro_homepage = https://github.com/SIfoxDevTeam/eavro -pkg_eavro_fetch = git -pkg_eavro_repo = https://github.com/SIfoxDevTeam/eavro -pkg_eavro_commit = master - -PACKAGES += ecapnp -pkg_ecapnp_name = ecapnp -pkg_ecapnp_description = Cap'n Proto library for Erlang -pkg_ecapnp_homepage = https://github.com/kaos/ecapnp -pkg_ecapnp_fetch = git -pkg_ecapnp_repo = https://github.com/kaos/ecapnp -pkg_ecapnp_commit = master - -PACKAGES += econfig -pkg_econfig_name = econfig -pkg_econfig_description = simple Erlang config handler using INI files -pkg_econfig_homepage = https://github.com/benoitc/econfig -pkg_econfig_fetch = git -pkg_econfig_repo = https://github.com/benoitc/econfig -pkg_econfig_commit = master - -PACKAGES += edate -pkg_edate_name = edate -pkg_edate_description = date manipulation library for erlang -pkg_edate_homepage = https://github.com/dweldon/edate -pkg_edate_fetch = git -pkg_edate_repo = https://github.com/dweldon/edate -pkg_edate_commit = master - -PACKAGES += edgar -pkg_edgar_name = edgar -pkg_edgar_description = Erlang Does GNU AR -pkg_edgar_homepage = https://github.com/crownedgrouse/edgar -pkg_edgar_fetch = git -pkg_edgar_repo = https://github.com/crownedgrouse/edgar -pkg_edgar_commit = master - -PACKAGES += edis -pkg_edis_name = edis -pkg_edis_description = An Erlang implementation of Redis KV Store -pkg_edis_homepage = https://inaka.github.com/edis/ -pkg_edis_fetch = git -pkg_edis_repo = https://github.com/inaka/edis -pkg_edis_commit = master - -PACKAGES += edns -pkg_edns_name = edns -pkg_edns_description = Erlang/OTP DNS server -pkg_edns_homepage = https://github.com/hcvst/erlang-dns -pkg_edns_fetch = git -pkg_edns_repo = https://github.com/hcvst/erlang-dns -pkg_edns_commit = master - -PACKAGES += edown -pkg_edown_name = edown -pkg_edown_description = EDoc extension for generating Github-flavored Markdown -pkg_edown_homepage = https://github.com/uwiger/edown -pkg_edown_fetch = git -pkg_edown_repo = https://github.com/uwiger/edown -pkg_edown_commit = master - -PACKAGES += eep -pkg_eep_name = eep -pkg_eep_description = Erlang Easy Profiling (eep) application provides a way to analyze application performance and call hierarchy -pkg_eep_homepage = https://github.com/virtan/eep -pkg_eep_fetch = git -pkg_eep_repo = https://github.com/virtan/eep -pkg_eep_commit = master - -PACKAGES += eep_app -pkg_eep_app_name = eep_app -pkg_eep_app_description = Embedded Event Processing -pkg_eep_app_homepage = https://github.com/darach/eep-erl -pkg_eep_app_fetch = git -pkg_eep_app_repo = https://github.com/darach/eep-erl -pkg_eep_app_commit = master - -PACKAGES += efene -pkg_efene_name = efene -pkg_efene_description = Alternative syntax for the Erlang Programming Language focusing on simplicity, ease of use and programmer UX -pkg_efene_homepage = https://github.com/efene/efene -pkg_efene_fetch = git -pkg_efene_repo = https://github.com/efene/efene -pkg_efene_commit = master - -PACKAGES += egeoip -pkg_egeoip_name = egeoip -pkg_egeoip_description = Erlang IP Geolocation module, currently supporting the MaxMind GeoLite City Database. -pkg_egeoip_homepage = https://github.com/mochi/egeoip -pkg_egeoip_fetch = git -pkg_egeoip_repo = https://github.com/mochi/egeoip -pkg_egeoip_commit = master - -PACKAGES += ehsa -pkg_ehsa_name = ehsa -pkg_ehsa_description = Erlang HTTP server basic and digest authentication modules -pkg_ehsa_homepage = https://bitbucket.org/a12n/ehsa -pkg_ehsa_fetch = hg -pkg_ehsa_repo = https://bitbucket.org/a12n/ehsa -pkg_ehsa_commit = default - -PACKAGES += ej -pkg_ej_name = ej -pkg_ej_description = Helper module for working with Erlang terms representing JSON -pkg_ej_homepage = https://github.com/seth/ej -pkg_ej_fetch = git -pkg_ej_repo = https://github.com/seth/ej -pkg_ej_commit = master - -PACKAGES += ejabberd -pkg_ejabberd_name = ejabberd -pkg_ejabberd_description = Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform -pkg_ejabberd_homepage = https://github.com/processone/ejabberd -pkg_ejabberd_fetch = git -pkg_ejabberd_repo = https://github.com/processone/ejabberd -pkg_ejabberd_commit = master - -PACKAGES += ejwt -pkg_ejwt_name = ejwt -pkg_ejwt_description = erlang library for JSON Web Token -pkg_ejwt_homepage = https://github.com/artefactop/ejwt -pkg_ejwt_fetch = git -pkg_ejwt_repo = https://github.com/artefactop/ejwt -pkg_ejwt_commit = master - -PACKAGES += ekaf -pkg_ekaf_name = ekaf -pkg_ekaf_description = A minimal, high-performance Kafka client in Erlang. -pkg_ekaf_homepage = https://github.com/helpshift/ekaf -pkg_ekaf_fetch = git -pkg_ekaf_repo = https://github.com/helpshift/ekaf -pkg_ekaf_commit = master - -PACKAGES += elarm -pkg_elarm_name = elarm -pkg_elarm_description = Alarm Manager for Erlang. -pkg_elarm_homepage = https://github.com/esl/elarm -pkg_elarm_fetch = git -pkg_elarm_repo = https://github.com/esl/elarm -pkg_elarm_commit = master - -PACKAGES += eleveldb -pkg_eleveldb_name = eleveldb -pkg_eleveldb_description = Erlang LevelDB API -pkg_eleveldb_homepage = https://github.com/basho/eleveldb -pkg_eleveldb_fetch = git -pkg_eleveldb_repo = https://github.com/basho/eleveldb -pkg_eleveldb_commit = master - -PACKAGES += elixir -pkg_elixir_name = elixir -pkg_elixir_description = Elixir is a dynamic, functional language designed for building scalable and maintainable applications -pkg_elixir_homepage = https://elixir-lang.org/ -pkg_elixir_fetch = git -pkg_elixir_repo = https://github.com/elixir-lang/elixir -pkg_elixir_commit = master - -PACKAGES += elli -pkg_elli_name = elli -pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli -pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli -pkg_elli_commit = master - -PACKAGES += elvis -pkg_elvis_name = elvis -pkg_elvis_description = Erlang Style Reviewer -pkg_elvis_homepage = https://github.com/inaka/elvis -pkg_elvis_fetch = git -pkg_elvis_repo = https://github.com/inaka/elvis -pkg_elvis_commit = master - -PACKAGES += emagick -pkg_emagick_name = emagick -pkg_emagick_description = Wrapper for Graphics/ImageMagick command line tool. -pkg_emagick_homepage = https://github.com/kivra/emagick -pkg_emagick_fetch = git -pkg_emagick_repo = https://github.com/kivra/emagick -pkg_emagick_commit = master - -PACKAGES += emysql -pkg_emysql_name = emysql -pkg_emysql_description = Stable, pure Erlang MySQL driver. -pkg_emysql_homepage = https://github.com/Eonblast/Emysql -pkg_emysql_fetch = git -pkg_emysql_repo = https://github.com/Eonblast/Emysql -pkg_emysql_commit = master - -PACKAGES += enm -pkg_enm_name = enm -pkg_enm_description = Erlang driver for nanomsg -pkg_enm_homepage = https://github.com/basho/enm -pkg_enm_fetch = git -pkg_enm_repo = https://github.com/basho/enm -pkg_enm_commit = master - -PACKAGES += entop -pkg_entop_name = entop -pkg_entop_description = A top-like tool for monitoring an Erlang node -pkg_entop_homepage = https://github.com/mazenharake/entop -pkg_entop_fetch = git -pkg_entop_repo = https://github.com/mazenharake/entop -pkg_entop_commit = master - -PACKAGES += epcap -pkg_epcap_name = epcap -pkg_epcap_description = Erlang packet capture interface using pcap -pkg_epcap_homepage = https://github.com/msantos/epcap -pkg_epcap_fetch = git -pkg_epcap_repo = https://github.com/msantos/epcap -pkg_epcap_commit = master - -PACKAGES += eper -pkg_eper_name = eper -pkg_eper_description = Erlang performance and debugging tools. -pkg_eper_homepage = https://github.com/massemanet/eper -pkg_eper_fetch = git -pkg_eper_repo = https://github.com/massemanet/eper -pkg_eper_commit = master - -PACKAGES += epgsql -pkg_epgsql_name = epgsql -pkg_epgsql_description = Erlang PostgreSQL client library. -pkg_epgsql_homepage = https://github.com/epgsql/epgsql -pkg_epgsql_fetch = git -pkg_epgsql_repo = https://github.com/epgsql/epgsql -pkg_epgsql_commit = master - -PACKAGES += episcina -pkg_episcina_name = episcina -pkg_episcina_description = A simple non intrusive resource pool for connections -pkg_episcina_homepage = https://github.com/erlware/episcina -pkg_episcina_fetch = git -pkg_episcina_repo = https://github.com/erlware/episcina -pkg_episcina_commit = master - -PACKAGES += eplot -pkg_eplot_name = eplot -pkg_eplot_description = A plot engine written in erlang. -pkg_eplot_homepage = https://github.com/psyeugenic/eplot -pkg_eplot_fetch = git -pkg_eplot_repo = https://github.com/psyeugenic/eplot -pkg_eplot_commit = master - -PACKAGES += epocxy -pkg_epocxy_name = epocxy -pkg_epocxy_description = Erlang Patterns of Concurrency -pkg_epocxy_homepage = https://github.com/duomark/epocxy -pkg_epocxy_fetch = git -pkg_epocxy_repo = https://github.com/duomark/epocxy -pkg_epocxy_commit = master - -PACKAGES += epubnub -pkg_epubnub_name = epubnub -pkg_epubnub_description = Erlang PubNub API -pkg_epubnub_homepage = https://github.com/tsloughter/epubnub -pkg_epubnub_fetch = git -pkg_epubnub_repo = https://github.com/tsloughter/epubnub -pkg_epubnub_commit = master - -PACKAGES += eqm -pkg_eqm_name = eqm -pkg_eqm_description = Erlang pub sub with supply-demand channels -pkg_eqm_homepage = https://github.com/loucash/eqm -pkg_eqm_fetch = git -pkg_eqm_repo = https://github.com/loucash/eqm -pkg_eqm_commit = master - -PACKAGES += eredis -pkg_eredis_name = eredis -pkg_eredis_description = Erlang Redis client -pkg_eredis_homepage = https://github.com/wooga/eredis -pkg_eredis_fetch = git -pkg_eredis_repo = https://github.com/wooga/eredis -pkg_eredis_commit = master - -PACKAGES += eredis_pool -pkg_eredis_pool_name = eredis_pool -pkg_eredis_pool_description = eredis_pool is Pool of Redis clients, using eredis and poolboy. -pkg_eredis_pool_homepage = https://github.com/hiroeorz/eredis_pool -pkg_eredis_pool_fetch = git -pkg_eredis_pool_repo = https://github.com/hiroeorz/eredis_pool -pkg_eredis_pool_commit = master - -PACKAGES += erl_streams -pkg_erl_streams_name = erl_streams -pkg_erl_streams_description = Streams in Erlang -pkg_erl_streams_homepage = https://github.com/epappas/erl_streams -pkg_erl_streams_fetch = git -pkg_erl_streams_repo = https://github.com/epappas/erl_streams -pkg_erl_streams_commit = master - -PACKAGES += erlang_cep -pkg_erlang_cep_name = erlang_cep -pkg_erlang_cep_description = A basic CEP package written in erlang -pkg_erlang_cep_homepage = https://github.com/danmacklin/erlang_cep -pkg_erlang_cep_fetch = git -pkg_erlang_cep_repo = https://github.com/danmacklin/erlang_cep -pkg_erlang_cep_commit = master - -PACKAGES += erlang_js -pkg_erlang_js_name = erlang_js -pkg_erlang_js_description = A linked-in driver for Erlang to Mozilla's Spidermonkey Javascript runtime. -pkg_erlang_js_homepage = https://github.com/basho/erlang_js -pkg_erlang_js_fetch = git -pkg_erlang_js_repo = https://github.com/basho/erlang_js -pkg_erlang_js_commit = master - -PACKAGES += erlang_localtime -pkg_erlang_localtime_name = erlang_localtime -pkg_erlang_localtime_description = Erlang library for conversion from one local time to another -pkg_erlang_localtime_homepage = https://github.com/dmitryme/erlang_localtime -pkg_erlang_localtime_fetch = git -pkg_erlang_localtime_repo = https://github.com/dmitryme/erlang_localtime -pkg_erlang_localtime_commit = master - -PACKAGES += erlang_smtp -pkg_erlang_smtp_name = erlang_smtp -pkg_erlang_smtp_description = Erlang SMTP and POP3 server code. -pkg_erlang_smtp_homepage = https://github.com/tonyg/erlang-smtp -pkg_erlang_smtp_fetch = git -pkg_erlang_smtp_repo = https://github.com/tonyg/erlang-smtp -pkg_erlang_smtp_commit = master - -PACKAGES += erlang_term -pkg_erlang_term_name = erlang_term -pkg_erlang_term_description = Erlang Term Info -pkg_erlang_term_homepage = https://github.com/okeuday/erlang_term -pkg_erlang_term_fetch = git -pkg_erlang_term_repo = https://github.com/okeuday/erlang_term -pkg_erlang_term_commit = master - -PACKAGES += erlastic_search -pkg_erlastic_search_name = erlastic_search -pkg_erlastic_search_description = An Erlang app for communicating with Elastic Search's rest interface. -pkg_erlastic_search_homepage = https://github.com/tsloughter/erlastic_search -pkg_erlastic_search_fetch = git -pkg_erlastic_search_repo = https://github.com/tsloughter/erlastic_search -pkg_erlastic_search_commit = master - -PACKAGES += erlasticsearch -pkg_erlasticsearch_name = erlasticsearch -pkg_erlasticsearch_description = Erlang thrift interface to elastic_search -pkg_erlasticsearch_homepage = https://github.com/dieswaytoofast/erlasticsearch -pkg_erlasticsearch_fetch = git -pkg_erlasticsearch_repo = https://github.com/dieswaytoofast/erlasticsearch -pkg_erlasticsearch_commit = master - -PACKAGES += erlbrake -pkg_erlbrake_name = erlbrake -pkg_erlbrake_description = Erlang Airbrake notification client -pkg_erlbrake_homepage = https://github.com/kenpratt/erlbrake -pkg_erlbrake_fetch = git -pkg_erlbrake_repo = https://github.com/kenpratt/erlbrake -pkg_erlbrake_commit = master - -PACKAGES += erlcloud -pkg_erlcloud_name = erlcloud -pkg_erlcloud_description = Cloud Computing library for erlang (Amazon EC2, S3, SQS, SimpleDB, Mechanical Turk, ELB) -pkg_erlcloud_homepage = https://github.com/gleber/erlcloud -pkg_erlcloud_fetch = git -pkg_erlcloud_repo = https://github.com/gleber/erlcloud -pkg_erlcloud_commit = master - -PACKAGES += erlcron -pkg_erlcron_name = erlcron -pkg_erlcron_description = Erlang cronish system -pkg_erlcron_homepage = https://github.com/erlware/erlcron -pkg_erlcron_fetch = git -pkg_erlcron_repo = https://github.com/erlware/erlcron -pkg_erlcron_commit = master - -PACKAGES += erldb -pkg_erldb_name = erldb -pkg_erldb_description = ORM (Object-relational mapping) application implemented in Erlang -pkg_erldb_homepage = https://erldb.org -pkg_erldb_fetch = git -pkg_erldb_repo = https://github.com/erldb/erldb -pkg_erldb_commit = master - -PACKAGES += erldis -pkg_erldis_name = erldis -pkg_erldis_description = redis erlang client library -pkg_erldis_homepage = https://github.com/cstar/erldis -pkg_erldis_fetch = git -pkg_erldis_repo = https://github.com/cstar/erldis -pkg_erldis_commit = master - -PACKAGES += erldns -pkg_erldns_name = erldns -pkg_erldns_description = DNS server, in erlang. -pkg_erldns_homepage = https://github.com/aetrion/erl-dns -pkg_erldns_fetch = git -pkg_erldns_repo = https://github.com/aetrion/erl-dns -pkg_erldns_commit = master - -PACKAGES += erldocker -pkg_erldocker_name = erldocker -pkg_erldocker_description = Docker Remote API client for Erlang -pkg_erldocker_homepage = https://github.com/proger/erldocker -pkg_erldocker_fetch = git -pkg_erldocker_repo = https://github.com/proger/erldocker -pkg_erldocker_commit = master - -PACKAGES += erlfsmon -pkg_erlfsmon_name = erlfsmon -pkg_erlfsmon_description = Erlang filesystem event watcher for Linux and OSX -pkg_erlfsmon_homepage = https://github.com/proger/erlfsmon -pkg_erlfsmon_fetch = git -pkg_erlfsmon_repo = https://github.com/proger/erlfsmon -pkg_erlfsmon_commit = master - -PACKAGES += erlgit -pkg_erlgit_name = erlgit -pkg_erlgit_description = Erlang convenience wrapper around git executable -pkg_erlgit_homepage = https://github.com/gleber/erlgit -pkg_erlgit_fetch = git -pkg_erlgit_repo = https://github.com/gleber/erlgit -pkg_erlgit_commit = master - -PACKAGES += erlguten -pkg_erlguten_name = erlguten -pkg_erlguten_description = ErlGuten is a system for high-quality typesetting, written purely in Erlang. -pkg_erlguten_homepage = https://github.com/richcarl/erlguten -pkg_erlguten_fetch = git -pkg_erlguten_repo = https://github.com/richcarl/erlguten -pkg_erlguten_commit = master - -PACKAGES += erlmc -pkg_erlmc_name = erlmc -pkg_erlmc_description = Erlang memcached binary protocol client -pkg_erlmc_homepage = https://github.com/jkvor/erlmc -pkg_erlmc_fetch = git -pkg_erlmc_repo = https://github.com/jkvor/erlmc -pkg_erlmc_commit = master - -PACKAGES += erlmongo -pkg_erlmongo_name = erlmongo -pkg_erlmongo_description = Record based Erlang driver for MongoDB with gridfs support -pkg_erlmongo_homepage = https://github.com/SergejJurecko/erlmongo -pkg_erlmongo_fetch = git -pkg_erlmongo_repo = https://github.com/SergejJurecko/erlmongo -pkg_erlmongo_commit = master - -PACKAGES += erlog -pkg_erlog_name = erlog -pkg_erlog_description = Prolog interpreter in and for Erlang -pkg_erlog_homepage = https://github.com/rvirding/erlog -pkg_erlog_fetch = git -pkg_erlog_repo = https://github.com/rvirding/erlog -pkg_erlog_commit = master - -PACKAGES += erlpass -pkg_erlpass_name = erlpass -pkg_erlpass_description = A library to handle password hashing and changing in a safe manner, independent from any kind of storage whatsoever. -pkg_erlpass_homepage = https://github.com/ferd/erlpass -pkg_erlpass_fetch = git -pkg_erlpass_repo = https://github.com/ferd/erlpass -pkg_erlpass_commit = master - -PACKAGES += erlport -pkg_erlport_name = erlport -pkg_erlport_description = ErlPort - connect Erlang to other languages -pkg_erlport_homepage = https://github.com/hdima/erlport -pkg_erlport_fetch = git -pkg_erlport_repo = https://github.com/hdima/erlport -pkg_erlport_commit = master - -PACKAGES += erlsh -pkg_erlsh_name = erlsh -pkg_erlsh_description = Erlang shell tools -pkg_erlsh_homepage = https://github.com/proger/erlsh -pkg_erlsh_fetch = git -pkg_erlsh_repo = https://github.com/proger/erlsh -pkg_erlsh_commit = master - -PACKAGES += erlsha2 -pkg_erlsha2_name = erlsha2 -pkg_erlsha2_description = SHA-224, SHA-256, SHA-384, SHA-512 implemented in Erlang NIFs. -pkg_erlsha2_homepage = https://github.com/vinoski/erlsha2 -pkg_erlsha2_fetch = git -pkg_erlsha2_repo = https://github.com/vinoski/erlsha2 -pkg_erlsha2_commit = master - -PACKAGES += erlsom -pkg_erlsom_name = erlsom -pkg_erlsom_description = XML parser for Erlang -pkg_erlsom_homepage = https://github.com/willemdj/erlsom -pkg_erlsom_fetch = git -pkg_erlsom_repo = https://github.com/willemdj/erlsom -pkg_erlsom_commit = master - -PACKAGES += erlubi -pkg_erlubi_name = erlubi -pkg_erlubi_description = Ubigraph Erlang Client (and Process Visualizer) -pkg_erlubi_homepage = https://github.com/krestenkrab/erlubi -pkg_erlubi_fetch = git -pkg_erlubi_repo = https://github.com/krestenkrab/erlubi -pkg_erlubi_commit = master - -PACKAGES += erlvolt -pkg_erlvolt_name = erlvolt -pkg_erlvolt_description = VoltDB Erlang Client Driver -pkg_erlvolt_homepage = https://github.com/VoltDB/voltdb-client-erlang -pkg_erlvolt_fetch = git -pkg_erlvolt_repo = https://github.com/VoltDB/voltdb-client-erlang -pkg_erlvolt_commit = master - -PACKAGES += erlware_commons -pkg_erlware_commons_name = erlware_commons -pkg_erlware_commons_description = Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components. -pkg_erlware_commons_homepage = https://github.com/erlware/erlware_commons -pkg_erlware_commons_fetch = git -pkg_erlware_commons_repo = https://github.com/erlware/erlware_commons -pkg_erlware_commons_commit = master - -PACKAGES += erlydtl -pkg_erlydtl_name = erlydtl -pkg_erlydtl_description = Django Template Language for Erlang. -pkg_erlydtl_homepage = https://github.com/erlydtl/erlydtl -pkg_erlydtl_fetch = git -pkg_erlydtl_repo = https://github.com/erlydtl/erlydtl -pkg_erlydtl_commit = master - -PACKAGES += errd -pkg_errd_name = errd -pkg_errd_description = Erlang RRDTool library -pkg_errd_homepage = https://github.com/archaelus/errd -pkg_errd_fetch = git -pkg_errd_repo = https://github.com/archaelus/errd -pkg_errd_commit = master - -PACKAGES += erserve -pkg_erserve_name = erserve -pkg_erserve_description = Erlang/Rserve communication interface -pkg_erserve_homepage = https://github.com/del/erserve -pkg_erserve_fetch = git -pkg_erserve_repo = https://github.com/del/erserve -pkg_erserve_commit = master - -PACKAGES += erwa -pkg_erwa_name = erwa -pkg_erwa_description = A WAMP router and client written in Erlang. -pkg_erwa_homepage = https://github.com/bwegh/erwa -pkg_erwa_fetch = git -pkg_erwa_repo = https://github.com/bwegh/erwa -pkg_erwa_commit = master - -PACKAGES += escalus -pkg_escalus_name = escalus -pkg_escalus_description = An XMPP client library in Erlang for conveniently testing XMPP servers -pkg_escalus_homepage = https://github.com/esl/escalus -pkg_escalus_fetch = git -pkg_escalus_repo = https://github.com/esl/escalus -pkg_escalus_commit = master - -PACKAGES += espec -pkg_espec_name = espec -pkg_espec_description = ESpec: Behaviour driven development framework for Erlang -pkg_espec_homepage = https://github.com/lucaspiller/espec -pkg_espec_fetch = git -pkg_espec_repo = https://github.com/lucaspiller/espec -pkg_espec_commit = master - -PACKAGES += estatsd -pkg_estatsd_name = estatsd -pkg_estatsd_description = Erlang stats aggregation app that periodically flushes data to graphite -pkg_estatsd_homepage = https://github.com/RJ/estatsd -pkg_estatsd_fetch = git -pkg_estatsd_repo = https://github.com/RJ/estatsd -pkg_estatsd_commit = master - -PACKAGES += etap -pkg_etap_name = etap -pkg_etap_description = etap is a simple erlang testing library that provides TAP compliant output. -pkg_etap_homepage = https://github.com/ngerakines/etap -pkg_etap_fetch = git -pkg_etap_repo = https://github.com/ngerakines/etap -pkg_etap_commit = master - -PACKAGES += etest -pkg_etest_name = etest -pkg_etest_description = A lightweight, convention over configuration test framework for Erlang -pkg_etest_homepage = https://github.com/wooga/etest -pkg_etest_fetch = git -pkg_etest_repo = https://github.com/wooga/etest -pkg_etest_commit = master - -PACKAGES += etest_http -pkg_etest_http_name = etest_http -pkg_etest_http_description = etest Assertions around HTTP (client-side) -pkg_etest_http_homepage = https://github.com/wooga/etest_http -pkg_etest_http_fetch = git -pkg_etest_http_repo = https://github.com/wooga/etest_http -pkg_etest_http_commit = master - -PACKAGES += etoml -pkg_etoml_name = etoml -pkg_etoml_description = TOML language erlang parser -pkg_etoml_homepage = https://github.com/kalta/etoml -pkg_etoml_fetch = git -pkg_etoml_repo = https://github.com/kalta/etoml -pkg_etoml_commit = master - -PACKAGES += eunit -pkg_eunit_name = eunit -pkg_eunit_description = The EUnit lightweight unit testing framework for Erlang - this is the canonical development repository. -pkg_eunit_homepage = https://github.com/richcarl/eunit -pkg_eunit_fetch = git -pkg_eunit_repo = https://github.com/richcarl/eunit -pkg_eunit_commit = master - -PACKAGES += eunit_formatters -pkg_eunit_formatters_name = eunit_formatters -pkg_eunit_formatters_description = Because eunit's output sucks. Let's make it better. -pkg_eunit_formatters_homepage = https://github.com/seancribbs/eunit_formatters -pkg_eunit_formatters_fetch = git -pkg_eunit_formatters_repo = https://github.com/seancribbs/eunit_formatters -pkg_eunit_formatters_commit = master - -PACKAGES += euthanasia -pkg_euthanasia_name = euthanasia -pkg_euthanasia_description = Merciful killer for your Erlang processes -pkg_euthanasia_homepage = https://github.com/doubleyou/euthanasia -pkg_euthanasia_fetch = git -pkg_euthanasia_repo = https://github.com/doubleyou/euthanasia -pkg_euthanasia_commit = master - -PACKAGES += evum -pkg_evum_name = evum -pkg_evum_description = Spawn Linux VMs as Erlang processes in the Erlang VM -pkg_evum_homepage = https://github.com/msantos/evum -pkg_evum_fetch = git -pkg_evum_repo = https://github.com/msantos/evum -pkg_evum_commit = master - -PACKAGES += exec -pkg_exec_name = erlexec -pkg_exec_description = Execute and control OS processes from Erlang/OTP. -pkg_exec_homepage = https://saleyn.github.com/erlexec -pkg_exec_fetch = git -pkg_exec_repo = https://github.com/saleyn/erlexec -pkg_exec_commit = master - -PACKAGES += exml -pkg_exml_name = exml -pkg_exml_description = XML parsing library in Erlang -pkg_exml_homepage = https://github.com/paulgray/exml -pkg_exml_fetch = git -pkg_exml_repo = https://github.com/paulgray/exml -pkg_exml_commit = master - -PACKAGES += exometer -pkg_exometer_name = exometer -pkg_exometer_description = Basic measurement objects and probe behavior -pkg_exometer_homepage = https://github.com/Feuerlabs/exometer -pkg_exometer_fetch = git -pkg_exometer_repo = https://github.com/Feuerlabs/exometer -pkg_exometer_commit = master - -PACKAGES += exs1024 -pkg_exs1024_name = exs1024 -pkg_exs1024_description = Xorshift1024star pseudo random number generator for Erlang. -pkg_exs1024_homepage = https://github.com/jj1bdx/exs1024 -pkg_exs1024_fetch = git -pkg_exs1024_repo = https://github.com/jj1bdx/exs1024 -pkg_exs1024_commit = master - -PACKAGES += exs64 -pkg_exs64_name = exs64 -pkg_exs64_description = Xorshift64star pseudo random number generator for Erlang. -pkg_exs64_homepage = https://github.com/jj1bdx/exs64 -pkg_exs64_fetch = git -pkg_exs64_repo = https://github.com/jj1bdx/exs64 -pkg_exs64_commit = master - -PACKAGES += exsplus116 -pkg_exsplus116_name = exsplus116 -pkg_exsplus116_description = Xorshift116plus for Erlang -pkg_exsplus116_homepage = https://github.com/jj1bdx/exsplus116 -pkg_exsplus116_fetch = git -pkg_exsplus116_repo = https://github.com/jj1bdx/exsplus116 -pkg_exsplus116_commit = master - -PACKAGES += exsplus128 -pkg_exsplus128_name = exsplus128 -pkg_exsplus128_description = Xorshift128plus pseudo random number generator for Erlang. -pkg_exsplus128_homepage = https://github.com/jj1bdx/exsplus128 -pkg_exsplus128_fetch = git -pkg_exsplus128_repo = https://github.com/jj1bdx/exsplus128 -pkg_exsplus128_commit = master - -PACKAGES += ezmq -pkg_ezmq_name = ezmq -pkg_ezmq_description = zMQ implemented in Erlang -pkg_ezmq_homepage = https://github.com/RoadRunnr/ezmq -pkg_ezmq_fetch = git -pkg_ezmq_repo = https://github.com/RoadRunnr/ezmq -pkg_ezmq_commit = master - -PACKAGES += ezmtp -pkg_ezmtp_name = ezmtp -pkg_ezmtp_description = ZMTP protocol in pure Erlang. -pkg_ezmtp_homepage = https://github.com/a13x/ezmtp -pkg_ezmtp_fetch = git -pkg_ezmtp_repo = https://github.com/a13x/ezmtp -pkg_ezmtp_commit = master - -PACKAGES += fast_disk_log -pkg_fast_disk_log_name = fast_disk_log -pkg_fast_disk_log_description = Pool-based asynchronous Erlang disk logger -pkg_fast_disk_log_homepage = https://github.com/lpgauth/fast_disk_log -pkg_fast_disk_log_fetch = git -pkg_fast_disk_log_repo = https://github.com/lpgauth/fast_disk_log -pkg_fast_disk_log_commit = master - -PACKAGES += feeder -pkg_feeder_name = feeder -pkg_feeder_description = Stream parse RSS and Atom formatted XML feeds. -pkg_feeder_homepage = https://github.com/michaelnisi/feeder -pkg_feeder_fetch = git -pkg_feeder_repo = https://github.com/michaelnisi/feeder -pkg_feeder_commit = master - -PACKAGES += find_crate -pkg_find_crate_name = find_crate -pkg_find_crate_description = Find Rust libs and exes in Erlang application priv directory -pkg_find_crate_homepage = https://github.com/goertzenator/find_crate -pkg_find_crate_fetch = git -pkg_find_crate_repo = https://github.com/goertzenator/find_crate -pkg_find_crate_commit = master - -PACKAGES += fix -pkg_fix_name = fix -pkg_fix_description = https://fixtrading.org implementation. -pkg_fix_homepage = https://github.com/maxlapshin/fix -pkg_fix_fetch = git -pkg_fix_repo = https://github.com/maxlapshin/fix -pkg_fix_commit = master - -PACKAGES += flower -pkg_flower_name = flower -pkg_flower_description = FlowER - a Erlang OpenFlow development platform -pkg_flower_homepage = https://github.com/travelping/flower -pkg_flower_fetch = git -pkg_flower_repo = https://github.com/travelping/flower -pkg_flower_commit = master - -PACKAGES += fn -pkg_fn_name = fn -pkg_fn_description = Function utilities for Erlang -pkg_fn_homepage = https://github.com/reiddraper/fn -pkg_fn_fetch = git -pkg_fn_repo = https://github.com/reiddraper/fn -pkg_fn_commit = master - -PACKAGES += folsom -pkg_folsom_name = folsom -pkg_folsom_description = Expose Erlang Events and Metrics -pkg_folsom_homepage = https://github.com/boundary/folsom -pkg_folsom_fetch = git -pkg_folsom_repo = https://github.com/boundary/folsom -pkg_folsom_commit = master - -PACKAGES += folsom_cowboy -pkg_folsom_cowboy_name = folsom_cowboy -pkg_folsom_cowboy_description = A Cowboy based Folsom HTTP Wrapper. -pkg_folsom_cowboy_homepage = https://github.com/boundary/folsom_cowboy -pkg_folsom_cowboy_fetch = git -pkg_folsom_cowboy_repo = https://github.com/boundary/folsom_cowboy -pkg_folsom_cowboy_commit = master - -PACKAGES += folsomite -pkg_folsomite_name = folsomite -pkg_folsomite_description = blow up your graphite / riemann server with folsom metrics -pkg_folsomite_homepage = https://github.com/campanja/folsomite -pkg_folsomite_fetch = git -pkg_folsomite_repo = https://github.com/campanja/folsomite -pkg_folsomite_commit = master - -PACKAGES += fs -pkg_fs_name = fs -pkg_fs_description = Erlang FileSystem Listener -pkg_fs_homepage = https://github.com/synrc/fs -pkg_fs_fetch = git -pkg_fs_repo = https://github.com/synrc/fs -pkg_fs_commit = master - -PACKAGES += fuse -pkg_fuse_name = fuse -pkg_fuse_description = A Circuit Breaker for Erlang -pkg_fuse_homepage = https://github.com/jlouis/fuse -pkg_fuse_fetch = git -pkg_fuse_repo = https://github.com/jlouis/fuse -pkg_fuse_commit = master - -PACKAGES += gcm -pkg_gcm_name = gcm -pkg_gcm_description = An Erlang application for Google Cloud Messaging -pkg_gcm_homepage = https://github.com/pdincau/gcm-erlang -pkg_gcm_fetch = git -pkg_gcm_repo = https://github.com/pdincau/gcm-erlang -pkg_gcm_commit = master - -PACKAGES += gcprof -pkg_gcprof_name = gcprof -pkg_gcprof_description = Garbage Collection profiler for Erlang -pkg_gcprof_homepage = https://github.com/knutin/gcprof -pkg_gcprof_fetch = git -pkg_gcprof_repo = https://github.com/knutin/gcprof -pkg_gcprof_commit = master - -PACKAGES += geas -pkg_geas_name = geas -pkg_geas_description = Guess Erlang Application Scattering -pkg_geas_homepage = https://github.com/crownedgrouse/geas -pkg_geas_fetch = git -pkg_geas_repo = https://github.com/crownedgrouse/geas -pkg_geas_commit = master - -PACKAGES += geef -pkg_geef_name = geef -pkg_geef_description = Git NEEEEF (Erlang NIF) -pkg_geef_homepage = https://github.com/carlosmn/geef -pkg_geef_fetch = git -pkg_geef_repo = https://github.com/carlosmn/geef -pkg_geef_commit = master - -PACKAGES += gen_coap -pkg_gen_coap_name = gen_coap -pkg_gen_coap_description = Generic Erlang CoAP Client/Server -pkg_gen_coap_homepage = https://github.com/gotthardp/gen_coap -pkg_gen_coap_fetch = git -pkg_gen_coap_repo = https://github.com/gotthardp/gen_coap -pkg_gen_coap_commit = master - -PACKAGES += gen_cycle -pkg_gen_cycle_name = gen_cycle -pkg_gen_cycle_description = Simple, generic OTP behaviour for recurring tasks -pkg_gen_cycle_homepage = https://github.com/aerosol/gen_cycle -pkg_gen_cycle_fetch = git -pkg_gen_cycle_repo = https://github.com/aerosol/gen_cycle -pkg_gen_cycle_commit = develop - -PACKAGES += gen_icmp -pkg_gen_icmp_name = gen_icmp -pkg_gen_icmp_description = Erlang interface to ICMP sockets -pkg_gen_icmp_homepage = https://github.com/msantos/gen_icmp -pkg_gen_icmp_fetch = git -pkg_gen_icmp_repo = https://github.com/msantos/gen_icmp -pkg_gen_icmp_commit = master - -PACKAGES += gen_leader -pkg_gen_leader_name = gen_leader -pkg_gen_leader_description = leader election behavior -pkg_gen_leader_homepage = https://github.com/garret-smith/gen_leader_revival -pkg_gen_leader_fetch = git -pkg_gen_leader_repo = https://github.com/garret-smith/gen_leader_revival -pkg_gen_leader_commit = master - -PACKAGES += gen_nb_server -pkg_gen_nb_server_name = gen_nb_server -pkg_gen_nb_server_description = OTP behavior for writing non-blocking servers -pkg_gen_nb_server_homepage = https://github.com/kevsmith/gen_nb_server -pkg_gen_nb_server_fetch = git -pkg_gen_nb_server_repo = https://github.com/kevsmith/gen_nb_server -pkg_gen_nb_server_commit = master - -PACKAGES += gen_paxos -pkg_gen_paxos_name = gen_paxos -pkg_gen_paxos_description = An Erlang/OTP-style implementation of the PAXOS distributed consensus protocol -pkg_gen_paxos_homepage = https://github.com/gburd/gen_paxos -pkg_gen_paxos_fetch = git -pkg_gen_paxos_repo = https://github.com/gburd/gen_paxos -pkg_gen_paxos_commit = master - -PACKAGES += gen_rpc -pkg_gen_rpc_name = gen_rpc -pkg_gen_rpc_description = A scalable RPC library for Erlang-VM based languages -pkg_gen_rpc_homepage = https://github.com/priestjim/gen_rpc.git -pkg_gen_rpc_fetch = git -pkg_gen_rpc_repo = https://github.com/priestjim/gen_rpc.git -pkg_gen_rpc_commit = master - -PACKAGES += gen_smtp -pkg_gen_smtp_name = gen_smtp -pkg_gen_smtp_description = A generic Erlang SMTP server and client that can be extended via callback modules -pkg_gen_smtp_homepage = https://github.com/Vagabond/gen_smtp -pkg_gen_smtp_fetch = git -pkg_gen_smtp_repo = https://github.com/Vagabond/gen_smtp -pkg_gen_smtp_commit = master - -PACKAGES += gen_tracker -pkg_gen_tracker_name = gen_tracker -pkg_gen_tracker_description = supervisor with ets handling of children and their metadata -pkg_gen_tracker_homepage = https://github.com/erlyvideo/gen_tracker -pkg_gen_tracker_fetch = git -pkg_gen_tracker_repo = https://github.com/erlyvideo/gen_tracker -pkg_gen_tracker_commit = master - -PACKAGES += gen_unix -pkg_gen_unix_name = gen_unix -pkg_gen_unix_description = Erlang Unix socket interface -pkg_gen_unix_homepage = https://github.com/msantos/gen_unix -pkg_gen_unix_fetch = git -pkg_gen_unix_repo = https://github.com/msantos/gen_unix -pkg_gen_unix_commit = master - -PACKAGES += geode -pkg_geode_name = geode -pkg_geode_description = geohash/proximity lookup in pure, uncut erlang. -pkg_geode_homepage = https://github.com/bradfordw/geode -pkg_geode_fetch = git -pkg_geode_repo = https://github.com/bradfordw/geode -pkg_geode_commit = master - -PACKAGES += getopt -pkg_getopt_name = getopt -pkg_getopt_description = Module to parse command line arguments using the GNU getopt syntax -pkg_getopt_homepage = https://github.com/jcomellas/getopt -pkg_getopt_fetch = git -pkg_getopt_repo = https://github.com/jcomellas/getopt -pkg_getopt_commit = master - -PACKAGES += gettext -pkg_gettext_name = gettext -pkg_gettext_description = Erlang internationalization library. -pkg_gettext_homepage = https://github.com/etnt/gettext -pkg_gettext_fetch = git -pkg_gettext_repo = https://github.com/etnt/gettext -pkg_gettext_commit = master - -PACKAGES += giallo -pkg_giallo_name = giallo -pkg_giallo_description = Small and flexible web framework on top of Cowboy -pkg_giallo_homepage = https://github.com/kivra/giallo -pkg_giallo_fetch = git -pkg_giallo_repo = https://github.com/kivra/giallo -pkg_giallo_commit = master - -PACKAGES += gin -pkg_gin_name = gin -pkg_gin_description = The guards and for Erlang parse_transform -pkg_gin_homepage = https://github.com/mad-cocktail/gin -pkg_gin_fetch = git -pkg_gin_repo = https://github.com/mad-cocktail/gin -pkg_gin_commit = master - -PACKAGES += gitty -pkg_gitty_name = gitty -pkg_gitty_description = Git access in erlang -pkg_gitty_homepage = https://github.com/maxlapshin/gitty -pkg_gitty_fetch = git -pkg_gitty_repo = https://github.com/maxlapshin/gitty -pkg_gitty_commit = master - -PACKAGES += gold_fever -pkg_gold_fever_name = gold_fever -pkg_gold_fever_description = A Treasure Hunt for Erlangers -pkg_gold_fever_homepage = https://github.com/inaka/gold_fever -pkg_gold_fever_fetch = git -pkg_gold_fever_repo = https://github.com/inaka/gold_fever -pkg_gold_fever_commit = master - -PACKAGES += gpb -pkg_gpb_name = gpb -pkg_gpb_description = A Google Protobuf implementation for Erlang -pkg_gpb_homepage = https://github.com/tomas-abrahamsson/gpb -pkg_gpb_fetch = git -pkg_gpb_repo = https://github.com/tomas-abrahamsson/gpb -pkg_gpb_commit = master - -PACKAGES += gproc -pkg_gproc_name = gproc -pkg_gproc_description = Extended process registry for Erlang -pkg_gproc_homepage = https://github.com/uwiger/gproc -pkg_gproc_fetch = git -pkg_gproc_repo = https://github.com/uwiger/gproc -pkg_gproc_commit = master - -PACKAGES += grapherl -pkg_grapherl_name = grapherl -pkg_grapherl_description = Create graphs of Erlang systems and programs -pkg_grapherl_homepage = https://github.com/eproxus/grapherl -pkg_grapherl_fetch = git -pkg_grapherl_repo = https://github.com/eproxus/grapherl -pkg_grapherl_commit = master - -PACKAGES += grpc -pkg_grpc_name = grpc -pkg_grpc_description = gRPC server in Erlang -pkg_grpc_homepage = https://github.com/Bluehouse-Technology/grpc -pkg_grpc_fetch = git -pkg_grpc_repo = https://github.com/Bluehouse-Technology/grpc -pkg_grpc_commit = master - -PACKAGES += grpc_client -pkg_grpc_client_name = grpc_client -pkg_grpc_client_description = gRPC client in Erlang -pkg_grpc_client_homepage = https://github.com/Bluehouse-Technology/grpc_client -pkg_grpc_client_fetch = git -pkg_grpc_client_repo = https://github.com/Bluehouse-Technology/grpc_client -pkg_grpc_client_commit = master - -PACKAGES += gun -pkg_gun_name = gun -pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang. -pkg_gun_homepage = http//ninenines.eu -pkg_gun_fetch = git -pkg_gun_repo = https://github.com/ninenines/gun -pkg_gun_commit = master - -PACKAGES += gut -pkg_gut_name = gut -pkg_gut_description = gut is a template printing, aka scaffolding, tool for Erlang. Like rails generate or yeoman -pkg_gut_homepage = https://github.com/unbalancedparentheses/gut -pkg_gut_fetch = git -pkg_gut_repo = https://github.com/unbalancedparentheses/gut -pkg_gut_commit = master - -PACKAGES += hackney -pkg_hackney_name = hackney -pkg_hackney_description = simple HTTP client in Erlang -pkg_hackney_homepage = https://github.com/benoitc/hackney -pkg_hackney_fetch = git -pkg_hackney_repo = https://github.com/benoitc/hackney -pkg_hackney_commit = master - -PACKAGES += hamcrest -pkg_hamcrest_name = hamcrest -pkg_hamcrest_description = Erlang port of Hamcrest -pkg_hamcrest_homepage = https://github.com/hyperthunk/hamcrest-erlang -pkg_hamcrest_fetch = git -pkg_hamcrest_repo = https://github.com/hyperthunk/hamcrest-erlang -pkg_hamcrest_commit = master - -PACKAGES += hanoidb -pkg_hanoidb_name = hanoidb -pkg_hanoidb_description = Erlang LSM BTree Storage -pkg_hanoidb_homepage = https://github.com/krestenkrab/hanoidb -pkg_hanoidb_fetch = git -pkg_hanoidb_repo = https://github.com/krestenkrab/hanoidb -pkg_hanoidb_commit = master - -PACKAGES += hottub -pkg_hottub_name = hottub -pkg_hottub_description = Permanent Erlang Worker Pool -pkg_hottub_homepage = https://github.com/bfrog/hottub -pkg_hottub_fetch = git -pkg_hottub_repo = https://github.com/bfrog/hottub -pkg_hottub_commit = master - -PACKAGES += hpack -pkg_hpack_name = hpack -pkg_hpack_description = HPACK Implementation for Erlang -pkg_hpack_homepage = https://github.com/joedevivo/hpack -pkg_hpack_fetch = git -pkg_hpack_repo = https://github.com/joedevivo/hpack -pkg_hpack_commit = master - -PACKAGES += hyper -pkg_hyper_name = hyper -pkg_hyper_description = Erlang implementation of HyperLogLog -pkg_hyper_homepage = https://github.com/GameAnalytics/hyper -pkg_hyper_fetch = git -pkg_hyper_repo = https://github.com/GameAnalytics/hyper -pkg_hyper_commit = master - -PACKAGES += i18n -pkg_i18n_name = i18n -pkg_i18n_description = International components for unicode from Erlang (unicode, date, string, number, format, locale, localization, transliteration, icu4e) -pkg_i18n_homepage = https://github.com/erlang-unicode/i18n -pkg_i18n_fetch = git -pkg_i18n_repo = https://github.com/erlang-unicode/i18n -pkg_i18n_commit = master - -PACKAGES += ibrowse -pkg_ibrowse_name = ibrowse -pkg_ibrowse_description = Erlang HTTP client -pkg_ibrowse_homepage = https://github.com/cmullaparthi/ibrowse -pkg_ibrowse_fetch = git -pkg_ibrowse_repo = https://github.com/cmullaparthi/ibrowse -pkg_ibrowse_commit = master - -PACKAGES += idna -pkg_idna_name = idna -pkg_idna_description = Erlang IDNA lib -pkg_idna_homepage = https://github.com/benoitc/erlang-idna -pkg_idna_fetch = git -pkg_idna_repo = https://github.com/benoitc/erlang-idna -pkg_idna_commit = master - -PACKAGES += ierlang -pkg_ierlang_name = ierlang -pkg_ierlang_description = An Erlang language kernel for IPython. -pkg_ierlang_homepage = https://github.com/robbielynch/ierlang -pkg_ierlang_fetch = git -pkg_ierlang_repo = https://github.com/robbielynch/ierlang -pkg_ierlang_commit = master - -PACKAGES += iota -pkg_iota_name = iota -pkg_iota_description = iota (Inter-dependency Objective Testing Apparatus) - a tool to enforce clean separation of responsibilities in Erlang code -pkg_iota_homepage = https://github.com/jpgneves/iota -pkg_iota_fetch = git -pkg_iota_repo = https://github.com/jpgneves/iota -pkg_iota_commit = master - -PACKAGES += irc_lib -pkg_irc_lib_name = irc_lib -pkg_irc_lib_description = Erlang irc client library -pkg_irc_lib_homepage = https://github.com/OtpChatBot/irc_lib -pkg_irc_lib_fetch = git -pkg_irc_lib_repo = https://github.com/OtpChatBot/irc_lib -pkg_irc_lib_commit = master - -PACKAGES += ircd -pkg_ircd_name = ircd -pkg_ircd_description = A pluggable IRC daemon application/library for Erlang. -pkg_ircd_homepage = https://github.com/tonyg/erlang-ircd -pkg_ircd_fetch = git -pkg_ircd_repo = https://github.com/tonyg/erlang-ircd -pkg_ircd_commit = master - -PACKAGES += iris -pkg_iris_name = iris -pkg_iris_description = Iris Erlang binding -pkg_iris_homepage = https://github.com/project-iris/iris-erl -pkg_iris_fetch = git -pkg_iris_repo = https://github.com/project-iris/iris-erl -pkg_iris_commit = master - -PACKAGES += iso8601 -pkg_iso8601_name = iso8601 -pkg_iso8601_description = Erlang ISO 8601 date formatter/parser -pkg_iso8601_homepage = https://github.com/seansawyer/erlang_iso8601 -pkg_iso8601_fetch = git -pkg_iso8601_repo = https://github.com/seansawyer/erlang_iso8601 -pkg_iso8601_commit = master - -PACKAGES += jamdb_sybase -pkg_jamdb_sybase_name = jamdb_sybase -pkg_jamdb_sybase_description = Erlang driver for SAP Sybase ASE -pkg_jamdb_sybase_homepage = https://github.com/erlangbureau/jamdb_sybase -pkg_jamdb_sybase_fetch = git -pkg_jamdb_sybase_repo = https://github.com/erlangbureau/jamdb_sybase -pkg_jamdb_sybase_commit = master - -PACKAGES += jerg -pkg_jerg_name = jerg -pkg_jerg_description = JSON Schema to Erlang Records Generator -pkg_jerg_homepage = https://github.com/ddossot/jerg -pkg_jerg_fetch = git -pkg_jerg_repo = https://github.com/ddossot/jerg -pkg_jerg_commit = master - -PACKAGES += jesse -pkg_jesse_name = jesse -pkg_jesse_description = jesse (JSon Schema Erlang) is an implementation of a json schema validator for Erlang. -pkg_jesse_homepage = https://github.com/for-GET/jesse -pkg_jesse_fetch = git -pkg_jesse_repo = https://github.com/for-GET/jesse -pkg_jesse_commit = master - -PACKAGES += jiffy -pkg_jiffy_name = jiffy -pkg_jiffy_description = JSON NIFs for Erlang. -pkg_jiffy_homepage = https://github.com/davisp/jiffy -pkg_jiffy_fetch = git -pkg_jiffy_repo = https://github.com/davisp/jiffy -pkg_jiffy_commit = master - -PACKAGES += jiffy_v -pkg_jiffy_v_name = jiffy_v -pkg_jiffy_v_description = JSON validation utility -pkg_jiffy_v_homepage = https://github.com/shizzard/jiffy-v -pkg_jiffy_v_fetch = git -pkg_jiffy_v_repo = https://github.com/shizzard/jiffy-v -pkg_jiffy_v_commit = master - -PACKAGES += jobs -pkg_jobs_name = jobs -pkg_jobs_description = a Job scheduler for load regulation -pkg_jobs_homepage = https://github.com/esl/jobs -pkg_jobs_fetch = git -pkg_jobs_repo = https://github.com/esl/jobs -pkg_jobs_commit = master - -PACKAGES += joxa -pkg_joxa_name = joxa -pkg_joxa_description = A Modern Lisp for the Erlang VM -pkg_joxa_homepage = https://github.com/joxa/joxa -pkg_joxa_fetch = git -pkg_joxa_repo = https://github.com/joxa/joxa -pkg_joxa_commit = master - -PACKAGES += json -pkg_json_name = json -pkg_json_description = a high level json library for erlang (17.0+) -pkg_json_homepage = https://github.com/talentdeficit/json -pkg_json_fetch = git -pkg_json_repo = https://github.com/talentdeficit/json -pkg_json_commit = master - -PACKAGES += json_rec -pkg_json_rec_name = json_rec -pkg_json_rec_description = JSON to erlang record -pkg_json_rec_homepage = https://github.com/justinkirby/json_rec -pkg_json_rec_fetch = git -pkg_json_rec_repo = https://github.com/justinkirby/json_rec -pkg_json_rec_commit = master - -PACKAGES += jsone -pkg_jsone_name = jsone -pkg_jsone_description = An Erlang library for encoding, decoding JSON data. -pkg_jsone_homepage = https://github.com/sile/jsone.git -pkg_jsone_fetch = git -pkg_jsone_repo = https://github.com/sile/jsone.git -pkg_jsone_commit = master - -PACKAGES += jsonerl -pkg_jsonerl_name = jsonerl -pkg_jsonerl_description = yet another but slightly different erlang <-> json encoder/decoder -pkg_jsonerl_homepage = https://github.com/lambder/jsonerl -pkg_jsonerl_fetch = git -pkg_jsonerl_repo = https://github.com/lambder/jsonerl -pkg_jsonerl_commit = master - -PACKAGES += jsonpath -pkg_jsonpath_name = jsonpath -pkg_jsonpath_description = Fast Erlang JSON data retrieval and updates via javascript-like notation -pkg_jsonpath_homepage = https://github.com/GeneStevens/jsonpath -pkg_jsonpath_fetch = git -pkg_jsonpath_repo = https://github.com/GeneStevens/jsonpath -pkg_jsonpath_commit = master - -PACKAGES += jsonx -pkg_jsonx_name = jsonx -pkg_jsonx_description = JSONX is an Erlang library for efficient decode and encode JSON, written in C. -pkg_jsonx_homepage = https://github.com/iskra/jsonx -pkg_jsonx_fetch = git -pkg_jsonx_repo = https://github.com/iskra/jsonx -pkg_jsonx_commit = master - -PACKAGES += jsx -pkg_jsx_name = jsx -pkg_jsx_description = An Erlang application for consuming, producing and manipulating JSON. -pkg_jsx_homepage = https://github.com/talentdeficit/jsx -pkg_jsx_fetch = git -pkg_jsx_repo = https://github.com/talentdeficit/jsx -pkg_jsx_commit = master - -PACKAGES += kafka -pkg_kafka_name = kafka -pkg_kafka_description = Kafka consumer and producer in Erlang -pkg_kafka_homepage = https://github.com/wooga/kafka-erlang -pkg_kafka_fetch = git -pkg_kafka_repo = https://github.com/wooga/kafka-erlang -pkg_kafka_commit = master - -PACKAGES += kafka_protocol -pkg_kafka_protocol_name = kafka_protocol -pkg_kafka_protocol_description = Kafka protocol Erlang library -pkg_kafka_protocol_homepage = https://github.com/klarna/kafka_protocol -pkg_kafka_protocol_fetch = git -pkg_kafka_protocol_repo = https://github.com/klarna/kafka_protocol.git -pkg_kafka_protocol_commit = master - -PACKAGES += kai -pkg_kai_name = kai -pkg_kai_description = DHT storage by Takeshi Inoue -pkg_kai_homepage = https://github.com/synrc/kai -pkg_kai_fetch = git -pkg_kai_repo = https://github.com/synrc/kai -pkg_kai_commit = master - -PACKAGES += katja -pkg_katja_name = katja -pkg_katja_description = A simple Riemann client written in Erlang. -pkg_katja_homepage = https://github.com/nifoc/katja -pkg_katja_fetch = git -pkg_katja_repo = https://github.com/nifoc/katja -pkg_katja_commit = master - -PACKAGES += kdht -pkg_kdht_name = kdht -pkg_kdht_description = kdht is an erlang DHT implementation -pkg_kdht_homepage = https://github.com/kevinlynx/kdht -pkg_kdht_fetch = git -pkg_kdht_repo = https://github.com/kevinlynx/kdht -pkg_kdht_commit = master - -PACKAGES += key2value -pkg_key2value_name = key2value -pkg_key2value_description = Erlang 2-way map -pkg_key2value_homepage = https://github.com/okeuday/key2value -pkg_key2value_fetch = git -pkg_key2value_repo = https://github.com/okeuday/key2value -pkg_key2value_commit = master - -PACKAGES += keys1value -pkg_keys1value_name = keys1value -pkg_keys1value_description = Erlang set associative map for key lists -pkg_keys1value_homepage = https://github.com/okeuday/keys1value -pkg_keys1value_fetch = git -pkg_keys1value_repo = https://github.com/okeuday/keys1value -pkg_keys1value_commit = master - -PACKAGES += kinetic -pkg_kinetic_name = kinetic -pkg_kinetic_description = Erlang Kinesis Client -pkg_kinetic_homepage = https://github.com/AdRoll/kinetic -pkg_kinetic_fetch = git -pkg_kinetic_repo = https://github.com/AdRoll/kinetic -pkg_kinetic_commit = master - -PACKAGES += kjell -pkg_kjell_name = kjell -pkg_kjell_description = Erlang Shell -pkg_kjell_homepage = https://github.com/karlll/kjell -pkg_kjell_fetch = git -pkg_kjell_repo = https://github.com/karlll/kjell -pkg_kjell_commit = master - -PACKAGES += kraken -pkg_kraken_name = kraken -pkg_kraken_description = Distributed Pubsub Server for Realtime Apps -pkg_kraken_homepage = https://github.com/Asana/kraken -pkg_kraken_fetch = git -pkg_kraken_repo = https://github.com/Asana/kraken -pkg_kraken_commit = master - -PACKAGES += kucumberl -pkg_kucumberl_name = kucumberl -pkg_kucumberl_description = A pure-erlang, open-source, implementation of Cucumber -pkg_kucumberl_homepage = https://github.com/openshine/kucumberl -pkg_kucumberl_fetch = git -pkg_kucumberl_repo = https://github.com/openshine/kucumberl -pkg_kucumberl_commit = master - -PACKAGES += kvc -pkg_kvc_name = kvc -pkg_kvc_description = KVC - Key Value Coding for Erlang data structures -pkg_kvc_homepage = https://github.com/etrepum/kvc -pkg_kvc_fetch = git -pkg_kvc_repo = https://github.com/etrepum/kvc -pkg_kvc_commit = master - -PACKAGES += kvlists -pkg_kvlists_name = kvlists -pkg_kvlists_description = Lists of key-value pairs (decoded JSON) in Erlang -pkg_kvlists_homepage = https://github.com/jcomellas/kvlists -pkg_kvlists_fetch = git -pkg_kvlists_repo = https://github.com/jcomellas/kvlists -pkg_kvlists_commit = master - -PACKAGES += kvs -pkg_kvs_name = kvs -pkg_kvs_description = Container and Iterator -pkg_kvs_homepage = https://github.com/synrc/kvs -pkg_kvs_fetch = git -pkg_kvs_repo = https://github.com/synrc/kvs -pkg_kvs_commit = master - -PACKAGES += lager -pkg_lager_name = lager -pkg_lager_description = A logging framework for Erlang/OTP. -pkg_lager_homepage = https://github.com/erlang-lager/lager -pkg_lager_fetch = git -pkg_lager_repo = https://github.com/erlang-lager/lager -pkg_lager_commit = master - -PACKAGES += lager_amqp_backend -pkg_lager_amqp_backend_name = lager_amqp_backend -pkg_lager_amqp_backend_description = AMQP RabbitMQ Lager backend -pkg_lager_amqp_backend_homepage = https://github.com/jbrisbin/lager_amqp_backend -pkg_lager_amqp_backend_fetch = git -pkg_lager_amqp_backend_repo = https://github.com/jbrisbin/lager_amqp_backend -pkg_lager_amqp_backend_commit = master - -PACKAGES += lager_syslog -pkg_lager_syslog_name = lager_syslog -pkg_lager_syslog_description = Syslog backend for lager -pkg_lager_syslog_homepage = https://github.com/erlang-lager/lager_syslog -pkg_lager_syslog_fetch = git -pkg_lager_syslog_repo = https://github.com/erlang-lager/lager_syslog -pkg_lager_syslog_commit = master - -PACKAGES += lambdapad -pkg_lambdapad_name = lambdapad -pkg_lambdapad_description = Static site generator using Erlang. Yes, Erlang. -pkg_lambdapad_homepage = https://github.com/gar1t/lambdapad -pkg_lambdapad_fetch = git -pkg_lambdapad_repo = https://github.com/gar1t/lambdapad -pkg_lambdapad_commit = master - -PACKAGES += lasp -pkg_lasp_name = lasp -pkg_lasp_description = A Language for Distributed, Eventually Consistent Computations -pkg_lasp_homepage = https://lasp-lang.org/ -pkg_lasp_fetch = git -pkg_lasp_repo = https://github.com/lasp-lang/lasp -pkg_lasp_commit = master - -PACKAGES += lasse -pkg_lasse_name = lasse -pkg_lasse_description = SSE handler for Cowboy -pkg_lasse_homepage = https://github.com/inaka/lasse -pkg_lasse_fetch = git -pkg_lasse_repo = https://github.com/inaka/lasse -pkg_lasse_commit = master - -PACKAGES += ldap -pkg_ldap_name = ldap -pkg_ldap_description = LDAP server written in Erlang -pkg_ldap_homepage = https://github.com/spawnproc/ldap -pkg_ldap_fetch = git -pkg_ldap_repo = https://github.com/spawnproc/ldap -pkg_ldap_commit = master - -PACKAGES += lethink -pkg_lethink_name = lethink -pkg_lethink_description = erlang driver for rethinkdb -pkg_lethink_homepage = https://github.com/taybin/lethink -pkg_lethink_fetch = git -pkg_lethink_repo = https://github.com/taybin/lethink -pkg_lethink_commit = master - -PACKAGES += lfe -pkg_lfe_name = lfe -pkg_lfe_description = Lisp Flavoured Erlang (LFE) -pkg_lfe_homepage = https://github.com/rvirding/lfe -pkg_lfe_fetch = git -pkg_lfe_repo = https://github.com/rvirding/lfe -pkg_lfe_commit = master - -PACKAGES += ling -pkg_ling_name = ling -pkg_ling_description = Erlang on Xen -pkg_ling_homepage = https://github.com/cloudozer/ling -pkg_ling_fetch = git -pkg_ling_repo = https://github.com/cloudozer/ling -pkg_ling_commit = master - -PACKAGES += live -pkg_live_name = live -pkg_live_description = Automated module and configuration reloader. -pkg_live_homepage = https://ninenines.eu -pkg_live_fetch = git -pkg_live_repo = https://github.com/ninenines/live -pkg_live_commit = master - -PACKAGES += lmq -pkg_lmq_name = lmq -pkg_lmq_description = Lightweight Message Queue -pkg_lmq_homepage = https://github.com/iij/lmq -pkg_lmq_fetch = git -pkg_lmq_repo = https://github.com/iij/lmq -pkg_lmq_commit = master - -PACKAGES += locker -pkg_locker_name = locker -pkg_locker_description = Atomic distributed 'check and set' for short-lived keys -pkg_locker_homepage = https://github.com/wooga/locker -pkg_locker_fetch = git -pkg_locker_repo = https://github.com/wooga/locker -pkg_locker_commit = master - -PACKAGES += locks -pkg_locks_name = locks -pkg_locks_description = A scalable, deadlock-resolving resource locker -pkg_locks_homepage = https://github.com/uwiger/locks -pkg_locks_fetch = git -pkg_locks_repo = https://github.com/uwiger/locks -pkg_locks_commit = master - -PACKAGES += log4erl -pkg_log4erl_name = log4erl -pkg_log4erl_description = A logger for erlang in the spirit of Log4J. -pkg_log4erl_homepage = https://github.com/ahmednawras/log4erl -pkg_log4erl_fetch = git -pkg_log4erl_repo = https://github.com/ahmednawras/log4erl -pkg_log4erl_commit = master - -PACKAGES += lol -pkg_lol_name = lol -pkg_lol_description = Lisp on erLang, and programming is fun again -pkg_lol_homepage = https://github.com/b0oh/lol -pkg_lol_fetch = git -pkg_lol_repo = https://github.com/b0oh/lol -pkg_lol_commit = master - -PACKAGES += lucid -pkg_lucid_name = lucid -pkg_lucid_description = HTTP/2 server written in Erlang -pkg_lucid_homepage = https://github.com/tatsuhiro-t/lucid -pkg_lucid_fetch = git -pkg_lucid_repo = https://github.com/tatsuhiro-t/lucid -pkg_lucid_commit = master - -PACKAGES += luerl -pkg_luerl_name = luerl -pkg_luerl_description = Lua in Erlang -pkg_luerl_homepage = https://github.com/rvirding/luerl -pkg_luerl_fetch = git -pkg_luerl_repo = https://github.com/rvirding/luerl -pkg_luerl_commit = develop - -PACKAGES += luwak -pkg_luwak_name = luwak -pkg_luwak_description = Large-object storage interface for Riak -pkg_luwak_homepage = https://github.com/basho/luwak -pkg_luwak_fetch = git -pkg_luwak_repo = https://github.com/basho/luwak -pkg_luwak_commit = master - -PACKAGES += lux -pkg_lux_name = lux -pkg_lux_description = Lux (LUcid eXpect scripting) simplifies test automation and provides an Expect-style execution of commands -pkg_lux_homepage = https://github.com/hawk/lux -pkg_lux_fetch = git -pkg_lux_repo = https://github.com/hawk/lux -pkg_lux_commit = master - -PACKAGES += machi -pkg_machi_name = machi -pkg_machi_description = Machi file store -pkg_machi_homepage = https://github.com/basho/machi -pkg_machi_fetch = git -pkg_machi_repo = https://github.com/basho/machi -pkg_machi_commit = master - -PACKAGES += mad -pkg_mad_name = mad -pkg_mad_description = Small and Fast Rebar Replacement -pkg_mad_homepage = https://github.com/synrc/mad -pkg_mad_fetch = git -pkg_mad_repo = https://github.com/synrc/mad -pkg_mad_commit = master - -PACKAGES += marina -pkg_marina_name = marina -pkg_marina_description = Non-blocking Erlang Cassandra CQL3 client -pkg_marina_homepage = https://github.com/lpgauth/marina -pkg_marina_fetch = git -pkg_marina_repo = https://github.com/lpgauth/marina -pkg_marina_commit = master - -PACKAGES += mavg -pkg_mavg_name = mavg -pkg_mavg_description = Erlang :: Exponential moving average library -pkg_mavg_homepage = https://github.com/EchoTeam/mavg -pkg_mavg_fetch = git -pkg_mavg_repo = https://github.com/EchoTeam/mavg -pkg_mavg_commit = master - -PACKAGES += mc_erl -pkg_mc_erl_name = mc_erl -pkg_mc_erl_description = mc-erl is a server for Minecraft 1.4.7 written in Erlang. -pkg_mc_erl_homepage = https://github.com/clonejo/mc-erl -pkg_mc_erl_fetch = git -pkg_mc_erl_repo = https://github.com/clonejo/mc-erl -pkg_mc_erl_commit = master - -PACKAGES += mcd -pkg_mcd_name = mcd -pkg_mcd_description = Fast memcached protocol client in pure Erlang -pkg_mcd_homepage = https://github.com/EchoTeam/mcd -pkg_mcd_fetch = git -pkg_mcd_repo = https://github.com/EchoTeam/mcd -pkg_mcd_commit = master - -PACKAGES += mcerlang -pkg_mcerlang_name = mcerlang -pkg_mcerlang_description = The McErlang model checker for Erlang -pkg_mcerlang_homepage = https://github.com/fredlund/McErlang -pkg_mcerlang_fetch = git -pkg_mcerlang_repo = https://github.com/fredlund/McErlang -pkg_mcerlang_commit = master - -PACKAGES += meck -pkg_meck_name = meck -pkg_meck_description = A mocking library for Erlang -pkg_meck_homepage = https://github.com/eproxus/meck -pkg_meck_fetch = git -pkg_meck_repo = https://github.com/eproxus/meck -pkg_meck_commit = master - -PACKAGES += mekao -pkg_mekao_name = mekao -pkg_mekao_description = SQL constructor -pkg_mekao_homepage = https://github.com/ddosia/mekao -pkg_mekao_fetch = git -pkg_mekao_repo = https://github.com/ddosia/mekao -pkg_mekao_commit = master - -PACKAGES += memo -pkg_memo_name = memo -pkg_memo_description = Erlang memoization server -pkg_memo_homepage = https://github.com/tuncer/memo -pkg_memo_fetch = git -pkg_memo_repo = https://github.com/tuncer/memo -pkg_memo_commit = master - -PACKAGES += merge_index -pkg_merge_index_name = merge_index -pkg_merge_index_description = MergeIndex is an Erlang library for storing ordered sets on disk. It is very similar to an SSTable (in Google's Bigtable) or an HFile (in Hadoop). -pkg_merge_index_homepage = https://github.com/basho/merge_index -pkg_merge_index_fetch = git -pkg_merge_index_repo = https://github.com/basho/merge_index -pkg_merge_index_commit = master - -PACKAGES += merl -pkg_merl_name = merl -pkg_merl_description = Metaprogramming in Erlang -pkg_merl_homepage = https://github.com/richcarl/merl -pkg_merl_fetch = git -pkg_merl_repo = https://github.com/richcarl/merl -pkg_merl_commit = master - -PACKAGES += mimerl -pkg_mimerl_name = mimerl -pkg_mimerl_description = library to handle mimetypes -pkg_mimerl_homepage = https://github.com/benoitc/mimerl -pkg_mimerl_fetch = git -pkg_mimerl_repo = https://github.com/benoitc/mimerl -pkg_mimerl_commit = master - -PACKAGES += mimetypes -pkg_mimetypes_name = mimetypes -pkg_mimetypes_description = Erlang MIME types library -pkg_mimetypes_homepage = https://github.com/spawngrid/mimetypes -pkg_mimetypes_fetch = git -pkg_mimetypes_repo = https://github.com/spawngrid/mimetypes -pkg_mimetypes_commit = master - -PACKAGES += mixer -pkg_mixer_name = mixer -pkg_mixer_description = Mix in functions from other modules -pkg_mixer_homepage = https://github.com/chef/mixer -pkg_mixer_fetch = git -pkg_mixer_repo = https://github.com/chef/mixer -pkg_mixer_commit = master - -PACKAGES += mochiweb -pkg_mochiweb_name = mochiweb -pkg_mochiweb_description = MochiWeb is an Erlang library for building lightweight HTTP servers. -pkg_mochiweb_homepage = https://github.com/mochi/mochiweb -pkg_mochiweb_fetch = git -pkg_mochiweb_repo = https://github.com/mochi/mochiweb -pkg_mochiweb_commit = master - -PACKAGES += mochiweb_xpath -pkg_mochiweb_xpath_name = mochiweb_xpath -pkg_mochiweb_xpath_description = XPath support for mochiweb's html parser -pkg_mochiweb_xpath_homepage = https://github.com/retnuh/mochiweb_xpath -pkg_mochiweb_xpath_fetch = git -pkg_mochiweb_xpath_repo = https://github.com/retnuh/mochiweb_xpath -pkg_mochiweb_xpath_commit = master - -PACKAGES += mockgyver -pkg_mockgyver_name = mockgyver -pkg_mockgyver_description = A mocking library for Erlang -pkg_mockgyver_homepage = https://github.com/klajo/mockgyver -pkg_mockgyver_fetch = git -pkg_mockgyver_repo = https://github.com/klajo/mockgyver -pkg_mockgyver_commit = master - -PACKAGES += modlib -pkg_modlib_name = modlib -pkg_modlib_description = Web framework based on Erlang's inets httpd -pkg_modlib_homepage = https://github.com/gar1t/modlib -pkg_modlib_fetch = git -pkg_modlib_repo = https://github.com/gar1t/modlib -pkg_modlib_commit = master - -PACKAGES += mongodb -pkg_mongodb_name = mongodb -pkg_mongodb_description = MongoDB driver for Erlang -pkg_mongodb_homepage = https://github.com/comtihon/mongodb-erlang -pkg_mongodb_fetch = git -pkg_mongodb_repo = https://github.com/comtihon/mongodb-erlang -pkg_mongodb_commit = master - -PACKAGES += mongooseim -pkg_mongooseim_name = mongooseim -pkg_mongooseim_description = Jabber / XMPP server with focus on performance and scalability, by Erlang Solutions -pkg_mongooseim_homepage = https://www.erlang-solutions.com/products/mongooseim-massively-scalable-ejabberd-platform -pkg_mongooseim_fetch = git -pkg_mongooseim_repo = https://github.com/esl/MongooseIM -pkg_mongooseim_commit = master - -PACKAGES += moyo -pkg_moyo_name = moyo -pkg_moyo_description = Erlang utility functions library -pkg_moyo_homepage = https://github.com/dwango/moyo -pkg_moyo_fetch = git -pkg_moyo_repo = https://github.com/dwango/moyo -pkg_moyo_commit = master - -PACKAGES += msgpack -pkg_msgpack_name = msgpack -pkg_msgpack_description = MessagePack (de)serializer implementation for Erlang -pkg_msgpack_homepage = https://github.com/msgpack/msgpack-erlang -pkg_msgpack_fetch = git -pkg_msgpack_repo = https://github.com/msgpack/msgpack-erlang -pkg_msgpack_commit = master - -PACKAGES += mu2 -pkg_mu2_name = mu2 -pkg_mu2_description = Erlang mutation testing tool -pkg_mu2_homepage = https://github.com/ramsay-t/mu2 -pkg_mu2_fetch = git -pkg_mu2_repo = https://github.com/ramsay-t/mu2 -pkg_mu2_commit = master - -PACKAGES += mustache -pkg_mustache_name = mustache -pkg_mustache_description = Mustache template engine for Erlang. -pkg_mustache_homepage = https://github.com/mojombo/mustache.erl -pkg_mustache_fetch = git -pkg_mustache_repo = https://github.com/mojombo/mustache.erl -pkg_mustache_commit = master - -PACKAGES += myproto -pkg_myproto_name = myproto -pkg_myproto_description = MySQL Server Protocol in Erlang -pkg_myproto_homepage = https://github.com/altenwald/myproto -pkg_myproto_fetch = git -pkg_myproto_repo = https://github.com/altenwald/myproto -pkg_myproto_commit = master - -PACKAGES += mysql -pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master - -PACKAGES += n2o -pkg_n2o_name = n2o -pkg_n2o_description = WebSocket Application Server -pkg_n2o_homepage = https://github.com/5HT/n2o -pkg_n2o_fetch = git -pkg_n2o_repo = https://github.com/5HT/n2o -pkg_n2o_commit = master - -PACKAGES += nat_upnp -pkg_nat_upnp_name = nat_upnp -pkg_nat_upnp_description = Erlang library to map your internal port to an external using UNP IGD -pkg_nat_upnp_homepage = https://github.com/benoitc/nat_upnp -pkg_nat_upnp_fetch = git -pkg_nat_upnp_repo = https://github.com/benoitc/nat_upnp -pkg_nat_upnp_commit = master - -PACKAGES += neo4j -pkg_neo4j_name = neo4j -pkg_neo4j_description = Erlang client library for Neo4J. -pkg_neo4j_homepage = https://github.com/dmitriid/neo4j-erlang -pkg_neo4j_fetch = git -pkg_neo4j_repo = https://github.com/dmitriid/neo4j-erlang -pkg_neo4j_commit = master - -PACKAGES += neotoma -pkg_neotoma_name = neotoma -pkg_neotoma_description = Erlang library and packrat parser-generator for parsing expression grammars. -pkg_neotoma_homepage = https://github.com/seancribbs/neotoma -pkg_neotoma_fetch = git -pkg_neotoma_repo = https://github.com/seancribbs/neotoma -pkg_neotoma_commit = master - -PACKAGES += newrelic -pkg_newrelic_name = newrelic -pkg_newrelic_description = Erlang library for sending metrics to New Relic -pkg_newrelic_homepage = https://github.com/wooga/newrelic-erlang -pkg_newrelic_fetch = git -pkg_newrelic_repo = https://github.com/wooga/newrelic-erlang -pkg_newrelic_commit = master - -PACKAGES += nifty -pkg_nifty_name = nifty -pkg_nifty_description = Erlang NIF wrapper generator -pkg_nifty_homepage = https://github.com/parapluu/nifty -pkg_nifty_fetch = git -pkg_nifty_repo = https://github.com/parapluu/nifty -pkg_nifty_commit = master - -PACKAGES += nitrogen_core -pkg_nitrogen_core_name = nitrogen_core -pkg_nitrogen_core_description = The core Nitrogen library. -pkg_nitrogen_core_homepage = http://nitrogenproject.com/ -pkg_nitrogen_core_fetch = git -pkg_nitrogen_core_repo = https://github.com/nitrogen/nitrogen_core -pkg_nitrogen_core_commit = master - -PACKAGES += nkbase -pkg_nkbase_name = nkbase -pkg_nkbase_description = NkBASE distributed database -pkg_nkbase_homepage = https://github.com/Nekso/nkbase -pkg_nkbase_fetch = git -pkg_nkbase_repo = https://github.com/Nekso/nkbase -pkg_nkbase_commit = develop - -PACKAGES += nkdocker -pkg_nkdocker_name = nkdocker -pkg_nkdocker_description = Erlang Docker client -pkg_nkdocker_homepage = https://github.com/Nekso/nkdocker -pkg_nkdocker_fetch = git -pkg_nkdocker_repo = https://github.com/Nekso/nkdocker -pkg_nkdocker_commit = master - -PACKAGES += nkpacket -pkg_nkpacket_name = nkpacket -pkg_nkpacket_description = Generic Erlang transport layer -pkg_nkpacket_homepage = https://github.com/Nekso/nkpacket -pkg_nkpacket_fetch = git -pkg_nkpacket_repo = https://github.com/Nekso/nkpacket -pkg_nkpacket_commit = master - -PACKAGES += nksip -pkg_nksip_name = nksip -pkg_nksip_description = Erlang SIP application server -pkg_nksip_homepage = https://github.com/kalta/nksip -pkg_nksip_fetch = git -pkg_nksip_repo = https://github.com/kalta/nksip -pkg_nksip_commit = master - -PACKAGES += nodefinder -pkg_nodefinder_name = nodefinder -pkg_nodefinder_description = automatic node discovery via UDP multicast -pkg_nodefinder_homepage = https://github.com/erlanger/nodefinder -pkg_nodefinder_fetch = git -pkg_nodefinder_repo = https://github.com/okeuday/nodefinder -pkg_nodefinder_commit = master - -PACKAGES += nprocreg -pkg_nprocreg_name = nprocreg -pkg_nprocreg_description = Minimal Distributed Erlang Process Registry -pkg_nprocreg_homepage = http://nitrogenproject.com/ -pkg_nprocreg_fetch = git -pkg_nprocreg_repo = https://github.com/nitrogen/nprocreg -pkg_nprocreg_commit = master - -PACKAGES += oauth -pkg_oauth_name = oauth -pkg_oauth_description = An Erlang OAuth 1.0 implementation -pkg_oauth_homepage = https://github.com/tim/erlang-oauth -pkg_oauth_fetch = git -pkg_oauth_repo = https://github.com/tim/erlang-oauth -pkg_oauth_commit = master - -PACKAGES += oauth2 -pkg_oauth2_name = oauth2 -pkg_oauth2_description = Erlang Oauth2 implementation -pkg_oauth2_homepage = https://github.com/kivra/oauth2 -pkg_oauth2_fetch = git -pkg_oauth2_repo = https://github.com/kivra/oauth2 -pkg_oauth2_commit = master - -PACKAGES += observer_cli -pkg_observer_cli_name = observer_cli -pkg_observer_cli_description = Visualize Erlang/Elixir Nodes On The Command Line -pkg_observer_cli_homepage = https://zhongwencool.github.io/observer_cli -pkg_observer_cli_fetch = git -pkg_observer_cli_repo = https://github.com/zhongwencool/observer_cli -pkg_observer_cli_commit = master - -PACKAGES += octopus -pkg_octopus_name = octopus -pkg_octopus_description = Small and flexible pool manager written in Erlang -pkg_octopus_homepage = https://github.com/erlangbureau/octopus -pkg_octopus_fetch = git -pkg_octopus_repo = https://github.com/erlangbureau/octopus -pkg_octopus_commit = master - -PACKAGES += of_protocol -pkg_of_protocol_name = of_protocol -pkg_of_protocol_description = OpenFlow Protocol Library for Erlang -pkg_of_protocol_homepage = https://github.com/FlowForwarding/of_protocol -pkg_of_protocol_fetch = git -pkg_of_protocol_repo = https://github.com/FlowForwarding/of_protocol -pkg_of_protocol_commit = master - -PACKAGES += opencouch -pkg_opencouch_name = couch -pkg_opencouch_description = A embeddable document oriented database compatible with Apache CouchDB -pkg_opencouch_homepage = https://github.com/benoitc/opencouch -pkg_opencouch_fetch = git -pkg_opencouch_repo = https://github.com/benoitc/opencouch -pkg_opencouch_commit = master - -PACKAGES += openflow -pkg_openflow_name = openflow -pkg_openflow_description = An OpenFlow controller written in pure erlang -pkg_openflow_homepage = https://github.com/renatoaguiar/erlang-openflow -pkg_openflow_fetch = git -pkg_openflow_repo = https://github.com/renatoaguiar/erlang-openflow -pkg_openflow_commit = master - -PACKAGES += openid -pkg_openid_name = openid -pkg_openid_description = Erlang OpenID -pkg_openid_homepage = https://github.com/brendonh/erl_openid -pkg_openid_fetch = git -pkg_openid_repo = https://github.com/brendonh/erl_openid -pkg_openid_commit = master - -PACKAGES += openpoker -pkg_openpoker_name = openpoker -pkg_openpoker_description = Genesis Texas hold'em Game Server -pkg_openpoker_homepage = https://github.com/hpyhacking/openpoker -pkg_openpoker_fetch = git -pkg_openpoker_repo = https://github.com/hpyhacking/openpoker -pkg_openpoker_commit = master - -PACKAGES += otpbp -pkg_otpbp_name = otpbp -pkg_otpbp_description = Parse transformer for use new OTP functions in old Erlang/OTP releases (R15, R16, 17, 18, 19) -pkg_otpbp_homepage = https://github.com/Ledest/otpbp -pkg_otpbp_fetch = git -pkg_otpbp_repo = https://github.com/Ledest/otpbp -pkg_otpbp_commit = master - -PACKAGES += pal -pkg_pal_name = pal -pkg_pal_description = Pragmatic Authentication Library -pkg_pal_homepage = https://github.com/manifest/pal -pkg_pal_fetch = git -pkg_pal_repo = https://github.com/manifest/pal -pkg_pal_commit = master - -PACKAGES += parse_trans -pkg_parse_trans_name = parse_trans -pkg_parse_trans_description = Parse transform utilities for Erlang -pkg_parse_trans_homepage = https://github.com/uwiger/parse_trans -pkg_parse_trans_fetch = git -pkg_parse_trans_repo = https://github.com/uwiger/parse_trans -pkg_parse_trans_commit = master - -PACKAGES += parsexml -pkg_parsexml_name = parsexml -pkg_parsexml_description = Simple DOM XML parser with convenient and very simple API -pkg_parsexml_homepage = https://github.com/maxlapshin/parsexml -pkg_parsexml_fetch = git -pkg_parsexml_repo = https://github.com/maxlapshin/parsexml -pkg_parsexml_commit = master - -PACKAGES += pegjs -pkg_pegjs_name = pegjs -pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. -pkg_pegjs_homepage = https://github.com/dmitriid/pegjs -pkg_pegjs_fetch = git -pkg_pegjs_repo = https://github.com/dmitriid/pegjs -pkg_pegjs_commit = master - -PACKAGES += percept2 -pkg_percept2_name = percept2 -pkg_percept2_description = Concurrent profiling tool for Erlang -pkg_percept2_homepage = https://github.com/huiqing/percept2 -pkg_percept2_fetch = git -pkg_percept2_repo = https://github.com/huiqing/percept2 -pkg_percept2_commit = master - -PACKAGES += pgo -pkg_pgo_name = pgo -pkg_pgo_description = Erlang Postgres client and connection pool -pkg_pgo_homepage = https://github.com/erleans/pgo.git -pkg_pgo_fetch = git -pkg_pgo_repo = https://github.com/erleans/pgo.git -pkg_pgo_commit = master - -PACKAGES += pgsql -pkg_pgsql_name = pgsql -pkg_pgsql_description = Erlang PostgreSQL driver -pkg_pgsql_homepage = https://github.com/semiocast/pgsql -pkg_pgsql_fetch = git -pkg_pgsql_repo = https://github.com/semiocast/pgsql -pkg_pgsql_commit = master - -PACKAGES += pkgx -pkg_pkgx_name = pkgx -pkg_pkgx_description = Build .deb packages from Erlang releases -pkg_pkgx_homepage = https://github.com/arjan/pkgx -pkg_pkgx_fetch = git -pkg_pkgx_repo = https://github.com/arjan/pkgx -pkg_pkgx_commit = master - -PACKAGES += pkt -pkg_pkt_name = pkt -pkg_pkt_description = Erlang network protocol library -pkg_pkt_homepage = https://github.com/msantos/pkt -pkg_pkt_fetch = git -pkg_pkt_repo = https://github.com/msantos/pkt -pkg_pkt_commit = master - -PACKAGES += plain_fsm -pkg_plain_fsm_name = plain_fsm -pkg_plain_fsm_description = A behaviour/support library for writing plain Erlang FSMs. -pkg_plain_fsm_homepage = https://github.com/uwiger/plain_fsm -pkg_plain_fsm_fetch = git -pkg_plain_fsm_repo = https://github.com/uwiger/plain_fsm -pkg_plain_fsm_commit = master - -PACKAGES += plumtree -pkg_plumtree_name = plumtree -pkg_plumtree_description = Epidemic Broadcast Trees -pkg_plumtree_homepage = https://github.com/helium/plumtree -pkg_plumtree_fetch = git -pkg_plumtree_repo = https://github.com/helium/plumtree -pkg_plumtree_commit = master - -PACKAGES += pmod_transform -pkg_pmod_transform_name = pmod_transform -pkg_pmod_transform_description = Parse transform for parameterized modules -pkg_pmod_transform_homepage = https://github.com/erlang/pmod_transform -pkg_pmod_transform_fetch = git -pkg_pmod_transform_repo = https://github.com/erlang/pmod_transform -pkg_pmod_transform_commit = master - -PACKAGES += pobox -pkg_pobox_name = pobox -pkg_pobox_description = External buffer processes to protect against mailbox overflow in Erlang -pkg_pobox_homepage = https://github.com/ferd/pobox -pkg_pobox_fetch = git -pkg_pobox_repo = https://github.com/ferd/pobox -pkg_pobox_commit = master - -PACKAGES += ponos -pkg_ponos_name = ponos -pkg_ponos_description = ponos is a simple yet powerful load generator written in erlang -pkg_ponos_homepage = https://github.com/klarna/ponos -pkg_ponos_fetch = git -pkg_ponos_repo = https://github.com/klarna/ponos -pkg_ponos_commit = master - -PACKAGES += poolboy -pkg_poolboy_name = poolboy -pkg_poolboy_description = A hunky Erlang worker pool factory -pkg_poolboy_homepage = https://github.com/devinus/poolboy -pkg_poolboy_fetch = git -pkg_poolboy_repo = https://github.com/devinus/poolboy -pkg_poolboy_commit = master - -PACKAGES += pooler -pkg_pooler_name = pooler -pkg_pooler_description = An OTP Process Pool Application -pkg_pooler_homepage = https://github.com/seth/pooler -pkg_pooler_fetch = git -pkg_pooler_repo = https://github.com/seth/pooler -pkg_pooler_commit = master - -PACKAGES += pqueue -pkg_pqueue_name = pqueue -pkg_pqueue_description = Erlang Priority Queues -pkg_pqueue_homepage = https://github.com/okeuday/pqueue -pkg_pqueue_fetch = git -pkg_pqueue_repo = https://github.com/okeuday/pqueue -pkg_pqueue_commit = master - -PACKAGES += procket -pkg_procket_name = procket -pkg_procket_description = Erlang interface to low level socket operations -pkg_procket_homepage = http://blog.listincomprehension.com/search/label/procket -pkg_procket_fetch = git -pkg_procket_repo = https://github.com/msantos/procket -pkg_procket_commit = master - -PACKAGES += prop -pkg_prop_name = prop -pkg_prop_description = An Erlang code scaffolding and generator system. -pkg_prop_homepage = https://github.com/nuex/prop -pkg_prop_fetch = git -pkg_prop_repo = https://github.com/nuex/prop -pkg_prop_commit = master - -PACKAGES += proper -pkg_proper_name = proper -pkg_proper_description = PropEr: a QuickCheck-inspired property-based testing tool for Erlang. -pkg_proper_homepage = http://proper.softlab.ntua.gr -pkg_proper_fetch = git -pkg_proper_repo = https://github.com/manopapad/proper -pkg_proper_commit = master - -PACKAGES += props -pkg_props_name = props -pkg_props_description = Property structure library -pkg_props_homepage = https://github.com/greyarea/props -pkg_props_fetch = git -pkg_props_repo = https://github.com/greyarea/props -pkg_props_commit = master - -PACKAGES += protobuffs -pkg_protobuffs_name = protobuffs -pkg_protobuffs_description = An implementation of Google's Protocol Buffers for Erlang, based on ngerakines/erlang_protobuffs. -pkg_protobuffs_homepage = https://github.com/basho/erlang_protobuffs -pkg_protobuffs_fetch = git -pkg_protobuffs_repo = https://github.com/basho/erlang_protobuffs -pkg_protobuffs_commit = master - -PACKAGES += psycho -pkg_psycho_name = psycho -pkg_psycho_description = HTTP server that provides a WSGI-like interface for applications and middleware. -pkg_psycho_homepage = https://github.com/gar1t/psycho -pkg_psycho_fetch = git -pkg_psycho_repo = https://github.com/gar1t/psycho -pkg_psycho_commit = master - -PACKAGES += purity -pkg_purity_name = purity -pkg_purity_description = A side-effect analyzer for Erlang -pkg_purity_homepage = https://github.com/mpitid/purity -pkg_purity_fetch = git -pkg_purity_repo = https://github.com/mpitid/purity -pkg_purity_commit = master - -PACKAGES += push_service -pkg_push_service_name = push_service -pkg_push_service_description = Push service -pkg_push_service_homepage = https://github.com/hairyhum/push_service -pkg_push_service_fetch = git -pkg_push_service_repo = https://github.com/hairyhum/push_service -pkg_push_service_commit = master - -PACKAGES += qdate -pkg_qdate_name = qdate -pkg_qdate_description = Date, time, and timezone parsing, formatting, and conversion for Erlang. -pkg_qdate_homepage = https://github.com/choptastic/qdate -pkg_qdate_fetch = git -pkg_qdate_repo = https://github.com/choptastic/qdate -pkg_qdate_commit = master - -PACKAGES += qrcode -pkg_qrcode_name = qrcode -pkg_qrcode_description = QR Code encoder in Erlang -pkg_qrcode_homepage = https://github.com/komone/qrcode -pkg_qrcode_fetch = git -pkg_qrcode_repo = https://github.com/komone/qrcode -pkg_qrcode_commit = master - -PACKAGES += quest -pkg_quest_name = quest -pkg_quest_description = Learn Erlang through this set of challenges. An interactive system for getting to know Erlang. -pkg_quest_homepage = https://github.com/eriksoe/ErlangQuest -pkg_quest_fetch = git -pkg_quest_repo = https://github.com/eriksoe/ErlangQuest -pkg_quest_commit = master - -PACKAGES += quickrand -pkg_quickrand_name = quickrand -pkg_quickrand_description = Quick Erlang Random Number Generation -pkg_quickrand_homepage = https://github.com/okeuday/quickrand -pkg_quickrand_fetch = git -pkg_quickrand_repo = https://github.com/okeuday/quickrand -pkg_quickrand_commit = master - -PACKAGES += rabbit -pkg_rabbit_name = rabbit -pkg_rabbit_description = RabbitMQ Server -pkg_rabbit_homepage = https://www.rabbitmq.com/ -pkg_rabbit_fetch = git -pkg_rabbit_repo = https://github.com/rabbitmq/rabbitmq-server.git -pkg_rabbit_commit = master - -PACKAGES += rabbit_exchange_type_riak -pkg_rabbit_exchange_type_riak_name = rabbit_exchange_type_riak -pkg_rabbit_exchange_type_riak_description = Custom RabbitMQ exchange type for sticking messages in Riak -pkg_rabbit_exchange_type_riak_homepage = https://github.com/jbrisbin/riak-exchange -pkg_rabbit_exchange_type_riak_fetch = git -pkg_rabbit_exchange_type_riak_repo = https://github.com/jbrisbin/riak-exchange -pkg_rabbit_exchange_type_riak_commit = master - -PACKAGES += rack -pkg_rack_name = rack -pkg_rack_description = Rack handler for erlang -pkg_rack_homepage = https://github.com/erlyvideo/rack -pkg_rack_fetch = git -pkg_rack_repo = https://github.com/erlyvideo/rack -pkg_rack_commit = master - -PACKAGES += radierl -pkg_radierl_name = radierl -pkg_radierl_description = RADIUS protocol stack implemented in Erlang. -pkg_radierl_homepage = https://github.com/vances/radierl -pkg_radierl_fetch = git -pkg_radierl_repo = https://github.com/vances/radierl -pkg_radierl_commit = master - -PACKAGES += rafter -pkg_rafter_name = rafter -pkg_rafter_description = An Erlang library application which implements the Raft consensus protocol -pkg_rafter_homepage = https://github.com/andrewjstone/rafter -pkg_rafter_fetch = git -pkg_rafter_repo = https://github.com/andrewjstone/rafter -pkg_rafter_commit = master - -PACKAGES += ranch -pkg_ranch_name = ranch -pkg_ranch_description = Socket acceptor pool for TCP protocols. -pkg_ranch_homepage = https://ninenines.eu -pkg_ranch_fetch = git -pkg_ranch_repo = https://github.com/ninenines/ranch -pkg_ranch_commit = 1.2.1 - -PACKAGES += rbeacon -pkg_rbeacon_name = rbeacon -pkg_rbeacon_description = LAN discovery and presence in Erlang. -pkg_rbeacon_homepage = https://github.com/refuge/rbeacon -pkg_rbeacon_fetch = git -pkg_rbeacon_repo = https://github.com/refuge/rbeacon -pkg_rbeacon_commit = master - -PACKAGES += rebar -pkg_rebar_name = rebar -pkg_rebar_description = Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. -pkg_rebar_homepage = https://www.rebar3.org -pkg_rebar_fetch = git -pkg_rebar_repo = https://github.com/rebar/rebar3 -pkg_rebar_commit = master - -PACKAGES += rebus -pkg_rebus_name = rebus -pkg_rebus_description = A stupid simple, internal, pub/sub event bus written in- and for Erlang. -pkg_rebus_homepage = https://github.com/olle/rebus -pkg_rebus_fetch = git -pkg_rebus_repo = https://github.com/olle/rebus -pkg_rebus_commit = master - -PACKAGES += rec2json -pkg_rec2json_name = rec2json -pkg_rec2json_description = Compile erlang record definitions into modules to convert them to/from json easily. -pkg_rec2json_homepage = https://github.com/lordnull/rec2json -pkg_rec2json_fetch = git -pkg_rec2json_repo = https://github.com/lordnull/rec2json -pkg_rec2json_commit = master - -PACKAGES += recon -pkg_recon_name = recon -pkg_recon_description = Collection of functions and scripts to debug Erlang in production. -pkg_recon_homepage = https://github.com/ferd/recon -pkg_recon_fetch = git -pkg_recon_repo = https://github.com/ferd/recon -pkg_recon_commit = master - -PACKAGES += record_info -pkg_record_info_name = record_info -pkg_record_info_description = Convert between record and proplist -pkg_record_info_homepage = https://github.com/bipthelin/erlang-record_info -pkg_record_info_fetch = git -pkg_record_info_repo = https://github.com/bipthelin/erlang-record_info -pkg_record_info_commit = master - -PACKAGES += redgrid -pkg_redgrid_name = redgrid -pkg_redgrid_description = automatic Erlang node discovery via redis -pkg_redgrid_homepage = https://github.com/jkvor/redgrid -pkg_redgrid_fetch = git -pkg_redgrid_repo = https://github.com/jkvor/redgrid -pkg_redgrid_commit = master - -PACKAGES += redo -pkg_redo_name = redo -pkg_redo_description = pipelined erlang redis client -pkg_redo_homepage = https://github.com/jkvor/redo -pkg_redo_fetch = git -pkg_redo_repo = https://github.com/jkvor/redo -pkg_redo_commit = master - -PACKAGES += reload_mk -pkg_reload_mk_name = reload_mk -pkg_reload_mk_description = Live reload plugin for erlang.mk. -pkg_reload_mk_homepage = https://github.com/bullno1/reload.mk -pkg_reload_mk_fetch = git -pkg_reload_mk_repo = https://github.com/bullno1/reload.mk -pkg_reload_mk_commit = master - -PACKAGES += reltool_util -pkg_reltool_util_name = reltool_util -pkg_reltool_util_description = Erlang reltool utility functionality application -pkg_reltool_util_homepage = https://github.com/okeuday/reltool_util -pkg_reltool_util_fetch = git -pkg_reltool_util_repo = https://github.com/okeuday/reltool_util -pkg_reltool_util_commit = master - -PACKAGES += relx -pkg_relx_name = relx -pkg_relx_description = Sane, simple release creation for Erlang -pkg_relx_homepage = https://github.com/erlware/relx -pkg_relx_fetch = git -pkg_relx_repo = https://github.com/erlware/relx -pkg_relx_commit = master - -PACKAGES += resource_discovery -pkg_resource_discovery_name = resource_discovery -pkg_resource_discovery_description = An application used to dynamically discover resources present in an Erlang node cluster. -pkg_resource_discovery_homepage = https://erlware.org/ -pkg_resource_discovery_fetch = git -pkg_resource_discovery_repo = https://github.com/erlware/resource_discovery -pkg_resource_discovery_commit = master - -PACKAGES += restc -pkg_restc_name = restc -pkg_restc_description = Erlang Rest Client -pkg_restc_homepage = https://github.com/kivra/restclient -pkg_restc_fetch = git -pkg_restc_repo = https://github.com/kivra/restclient -pkg_restc_commit = master - -PACKAGES += rfc4627_jsonrpc -pkg_rfc4627_jsonrpc_name = rfc4627_jsonrpc -pkg_rfc4627_jsonrpc_description = Erlang RFC4627 (JSON) codec and JSON-RPC server implementation. -pkg_rfc4627_jsonrpc_homepage = https://github.com/tonyg/erlang-rfc4627 -pkg_rfc4627_jsonrpc_fetch = git -pkg_rfc4627_jsonrpc_repo = https://github.com/tonyg/erlang-rfc4627 -pkg_rfc4627_jsonrpc_commit = master - -PACKAGES += riak_control -pkg_riak_control_name = riak_control -pkg_riak_control_description = Webmachine-based administration interface for Riak. -pkg_riak_control_homepage = https://github.com/basho/riak_control -pkg_riak_control_fetch = git -pkg_riak_control_repo = https://github.com/basho/riak_control -pkg_riak_control_commit = master - -PACKAGES += riak_core -pkg_riak_core_name = riak_core -pkg_riak_core_description = Distributed systems infrastructure used by Riak. -pkg_riak_core_homepage = https://github.com/basho/riak_core -pkg_riak_core_fetch = git -pkg_riak_core_repo = https://github.com/basho/riak_core -pkg_riak_core_commit = master - -PACKAGES += riak_dt -pkg_riak_dt_name = riak_dt -pkg_riak_dt_description = Convergent replicated datatypes in Erlang -pkg_riak_dt_homepage = https://github.com/basho/riak_dt -pkg_riak_dt_fetch = git -pkg_riak_dt_repo = https://github.com/basho/riak_dt -pkg_riak_dt_commit = master - -PACKAGES += riak_ensemble -pkg_riak_ensemble_name = riak_ensemble -pkg_riak_ensemble_description = Multi-Paxos framework in Erlang -pkg_riak_ensemble_homepage = https://github.com/basho/riak_ensemble -pkg_riak_ensemble_fetch = git -pkg_riak_ensemble_repo = https://github.com/basho/riak_ensemble -pkg_riak_ensemble_commit = master - -PACKAGES += riak_kv -pkg_riak_kv_name = riak_kv -pkg_riak_kv_description = Riak Key/Value Store -pkg_riak_kv_homepage = https://github.com/basho/riak_kv -pkg_riak_kv_fetch = git -pkg_riak_kv_repo = https://github.com/basho/riak_kv -pkg_riak_kv_commit = master - -PACKAGES += riak_pg -pkg_riak_pg_name = riak_pg -pkg_riak_pg_description = Distributed process groups with riak_core. -pkg_riak_pg_homepage = https://github.com/cmeiklejohn/riak_pg -pkg_riak_pg_fetch = git -pkg_riak_pg_repo = https://github.com/cmeiklejohn/riak_pg -pkg_riak_pg_commit = master - -PACKAGES += riak_pipe -pkg_riak_pipe_name = riak_pipe -pkg_riak_pipe_description = Riak Pipelines -pkg_riak_pipe_homepage = https://github.com/basho/riak_pipe -pkg_riak_pipe_fetch = git -pkg_riak_pipe_repo = https://github.com/basho/riak_pipe -pkg_riak_pipe_commit = master - -PACKAGES += riak_sysmon -pkg_riak_sysmon_name = riak_sysmon -pkg_riak_sysmon_description = Simple OTP app for managing Erlang VM system_monitor event messages -pkg_riak_sysmon_homepage = https://github.com/basho/riak_sysmon -pkg_riak_sysmon_fetch = git -pkg_riak_sysmon_repo = https://github.com/basho/riak_sysmon -pkg_riak_sysmon_commit = master - -PACKAGES += riak_test -pkg_riak_test_name = riak_test -pkg_riak_test_description = I'm in your cluster, testing your riaks -pkg_riak_test_homepage = https://github.com/basho/riak_test -pkg_riak_test_fetch = git -pkg_riak_test_repo = https://github.com/basho/riak_test -pkg_riak_test_commit = master - -PACKAGES += riakc -pkg_riakc_name = riakc -pkg_riakc_description = Erlang clients for Riak. -pkg_riakc_homepage = https://github.com/basho/riak-erlang-client -pkg_riakc_fetch = git -pkg_riakc_repo = https://github.com/basho/riak-erlang-client -pkg_riakc_commit = master - -PACKAGES += riakhttpc -pkg_riakhttpc_name = riakhttpc -pkg_riakhttpc_description = Riak Erlang client using the HTTP interface -pkg_riakhttpc_homepage = https://github.com/basho/riak-erlang-http-client -pkg_riakhttpc_fetch = git -pkg_riakhttpc_repo = https://github.com/basho/riak-erlang-http-client -pkg_riakhttpc_commit = master - -PACKAGES += riaknostic -pkg_riaknostic_name = riaknostic -pkg_riaknostic_description = A diagnostic tool for Riak installations, to find common errors asap -pkg_riaknostic_homepage = https://github.com/basho/riaknostic -pkg_riaknostic_fetch = git -pkg_riaknostic_repo = https://github.com/basho/riaknostic -pkg_riaknostic_commit = master - -PACKAGES += riakpool -pkg_riakpool_name = riakpool -pkg_riakpool_description = erlang riak client pool -pkg_riakpool_homepage = https://github.com/dweldon/riakpool -pkg_riakpool_fetch = git -pkg_riakpool_repo = https://github.com/dweldon/riakpool -pkg_riakpool_commit = master - -PACKAGES += rivus_cep -pkg_rivus_cep_name = rivus_cep -pkg_rivus_cep_description = Complex event processing in Erlang -pkg_rivus_cep_homepage = https://github.com/vascokk/rivus_cep -pkg_rivus_cep_fetch = git -pkg_rivus_cep_repo = https://github.com/vascokk/rivus_cep -pkg_rivus_cep_commit = master - -PACKAGES += rlimit -pkg_rlimit_name = rlimit -pkg_rlimit_description = Magnus Klaar's rate limiter code from etorrent -pkg_rlimit_homepage = https://github.com/jlouis/rlimit -pkg_rlimit_fetch = git -pkg_rlimit_repo = https://github.com/jlouis/rlimit -pkg_rlimit_commit = master - -PACKAGES += rust_mk -pkg_rust_mk_name = rust_mk -pkg_rust_mk_description = Build Rust crates in an Erlang application -pkg_rust_mk_homepage = https://github.com/goertzenator/rust.mk -pkg_rust_mk_fetch = git -pkg_rust_mk_repo = https://github.com/goertzenator/rust.mk -pkg_rust_mk_commit = master - -PACKAGES += safetyvalve -pkg_safetyvalve_name = safetyvalve -pkg_safetyvalve_description = A safety valve for your erlang node -pkg_safetyvalve_homepage = https://github.com/jlouis/safetyvalve -pkg_safetyvalve_fetch = git -pkg_safetyvalve_repo = https://github.com/jlouis/safetyvalve -pkg_safetyvalve_commit = master - -PACKAGES += seestar -pkg_seestar_name = seestar -pkg_seestar_description = The Erlang client for Cassandra 1.2+ binary protocol -pkg_seestar_homepage = https://github.com/iamaleksey/seestar -pkg_seestar_fetch = git -pkg_seestar_repo = https://github.com/iamaleksey/seestar -pkg_seestar_commit = master - -PACKAGES += service -pkg_service_name = service -pkg_service_description = A minimal Erlang behavior for creating CloudI internal services -pkg_service_homepage = https://cloudi.org/ -pkg_service_fetch = git -pkg_service_repo = https://github.com/CloudI/service -pkg_service_commit = master - -PACKAGES += setup -pkg_setup_name = setup -pkg_setup_description = Generic setup utility for Erlang-based systems -pkg_setup_homepage = https://github.com/uwiger/setup -pkg_setup_fetch = git -pkg_setup_repo = https://github.com/uwiger/setup -pkg_setup_commit = master - -PACKAGES += sext -pkg_sext_name = sext -pkg_sext_description = Sortable Erlang Term Serialization -pkg_sext_homepage = https://github.com/uwiger/sext -pkg_sext_fetch = git -pkg_sext_repo = https://github.com/uwiger/sext -pkg_sext_commit = master - -PACKAGES += sfmt -pkg_sfmt_name = sfmt -pkg_sfmt_description = SFMT pseudo random number generator for Erlang. -pkg_sfmt_homepage = https://github.com/jj1bdx/sfmt-erlang -pkg_sfmt_fetch = git -pkg_sfmt_repo = https://github.com/jj1bdx/sfmt-erlang -pkg_sfmt_commit = master - -PACKAGES += sgte -pkg_sgte_name = sgte -pkg_sgte_description = A simple Erlang Template Engine -pkg_sgte_homepage = https://github.com/filippo/sgte -pkg_sgte_fetch = git -pkg_sgte_repo = https://github.com/filippo/sgte -pkg_sgte_commit = master - -PACKAGES += sheriff -pkg_sheriff_name = sheriff -pkg_sheriff_description = Parse transform for type based validation. -pkg_sheriff_homepage = https://ninenines.eu -pkg_sheriff_fetch = git -pkg_sheriff_repo = https://github.com/extend/sheriff -pkg_sheriff_commit = master - -PACKAGES += shotgun -pkg_shotgun_name = shotgun -pkg_shotgun_description = better than just a gun -pkg_shotgun_homepage = https://github.com/inaka/shotgun -pkg_shotgun_fetch = git -pkg_shotgun_repo = https://github.com/inaka/shotgun -pkg_shotgun_commit = master - -PACKAGES += sidejob -pkg_sidejob_name = sidejob -pkg_sidejob_description = Parallel worker and capacity limiting library for Erlang -pkg_sidejob_homepage = https://github.com/basho/sidejob -pkg_sidejob_fetch = git -pkg_sidejob_repo = https://github.com/basho/sidejob -pkg_sidejob_commit = master - -PACKAGES += sieve -pkg_sieve_name = sieve -pkg_sieve_description = sieve is a simple TCP routing proxy (layer 7) in erlang -pkg_sieve_homepage = https://github.com/benoitc/sieve -pkg_sieve_fetch = git -pkg_sieve_repo = https://github.com/benoitc/sieve -pkg_sieve_commit = master - -PACKAGES += sighandler -pkg_sighandler_name = sighandler -pkg_sighandler_description = Handle UNIX signals in Er lang -pkg_sighandler_homepage = https://github.com/jkingsbery/sighandler -pkg_sighandler_fetch = git -pkg_sighandler_repo = https://github.com/jkingsbery/sighandler -pkg_sighandler_commit = master - -PACKAGES += simhash -pkg_simhash_name = simhash -pkg_simhash_description = Simhashing for Erlang -- hashing algorithm to find near-duplicates in binary data. -pkg_simhash_homepage = https://github.com/ferd/simhash -pkg_simhash_fetch = git -pkg_simhash_repo = https://github.com/ferd/simhash -pkg_simhash_commit = master - -PACKAGES += simple_bridge -pkg_simple_bridge_name = simple_bridge -pkg_simple_bridge_description = A simple, standardized interface library to Erlang HTTP Servers. -pkg_simple_bridge_homepage = https://github.com/nitrogen/simple_bridge -pkg_simple_bridge_fetch = git -pkg_simple_bridge_repo = https://github.com/nitrogen/simple_bridge -pkg_simple_bridge_commit = master - -PACKAGES += simple_oauth2 -pkg_simple_oauth2_name = simple_oauth2 -pkg_simple_oauth2_description = Simple erlang OAuth2 client module for any http server framework (Google, Facebook, Yandex, Vkontakte are preconfigured) -pkg_simple_oauth2_homepage = https://github.com/virtan/simple_oauth2 -pkg_simple_oauth2_fetch = git -pkg_simple_oauth2_repo = https://github.com/virtan/simple_oauth2 -pkg_simple_oauth2_commit = master - -PACKAGES += skel -pkg_skel_name = skel -pkg_skel_description = A Streaming Process-based Skeleton Library for Erlang -pkg_skel_homepage = https://github.com/ParaPhrase/skel -pkg_skel_fetch = git -pkg_skel_repo = https://github.com/ParaPhrase/skel -pkg_skel_commit = master - -PACKAGES += slack -pkg_slack_name = slack -pkg_slack_description = Minimal slack notification OTP library. -pkg_slack_homepage = https://github.com/DonBranson/slack -pkg_slack_fetch = git -pkg_slack_repo = https://github.com/DonBranson/slack.git -pkg_slack_commit = master - -PACKAGES += smother -pkg_smother_name = smother -pkg_smother_description = Extended code coverage metrics for Erlang. -pkg_smother_homepage = https://ramsay-t.github.io/Smother/ -pkg_smother_fetch = git -pkg_smother_repo = https://github.com/ramsay-t/Smother -pkg_smother_commit = master - -PACKAGES += snappyer -pkg_snappyer_name = snappyer -pkg_snappyer_description = Snappy as nif for Erlang -pkg_snappyer_homepage = https://github.com/zmstone/snappyer -pkg_snappyer_fetch = git -pkg_snappyer_repo = https://github.com/zmstone/snappyer.git -pkg_snappyer_commit = master - -PACKAGES += social -pkg_social_name = social -pkg_social_description = Cowboy handler for social login via OAuth2 providers -pkg_social_homepage = https://github.com/dvv/social -pkg_social_fetch = git -pkg_social_repo = https://github.com/dvv/social -pkg_social_commit = master - -PACKAGES += spapi_router -pkg_spapi_router_name = spapi_router -pkg_spapi_router_description = Partially-connected Erlang clustering -pkg_spapi_router_homepage = https://github.com/spilgames/spapi-router -pkg_spapi_router_fetch = git -pkg_spapi_router_repo = https://github.com/spilgames/spapi-router -pkg_spapi_router_commit = master - -PACKAGES += sqerl -pkg_sqerl_name = sqerl -pkg_sqerl_description = An Erlang-flavoured SQL DSL -pkg_sqerl_homepage = https://github.com/hairyhum/sqerl -pkg_sqerl_fetch = git -pkg_sqerl_repo = https://github.com/hairyhum/sqerl -pkg_sqerl_commit = master - -PACKAGES += srly -pkg_srly_name = srly -pkg_srly_description = Native Erlang Unix serial interface -pkg_srly_homepage = https://github.com/msantos/srly -pkg_srly_fetch = git -pkg_srly_repo = https://github.com/msantos/srly -pkg_srly_commit = master - -PACKAGES += sshrpc -pkg_sshrpc_name = sshrpc -pkg_sshrpc_description = Erlang SSH RPC module (experimental) -pkg_sshrpc_homepage = https://github.com/jj1bdx/sshrpc -pkg_sshrpc_fetch = git -pkg_sshrpc_repo = https://github.com/jj1bdx/sshrpc -pkg_sshrpc_commit = master - -PACKAGES += stable -pkg_stable_name = stable -pkg_stable_description = Library of assorted helpers for Cowboy web server. -pkg_stable_homepage = https://github.com/dvv/stable -pkg_stable_fetch = git -pkg_stable_repo = https://github.com/dvv/stable -pkg_stable_commit = master - -PACKAGES += statebox -pkg_statebox_name = statebox -pkg_statebox_description = Erlang state monad with merge/conflict-resolution capabilities. Useful for Riak. -pkg_statebox_homepage = https://github.com/mochi/statebox -pkg_statebox_fetch = git -pkg_statebox_repo = https://github.com/mochi/statebox -pkg_statebox_commit = master - -PACKAGES += statebox_riak -pkg_statebox_riak_name = statebox_riak -pkg_statebox_riak_description = Convenience library that makes it easier to use statebox with riak, extracted from best practices in our production code at Mochi Media. -pkg_statebox_riak_homepage = https://github.com/mochi/statebox_riak -pkg_statebox_riak_fetch = git -pkg_statebox_riak_repo = https://github.com/mochi/statebox_riak -pkg_statebox_riak_commit = master - -PACKAGES += statman -pkg_statman_name = statman -pkg_statman_description = Efficiently collect massive volumes of metrics inside the Erlang VM -pkg_statman_homepage = https://github.com/knutin/statman -pkg_statman_fetch = git -pkg_statman_repo = https://github.com/knutin/statman -pkg_statman_commit = master - -PACKAGES += statsderl -pkg_statsderl_name = statsderl -pkg_statsderl_description = StatsD client (erlang) -pkg_statsderl_homepage = https://github.com/lpgauth/statsderl -pkg_statsderl_fetch = git -pkg_statsderl_repo = https://github.com/lpgauth/statsderl -pkg_statsderl_commit = master - -PACKAGES += stdinout_pool -pkg_stdinout_pool_name = stdinout_pool -pkg_stdinout_pool_description = stdinout_pool : stuff goes in, stuff goes out. there's never any miscommunication. -pkg_stdinout_pool_homepage = https://github.com/mattsta/erlang-stdinout-pool -pkg_stdinout_pool_fetch = git -pkg_stdinout_pool_repo = https://github.com/mattsta/erlang-stdinout-pool -pkg_stdinout_pool_commit = master - -PACKAGES += stockdb -pkg_stockdb_name = stockdb -pkg_stockdb_description = Database for storing Stock Exchange quotes in erlang -pkg_stockdb_homepage = https://github.com/maxlapshin/stockdb -pkg_stockdb_fetch = git -pkg_stockdb_repo = https://github.com/maxlapshin/stockdb -pkg_stockdb_commit = master - -PACKAGES += stripe -pkg_stripe_name = stripe -pkg_stripe_description = Erlang interface to the stripe.com API -pkg_stripe_homepage = https://github.com/mattsta/stripe-erlang -pkg_stripe_fetch = git -pkg_stripe_repo = https://github.com/mattsta/stripe-erlang -pkg_stripe_commit = v1 - -PACKAGES += subproc -pkg_subproc_name = subproc -pkg_subproc_description = unix subprocess manager with {active,once|false} modes -pkg_subproc_homepage = http://dozzie.jarowit.net/trac/wiki/subproc -pkg_subproc_fetch = git -pkg_subproc_repo = https://github.com/dozzie/subproc -pkg_subproc_commit = v0.1.0 - -PACKAGES += supervisor3 -pkg_supervisor3_name = supervisor3 -pkg_supervisor3_description = OTP supervisor with additional strategies -pkg_supervisor3_homepage = https://github.com/klarna/supervisor3 -pkg_supervisor3_fetch = git -pkg_supervisor3_repo = https://github.com/klarna/supervisor3.git -pkg_supervisor3_commit = master - -PACKAGES += surrogate -pkg_surrogate_name = surrogate -pkg_surrogate_description = Proxy server written in erlang. Supports reverse proxy load balancing and forward proxy with http (including CONNECT), socks4, socks5, and transparent proxy modes. -pkg_surrogate_homepage = https://github.com/skruger/Surrogate -pkg_surrogate_fetch = git -pkg_surrogate_repo = https://github.com/skruger/Surrogate -pkg_surrogate_commit = master - -PACKAGES += swab -pkg_swab_name = swab -pkg_swab_description = General purpose buffer handling module -pkg_swab_homepage = https://github.com/crownedgrouse/swab -pkg_swab_fetch = git -pkg_swab_repo = https://github.com/crownedgrouse/swab -pkg_swab_commit = master - -PACKAGES += swarm -pkg_swarm_name = swarm -pkg_swarm_description = Fast and simple acceptor pool for Erlang -pkg_swarm_homepage = https://github.com/jeremey/swarm -pkg_swarm_fetch = git -pkg_swarm_repo = https://github.com/jeremey/swarm -pkg_swarm_commit = master - -PACKAGES += switchboard -pkg_switchboard_name = switchboard -pkg_switchboard_description = A framework for processing email using worker plugins. -pkg_switchboard_homepage = https://github.com/thusfresh/switchboard -pkg_switchboard_fetch = git -pkg_switchboard_repo = https://github.com/thusfresh/switchboard -pkg_switchboard_commit = master - -PACKAGES += syn -pkg_syn_name = syn -pkg_syn_description = A global Process Registry and Process Group manager for Erlang. -pkg_syn_homepage = https://github.com/ostinelli/syn -pkg_syn_fetch = git -pkg_syn_repo = https://github.com/ostinelli/syn -pkg_syn_commit = master - -PACKAGES += sync -pkg_sync_name = sync -pkg_sync_description = On-the-fly recompiling and reloading in Erlang. -pkg_sync_homepage = https://github.com/rustyio/sync -pkg_sync_fetch = git -pkg_sync_repo = https://github.com/rustyio/sync -pkg_sync_commit = master - -PACKAGES += syntaxerl -pkg_syntaxerl_name = syntaxerl -pkg_syntaxerl_description = Syntax checker for Erlang -pkg_syntaxerl_homepage = https://github.com/ten0s/syntaxerl -pkg_syntaxerl_fetch = git -pkg_syntaxerl_repo = https://github.com/ten0s/syntaxerl -pkg_syntaxerl_commit = master - -PACKAGES += syslog -pkg_syslog_name = syslog -pkg_syslog_description = Erlang port driver for interacting with syslog via syslog(3) -pkg_syslog_homepage = https://github.com/Vagabond/erlang-syslog -pkg_syslog_fetch = git -pkg_syslog_repo = https://github.com/Vagabond/erlang-syslog -pkg_syslog_commit = master - -PACKAGES += taskforce -pkg_taskforce_name = taskforce -pkg_taskforce_description = Erlang worker pools for controlled parallelisation of arbitrary tasks. -pkg_taskforce_homepage = https://github.com/g-andrade/taskforce -pkg_taskforce_fetch = git -pkg_taskforce_repo = https://github.com/g-andrade/taskforce -pkg_taskforce_commit = master - -PACKAGES += tddreloader -pkg_tddreloader_name = tddreloader -pkg_tddreloader_description = Shell utility for recompiling, reloading, and testing code as it changes -pkg_tddreloader_homepage = https://github.com/version2beta/tddreloader -pkg_tddreloader_fetch = git -pkg_tddreloader_repo = https://github.com/version2beta/tddreloader -pkg_tddreloader_commit = master - -PACKAGES += tempo -pkg_tempo_name = tempo -pkg_tempo_description = NIF-based date and time parsing and formatting for Erlang. -pkg_tempo_homepage = https://github.com/selectel/tempo -pkg_tempo_fetch = git -pkg_tempo_repo = https://github.com/selectel/tempo -pkg_tempo_commit = master - -PACKAGES += ticktick -pkg_ticktick_name = ticktick -pkg_ticktick_description = Ticktick is an id generator for message service. -pkg_ticktick_homepage = https://github.com/ericliang/ticktick -pkg_ticktick_fetch = git -pkg_ticktick_repo = https://github.com/ericliang/ticktick -pkg_ticktick_commit = master - -PACKAGES += tinymq -pkg_tinymq_name = tinymq -pkg_tinymq_description = TinyMQ - a diminutive, in-memory message queue -pkg_tinymq_homepage = https://github.com/ChicagoBoss/tinymq -pkg_tinymq_fetch = git -pkg_tinymq_repo = https://github.com/ChicagoBoss/tinymq -pkg_tinymq_commit = master - -PACKAGES += tinymt -pkg_tinymt_name = tinymt -pkg_tinymt_description = TinyMT pseudo random number generator for Erlang. -pkg_tinymt_homepage = https://github.com/jj1bdx/tinymt-erlang -pkg_tinymt_fetch = git -pkg_tinymt_repo = https://github.com/jj1bdx/tinymt-erlang -pkg_tinymt_commit = master - -PACKAGES += tirerl -pkg_tirerl_name = tirerl -pkg_tirerl_description = Erlang interface to Elastic Search -pkg_tirerl_homepage = https://github.com/inaka/tirerl -pkg_tirerl_fetch = git -pkg_tirerl_repo = https://github.com/inaka/tirerl -pkg_tirerl_commit = master - -PACKAGES += toml -pkg_toml_name = toml -pkg_toml_description = TOML (0.4.0) config parser -pkg_toml_homepage = http://dozzie.jarowit.net/trac/wiki/TOML -pkg_toml_fetch = git -pkg_toml_repo = https://github.com/dozzie/toml -pkg_toml_commit = v0.2.0 - -PACKAGES += traffic_tools -pkg_traffic_tools_name = traffic_tools -pkg_traffic_tools_description = Simple traffic limiting library -pkg_traffic_tools_homepage = https://github.com/systra/traffic_tools -pkg_traffic_tools_fetch = git -pkg_traffic_tools_repo = https://github.com/systra/traffic_tools -pkg_traffic_tools_commit = master - -PACKAGES += trails -pkg_trails_name = trails -pkg_trails_description = A couple of improvements over Cowboy Routes -pkg_trails_homepage = https://inaka.github.io/cowboy-trails/ -pkg_trails_fetch = git -pkg_trails_repo = https://github.com/inaka/cowboy-trails -pkg_trails_commit = master - -PACKAGES += trane -pkg_trane_name = trane -pkg_trane_description = SAX style broken HTML parser in Erlang -pkg_trane_homepage = https://github.com/massemanet/trane -pkg_trane_fetch = git -pkg_trane_repo = https://github.com/massemanet/trane -pkg_trane_commit = master - -PACKAGES += transit -pkg_transit_name = transit -pkg_transit_description = transit format for erlang -pkg_transit_homepage = https://github.com/isaiah/transit-erlang -pkg_transit_fetch = git -pkg_transit_repo = https://github.com/isaiah/transit-erlang -pkg_transit_commit = master - -PACKAGES += trie -pkg_trie_name = trie -pkg_trie_description = Erlang Trie Implementation -pkg_trie_homepage = https://github.com/okeuday/trie -pkg_trie_fetch = git -pkg_trie_repo = https://github.com/okeuday/trie -pkg_trie_commit = master - -PACKAGES += triq -pkg_triq_name = triq -pkg_triq_description = Trifork QuickCheck -pkg_triq_homepage = https://triq.gitlab.io -pkg_triq_fetch = git -pkg_triq_repo = https://gitlab.com/triq/triq.git -pkg_triq_commit = master - -PACKAGES += tunctl -pkg_tunctl_name = tunctl -pkg_tunctl_description = Erlang TUN/TAP interface -pkg_tunctl_homepage = https://github.com/msantos/tunctl -pkg_tunctl_fetch = git -pkg_tunctl_repo = https://github.com/msantos/tunctl -pkg_tunctl_commit = master - -PACKAGES += twerl -pkg_twerl_name = twerl -pkg_twerl_description = Erlang client for the Twitter Streaming API -pkg_twerl_homepage = https://github.com/lucaspiller/twerl -pkg_twerl_fetch = git -pkg_twerl_repo = https://github.com/lucaspiller/twerl -pkg_twerl_commit = oauth - -PACKAGES += twitter_erlang -pkg_twitter_erlang_name = twitter_erlang -pkg_twitter_erlang_description = An Erlang twitter client -pkg_twitter_erlang_homepage = https://github.com/ngerakines/erlang_twitter -pkg_twitter_erlang_fetch = git -pkg_twitter_erlang_repo = https://github.com/ngerakines/erlang_twitter -pkg_twitter_erlang_commit = master - -PACKAGES += ucol_nif -pkg_ucol_nif_name = ucol_nif -pkg_ucol_nif_description = ICU based collation Erlang module -pkg_ucol_nif_homepage = https://github.com/refuge/ucol_nif -pkg_ucol_nif_fetch = git -pkg_ucol_nif_repo = https://github.com/refuge/ucol_nif -pkg_ucol_nif_commit = master - -PACKAGES += unicorn -pkg_unicorn_name = unicorn -pkg_unicorn_description = Generic configuration server -pkg_unicorn_homepage = https://github.com/shizzard/unicorn -pkg_unicorn_fetch = git -pkg_unicorn_repo = https://github.com/shizzard/unicorn -pkg_unicorn_commit = master - -PACKAGES += unsplit -pkg_unsplit_name = unsplit -pkg_unsplit_description = Resolves conflicts in Mnesia after network splits -pkg_unsplit_homepage = https://github.com/uwiger/unsplit -pkg_unsplit_fetch = git -pkg_unsplit_repo = https://github.com/uwiger/unsplit -pkg_unsplit_commit = master - -PACKAGES += uuid -pkg_uuid_name = uuid -pkg_uuid_description = Erlang UUID Implementation -pkg_uuid_homepage = https://github.com/okeuday/uuid -pkg_uuid_fetch = git -pkg_uuid_repo = https://github.com/okeuday/uuid -pkg_uuid_commit = master - -PACKAGES += ux -pkg_ux_name = ux -pkg_ux_description = Unicode eXtention for Erlang (Strings, Collation) -pkg_ux_homepage = https://github.com/erlang-unicode/ux -pkg_ux_fetch = git -pkg_ux_repo = https://github.com/erlang-unicode/ux -pkg_ux_commit = master - -PACKAGES += vert -pkg_vert_name = vert -pkg_vert_description = Erlang binding to libvirt virtualization API -pkg_vert_homepage = https://github.com/msantos/erlang-libvirt -pkg_vert_fetch = git -pkg_vert_repo = https://github.com/msantos/erlang-libvirt -pkg_vert_commit = master - -PACKAGES += verx -pkg_verx_name = verx -pkg_verx_description = Erlang implementation of the libvirtd remote protocol -pkg_verx_homepage = https://github.com/msantos/verx -pkg_verx_fetch = git -pkg_verx_repo = https://github.com/msantos/verx -pkg_verx_commit = master - -PACKAGES += vmq_acl -pkg_vmq_acl_name = vmq_acl -pkg_vmq_acl_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_acl_homepage = https://verne.mq/ -pkg_vmq_acl_fetch = git -pkg_vmq_acl_repo = https://github.com/erlio/vmq_acl -pkg_vmq_acl_commit = master - -PACKAGES += vmq_bridge -pkg_vmq_bridge_name = vmq_bridge -pkg_vmq_bridge_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_bridge_homepage = https://verne.mq/ -pkg_vmq_bridge_fetch = git -pkg_vmq_bridge_repo = https://github.com/erlio/vmq_bridge -pkg_vmq_bridge_commit = master - -PACKAGES += vmq_graphite -pkg_vmq_graphite_name = vmq_graphite -pkg_vmq_graphite_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_graphite_homepage = https://verne.mq/ -pkg_vmq_graphite_fetch = git -pkg_vmq_graphite_repo = https://github.com/erlio/vmq_graphite -pkg_vmq_graphite_commit = master - -PACKAGES += vmq_passwd -pkg_vmq_passwd_name = vmq_passwd -pkg_vmq_passwd_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_passwd_homepage = https://verne.mq/ -pkg_vmq_passwd_fetch = git -pkg_vmq_passwd_repo = https://github.com/erlio/vmq_passwd -pkg_vmq_passwd_commit = master - -PACKAGES += vmq_server -pkg_vmq_server_name = vmq_server -pkg_vmq_server_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_server_homepage = https://verne.mq/ -pkg_vmq_server_fetch = git -pkg_vmq_server_repo = https://github.com/erlio/vmq_server -pkg_vmq_server_commit = master - -PACKAGES += vmq_snmp -pkg_vmq_snmp_name = vmq_snmp -pkg_vmq_snmp_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_snmp_homepage = https://verne.mq/ -pkg_vmq_snmp_fetch = git -pkg_vmq_snmp_repo = https://github.com/erlio/vmq_snmp -pkg_vmq_snmp_commit = master - -PACKAGES += vmq_systree -pkg_vmq_systree_name = vmq_systree -pkg_vmq_systree_description = Component of VerneMQ: A distributed MQTT message broker -pkg_vmq_systree_homepage = https://verne.mq/ -pkg_vmq_systree_fetch = git -pkg_vmq_systree_repo = https://github.com/erlio/vmq_systree -pkg_vmq_systree_commit = master - -PACKAGES += vmstats -pkg_vmstats_name = vmstats -pkg_vmstats_description = tiny Erlang app that works in conjunction with statsderl in order to generate information on the Erlang VM for graphite logs. -pkg_vmstats_homepage = https://github.com/ferd/vmstats -pkg_vmstats_fetch = git -pkg_vmstats_repo = https://github.com/ferd/vmstats -pkg_vmstats_commit = master - -PACKAGES += walrus -pkg_walrus_name = walrus -pkg_walrus_description = Walrus - Mustache-like Templating -pkg_walrus_homepage = https://github.com/devinus/walrus -pkg_walrus_fetch = git -pkg_walrus_repo = https://github.com/devinus/walrus -pkg_walrus_commit = master - -PACKAGES += webmachine -pkg_webmachine_name = webmachine -pkg_webmachine_description = A REST-based system for building web applications. -pkg_webmachine_homepage = https://github.com/basho/webmachine -pkg_webmachine_fetch = git -pkg_webmachine_repo = https://github.com/basho/webmachine -pkg_webmachine_commit = master - -PACKAGES += websocket_client -pkg_websocket_client_name = websocket_client -pkg_websocket_client_description = Erlang websocket client (ws and wss supported) -pkg_websocket_client_homepage = https://github.com/jeremyong/websocket_client -pkg_websocket_client_fetch = git -pkg_websocket_client_repo = https://github.com/jeremyong/websocket_client -pkg_websocket_client_commit = master - -PACKAGES += worker_pool -pkg_worker_pool_name = worker_pool -pkg_worker_pool_description = a simple erlang worker pool -pkg_worker_pool_homepage = https://github.com/inaka/worker_pool -pkg_worker_pool_fetch = git -pkg_worker_pool_repo = https://github.com/inaka/worker_pool -pkg_worker_pool_commit = master - -PACKAGES += wrangler -pkg_wrangler_name = wrangler -pkg_wrangler_description = Import of the Wrangler svn repository. -pkg_wrangler_homepage = https://www.cs.kent.ac.uk/projects/wrangler/Home.html -pkg_wrangler_fetch = git -pkg_wrangler_repo = https://github.com/RefactoringTools/wrangler -pkg_wrangler_commit = master - -PACKAGES += wsock -pkg_wsock_name = wsock -pkg_wsock_description = Erlang library to build WebSocket clients and servers -pkg_wsock_homepage = https://github.com/madtrick/wsock -pkg_wsock_fetch = git -pkg_wsock_repo = https://github.com/madtrick/wsock -pkg_wsock_commit = master - -PACKAGES += xhttpc -pkg_xhttpc_name = xhttpc -pkg_xhttpc_description = Extensible HTTP Client for Erlang -pkg_xhttpc_homepage = https://github.com/seriyps/xhttpc -pkg_xhttpc_fetch = git -pkg_xhttpc_repo = https://github.com/seriyps/xhttpc -pkg_xhttpc_commit = master - -PACKAGES += xref_runner -pkg_xref_runner_name = xref_runner -pkg_xref_runner_description = Erlang Xref Runner (inspired in rebar xref) -pkg_xref_runner_homepage = https://github.com/inaka/xref_runner -pkg_xref_runner_fetch = git -pkg_xref_runner_repo = https://github.com/inaka/xref_runner -pkg_xref_runner_commit = master - -PACKAGES += yamerl -pkg_yamerl_name = yamerl -pkg_yamerl_description = YAML 1.2 parser in pure Erlang -pkg_yamerl_homepage = https://github.com/yakaz/yamerl -pkg_yamerl_fetch = git -pkg_yamerl_repo = https://github.com/yakaz/yamerl -pkg_yamerl_commit = master - -PACKAGES += yamler -pkg_yamler_name = yamler -pkg_yamler_description = libyaml-based yaml loader for Erlang -pkg_yamler_homepage = https://github.com/goertzenator/yamler -pkg_yamler_fetch = git -pkg_yamler_repo = https://github.com/goertzenator/yamler -pkg_yamler_commit = master - -PACKAGES += yaws -pkg_yaws_name = yaws -pkg_yaws_description = Yaws webserver -pkg_yaws_homepage = http://yaws.hyber.org -pkg_yaws_fetch = git -pkg_yaws_repo = https://github.com/klacke/yaws -pkg_yaws_commit = master - -PACKAGES += zab_engine -pkg_zab_engine_name = zab_engine -pkg_zab_engine_description = zab propotocol implement by erlang -pkg_zab_engine_homepage = https://github.com/xinmingyao/zab_engine -pkg_zab_engine_fetch = git -pkg_zab_engine_repo = https://github.com/xinmingyao/zab_engine -pkg_zab_engine_commit = master - -PACKAGES += zabbix_sender -pkg_zabbix_sender_name = zabbix_sender -pkg_zabbix_sender_description = Zabbix trapper for sending data to Zabbix in pure Erlang -pkg_zabbix_sender_homepage = https://github.com/stalkermn/zabbix_sender -pkg_zabbix_sender_fetch = git -pkg_zabbix_sender_repo = https://github.com/stalkermn/zabbix_sender.git -pkg_zabbix_sender_commit = master - -PACKAGES += zeta -pkg_zeta_name = zeta -pkg_zeta_description = HTTP access log parser in Erlang -pkg_zeta_homepage = https://github.com/s1n4/zeta -pkg_zeta_fetch = git -pkg_zeta_repo = https://github.com/s1n4/zeta -pkg_zeta_commit = master - -PACKAGES += zippers -pkg_zippers_name = zippers -pkg_zippers_description = A library for functional zipper data structures in Erlang. Read more on zippers -pkg_zippers_homepage = https://github.com/ferd/zippers -pkg_zippers_fetch = git -pkg_zippers_repo = https://github.com/ferd/zippers -pkg_zippers_commit = master - -PACKAGES += zlists -pkg_zlists_name = zlists -pkg_zlists_description = Erlang lazy lists library. -pkg_zlists_homepage = https://github.com/vjache/erlang-zlists -pkg_zlists_fetch = git -pkg_zlists_repo = https://github.com/vjache/erlang-zlists -pkg_zlists_commit = master - -PACKAGES += zraft_lib -pkg_zraft_lib_name = zraft_lib -pkg_zraft_lib_description = Erlang raft consensus protocol implementation -pkg_zraft_lib_homepage = https://github.com/dreyk/zraft_lib -pkg_zraft_lib_fetch = git -pkg_zraft_lib_repo = https://github.com/dreyk/zraft_lib -pkg_zraft_lib_commit = master - -PACKAGES += zucchini -pkg_zucchini_name = zucchini -pkg_zucchini_description = An Erlang INI parser -pkg_zucchini_homepage = https://github.com/devinus/zucchini -pkg_zucchini_fetch = git -pkg_zucchini_repo = https://github.com/devinus/zucchini -pkg_zucchini_commit = master - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: search - -define pkg_print - $(verbose) printf "%s\n" \ - $(if $(call core_eq,$(1),$(pkg_$(1)_name)),,"Pkg name: $(1)") \ - "App name: $(pkg_$(1)_name)" \ - "Description: $(pkg_$(1)_description)" \ - "Home page: $(pkg_$(1)_homepage)" \ - "Fetch with: $(pkg_$(1)_fetch)" \ - "Repository: $(pkg_$(1)_repo)" \ - "Commit: $(pkg_$(1)_commit)" \ - "" - -endef - -search: -ifdef q - $(foreach p,$(PACKAGES), \ - $(if $(findstring $(call core_lc,$(q)),$(call core_lc,$(pkg_$(p)_name) $(pkg_$(p)_description))), \ - $(call pkg_print,$(p)))) -else - $(foreach p,$(PACKAGES),$(call pkg_print,$(p))) -endif - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: distclean-deps clean-tmp-deps.log - -# Configuration. - -ifdef OTP_DEPS -$(warning The variable OTP_DEPS is deprecated in favor of LOCAL_DEPS.) -endif - -IGNORE_DEPS ?= -export IGNORE_DEPS - -APPS_DIR ?= $(CURDIR)/apps -export APPS_DIR - -DEPS_DIR ?= $(CURDIR)/deps -export DEPS_DIR - -REBAR_DEPS_DIR = $(DEPS_DIR) -export REBAR_DEPS_DIR - -REBAR_GIT ?= https://github.com/rebar/rebar -REBAR_COMMIT ?= 576e12171ab8d69b048b827b92aa65d067deea01 - -# External "early" plugins (see core/plugins.mk for regular plugins). -# They both use the core_dep_plugin macro. - -define core_dep_plugin -ifeq ($(2),$(PROJECT)) --include $$(patsubst $(PROJECT)/%,%,$(1)) -else --include $(DEPS_DIR)/$(1) - -$(DEPS_DIR)/$(1): $(DEPS_DIR)/$(2) ; -endif -endef - -DEP_EARLY_PLUGINS ?= - -$(foreach p,$(DEP_EARLY_PLUGINS),\ - $(eval $(if $(findstring /,$p),\ - $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ - $(call core_dep_plugin,$p/early-plugins.mk,$p)))) - -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) -dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) - -LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) -ALL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(foreach dep,$(filter-out $(IGNORE_DEPS),$(BUILD_DEPS) $(DEPS)),$(call dep_name,$(dep)))) - -# When we are calling an app directly we don't want to include it here -# otherwise it'll be treated both as an apps and a top-level project. -ALL_APPS_DIRS = $(if $(wildcard $(APPS_DIR)/),$(filter-out $(APPS_DIR),$(shell find $(APPS_DIR) -maxdepth 1 -type d))) -ifdef ROOT_DIR -ifndef IS_APP -ALL_APPS_DIRS := $(filter-out $(APPS_DIR)/$(notdir $(CURDIR)),$(ALL_APPS_DIRS)) -endif -endif - -ifeq ($(filter $(APPS_DIR) $(DEPS_DIR),$(subst :, ,$(ERL_LIBS))),) -ifeq ($(ERL_LIBS),) - ERL_LIBS = $(APPS_DIR):$(DEPS_DIR) -else - ERL_LIBS := $(ERL_LIBS):$(APPS_DIR):$(DEPS_DIR) -endif -endif -export ERL_LIBS - -export NO_AUTOPATCH - -# Verbosity. - -dep_verbose_0 = @echo " DEP $1 ($(call dep_commit,$1))"; -dep_verbose_2 = set -x; -dep_verbose = $(dep_verbose_$(V)) - -# Optimization: don't recompile deps unless truly necessary. - -ifndef IS_DEP -ifneq ($(MAKELEVEL),0) -$(shell rm -f ebin/dep_built) -endif -endif - -# Core targets. - -ALL_APPS_DIRS_TO_BUILD = $(if $(LOCAL_DEPS_DIRS)$(IS_APP),$(LOCAL_DEPS_DIRS),$(ALL_APPS_DIRS)) - -apps:: $(ALL_APPS_DIRS) clean-tmp-deps.log | $(ERLANG_MK_TMP) -# Create ebin directory for all apps to make sure Erlang recognizes them -# as proper OTP applications when using -include_lib. This is a temporary -# fix, a proper fix would be to compile apps/* in the right order. -ifndef IS_APP -ifneq ($(ALL_APPS_DIRS),) - $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ - mkdir -p $$dep/ebin; \ - done -endif -endif -# At the toplevel: if LOCAL_DEPS is defined with at least one local app, only -# compile that list of apps. Otherwise, compile everything. -# Within an app: compile all LOCAL_DEPS that are (uncompiled) local apps. -ifneq ($(ALL_APPS_DIRS_TO_BUILD),) - $(verbose) set -e; for dep in $(ALL_APPS_DIRS_TO_BUILD); do \ - if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/apps.log; then \ - :; \ - else \ - echo $$dep >> $(ERLANG_MK_TMP)/apps.log; \ - $(MAKE) -C $$dep $(if $(IS_TEST),test-build-app) IS_APP=1; \ - fi \ - done -endif - -clean-tmp-deps.log: -ifeq ($(IS_APP)$(IS_DEP),) - $(verbose) rm -f $(ERLANG_MK_TMP)/apps.log $(ERLANG_MK_TMP)/deps.log -endif - -ifneq ($(SKIP_DEPS),) -deps:: -else -deps:: $(ALL_DEPS_DIRS) apps clean-tmp-deps.log | $(ERLANG_MK_TMP) -ifneq ($(ALL_DEPS_DIRS),) - $(verbose) set -e; for dep in $(ALL_DEPS_DIRS); do \ - if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \ - :; \ - else \ - echo $$dep >> $(ERLANG_MK_TMP)/deps.log; \ - if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ - :; \ - elif [ -f $$dep/GNUmakefile ] || [ -f $$dep/makefile ] || [ -f $$dep/Makefile ]; then \ - $(MAKE) -C $$dep IS_DEP=1; \ - if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ - else \ - echo "Error: No Makefile to build dependency $$dep." >&2; \ - exit 2; \ - fi \ - fi \ - done -endif -endif - -# Deps related targets. - -# @todo rename GNUmakefile and makefile into Makefile first, if they exist -# While Makefile file could be GNUmakefile or makefile, -# in practice only Makefile is needed so far. -define dep_autopatch - if [ -f $(DEPS_DIR)/$(1)/erlang.mk ]; then \ - rm -rf $(DEPS_DIR)/$1/ebin/; \ - $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ - $(call dep_autopatch_erlang_mk,$(1)); \ - elif [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ - if [ -f $(DEPS_DIR)/$1/rebar.lock ]; then \ - $(call dep_autopatch2,$1); \ - elif [ 0 != `grep -c "include ../\w*\.mk" $(DEPS_DIR)/$(1)/Makefile` ]; then \ - $(call dep_autopatch2,$(1)); \ - elif [ 0 != `grep -ci "^[^#].*rebar" $(DEPS_DIR)/$(1)/Makefile` ]; then \ - $(call dep_autopatch2,$(1)); \ - elif [ -n "`find $(DEPS_DIR)/$(1)/ -type f -name \*.mk -not -name erlang.mk -exec grep -i "^[^#].*rebar" '{}' \;`" ]; then \ - $(call dep_autopatch2,$(1)); \ - fi \ - else \ - if [ ! -d $(DEPS_DIR)/$(1)/src/ ]; then \ - $(call dep_autopatch_noop,$(1)); \ - else \ - $(call dep_autopatch2,$(1)); \ - fi \ - fi -endef - -define dep_autopatch2 - ! test -f $(DEPS_DIR)/$1/ebin/$1.app || \ - mv -n $(DEPS_DIR)/$1/ebin/$1.app $(DEPS_DIR)/$1/src/$1.app.src; \ - rm -f $(DEPS_DIR)/$1/ebin/$1.app; \ - if [ -f $(DEPS_DIR)/$1/src/$1.app.src.script ]; then \ - $(call erlang,$(call dep_autopatch_appsrc_script.erl,$(1))); \ - fi; \ - $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ - if [ -f $(DEPS_DIR)/$(1)/rebar -o -f $(DEPS_DIR)/$(1)/rebar.config -o -f $(DEPS_DIR)/$(1)/rebar.config.script -o -f $(DEPS_DIR)/$1/rebar.lock ]; then \ - $(call dep_autopatch_fetch_rebar); \ - $(call dep_autopatch_rebar,$(1)); \ - else \ - $(call dep_autopatch_gen,$(1)); \ - fi -endef - -define dep_autopatch_noop - printf "noop:\n" > $(DEPS_DIR)/$(1)/Makefile -endef - -# Replace "include erlang.mk" with a line that will load the parent Erlang.mk -# if given. Do it for all 3 possible Makefile file names. -ifeq ($(NO_AUTOPATCH_ERLANG_MK),) -define dep_autopatch_erlang_mk - for f in Makefile makefile GNUmakefile; do \ - if [ -f $(DEPS_DIR)/$1/$$f ]; then \ - sed -i.bak s/'include *erlang.mk'/'include $$(if $$(ERLANG_MK_FILENAME),$$(ERLANG_MK_FILENAME),erlang.mk)'/ $(DEPS_DIR)/$1/$$f; \ - fi \ - done -endef -else -define dep_autopatch_erlang_mk - : -endef -endif - -define dep_autopatch_gen - printf "%s\n" \ - "ERLC_OPTS = +debug_info" \ - "include ../../erlang.mk" > $(DEPS_DIR)/$(1)/Makefile -endef - -# We use flock/lockf when available to avoid concurrency issues. -define dep_autopatch_fetch_rebar - if command -v flock >/dev/null; then \ - flock $(ERLANG_MK_TMP)/rebar.lock sh -c "$(call dep_autopatch_fetch_rebar2)"; \ - elif command -v lockf >/dev/null; then \ - lockf $(ERLANG_MK_TMP)/rebar.lock sh -c "$(call dep_autopatch_fetch_rebar2)"; \ - else \ - $(call dep_autopatch_fetch_rebar2); \ - fi -endef - -define dep_autopatch_fetch_rebar2 - if [ ! -d $(ERLANG_MK_TMP)/rebar ]; then \ - git clone -q -n -- $(REBAR_GIT) $(ERLANG_MK_TMP)/rebar; \ - cd $(ERLANG_MK_TMP)/rebar; \ - git checkout -q $(REBAR_COMMIT); \ - ./bootstrap; \ - cd -; \ - fi -endef - -define dep_autopatch_rebar - if [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ - mv $(DEPS_DIR)/$(1)/Makefile $(DEPS_DIR)/$(1)/Makefile.orig.mk; \ - fi; \ - $(call erlang,$(call dep_autopatch_rebar.erl,$(1))); \ - rm -f $(DEPS_DIR)/$(1)/ebin/$(1).app -endef - -define dep_autopatch_rebar.erl - application:load(rebar), - application:set_env(rebar, log_level, debug), - rmemo:start(), - Conf1 = case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config)") of - {ok, Conf0} -> Conf0; - _ -> [] - end, - {Conf, OsEnv} = fun() -> - case filelib:is_file("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)") of - false -> {Conf1, []}; - true -> - Bindings0 = erl_eval:new_bindings(), - Bindings1 = erl_eval:add_binding('CONFIG', Conf1, Bindings0), - Bindings = erl_eval:add_binding('SCRIPT', "$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings1), - Before = os:getenv(), - {ok, Conf2} = file:script("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings), - {Conf2, lists:foldl(fun(E, Acc) -> lists:delete(E, Acc) end, os:getenv(), Before)} - end - end(), - Write = fun (Text) -> - file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/Makefile)", Text, [append]) - end, - Escape = fun (Text) -> - re:replace(Text, "\\\\$$", "\$$$$", [global, {return, list}]) - end, - Write("IGNORE_DEPS += edown eper eunit_formatters meck node_package " - "rebar_lock_deps_plugin rebar_vsn_plugin reltool_util\n"), - Write("C_SRC_DIR = /path/do/not/exist\n"), - Write("C_SRC_TYPE = rebar\n"), - Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"), - Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]), - ToList = fun - (V) when is_atom(V) -> atom_to_list(V); - (V) when is_list(V) -> "'\\"" ++ V ++ "\\"'" - end, - fun() -> - Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"), - case lists:keyfind(erl_opts, 1, Conf) of - false -> ok; - {_, ErlOpts} -> - lists:foreach(fun - ({d, D}) -> - Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); - ({d, DKey, DVal}) -> - Write("ERLC_OPTS += -D" ++ ToList(DKey) ++ "=" ++ ToList(DVal) ++ "\n"); - ({i, I}) -> - Write(["ERLC_OPTS += -I ", I, "\n"]); - ({platform_define, Regex, D}) -> - case rebar_utils:is_arch(Regex) of - true -> Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); - false -> ok - end; - ({parse_transform, PT}) -> - Write("ERLC_OPTS += +'{parse_transform, " ++ ToList(PT) ++ "}'\n"); - (_) -> ok - end, ErlOpts) - end, - Write("\n") - end(), - GetHexVsn = fun(N) -> - case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of - {ok, Lock} -> - io:format("~p~n", [Lock]), - case lists:keyfind("1.1.0", 1, Lock) of - {_, LockPkgs} -> - io:format("~p~n", [LockPkgs]), - case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of - {_, {pkg, _, Vsn}, _} -> - io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; - _ -> - false - end; - _ -> - false - end; - _ -> - false - end - end, - SemVsn = fun - ("~> " ++ S) -> - case length([ok || $$. <- S]) of - 0 -> S ++ ".0.0"; - 1 -> S ++ ".0"; - _ -> S - end; - (S) -> S - end, - fun() -> - File = case lists:keyfind(deps, 1, Conf) of - false -> []; - {_, Deps} -> - [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; - {N, S} when is_tuple(S) -> {N, S}; - {N, _, S} -> {N, S}; - {N, _, S, _} -> {N, S}; - _ -> false - end of - false -> ok; - {Name, Source} -> - {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; - {git, R} -> {git, R, master}; - {M, R, {branch, C}} -> {M, R, C}; - {M, R, {ref, C}} -> {M, R, C}; - {M, R, {tag, C}} -> {M, R, C}; - {M, R, C} -> {M, R, C} - end, - Write(io_lib:format("DEPS += ~s\ndep_~s = ~s ~s ~s~n", [Name, Name, Method, Repo, Commit])) - end end || Dep <- Deps] - end - end(), - fun() -> - case lists:keyfind(erl_first_files, 1, Conf) of - false -> ok; - {_, Files} -> - Names = [[" ", case lists:reverse(F) of - "lre." ++ Elif -> lists:reverse(Elif); - "lrx." ++ Elif -> lists:reverse(Elif); - "lry." ++ Elif -> lists:reverse(Elif); - Elif -> lists:reverse(Elif) - end] || "src/" ++ F <- Files], - Write(io_lib:format("COMPILE_FIRST +=~s\n", [Names])) - end - end(), - Write("\n\nrebar_dep: preprocess pre-deps deps pre-app app\n"), - Write("\npreprocess::\n"), - Write("\npre-deps::\n"), - Write("\npre-app::\n"), - PatchHook = fun(Cmd) -> - Cmd2 = re:replace(Cmd, "^([g]?make)(.*)( -C.*)", "\\\\1\\\\3\\\\2", [{return, list}]), - case Cmd2 of - "make -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); - "gmake -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); - "make " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); - "gmake " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); - _ -> Escape(Cmd) - end - end, - fun() -> - case lists:keyfind(pre_hooks, 1, Conf) of - false -> ok; - {_, Hooks} -> - [case H of - {'get-deps', Cmd} -> - Write("\npre-deps::\n\t" ++ PatchHook(Cmd) ++ "\n"); - {compile, Cmd} -> - Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); - {Regex, compile, Cmd} -> - case rebar_utils:is_arch(Regex) of - true -> Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); - false -> ok - end; - _ -> ok - end || H <- Hooks] - end - end(), - ShellToMk = fun(V0) -> - V1 = re:replace(V0, "[$$][(]", "$$\(shell ", [global]), - V = re:replace(V1, "([$$])(?![(])(\\\\w*)", "\\\\1(\\\\2)", [global]), - re:replace(V, "-Werror\\\\b", "", [{return, list}, global]) - end, - PortSpecs = fun() -> - case lists:keyfind(port_specs, 1, Conf) of - false -> - case filelib:is_dir("$(call core_native_path,$(DEPS_DIR)/$1/c_src)") of - false -> []; - true -> - [{"priv/" ++ proplists:get_value(so_name, Conf, "$(1)_drv.so"), - proplists:get_value(port_sources, Conf, ["c_src/*.c"]), []}] - end; - {_, Specs} -> - lists:flatten([case S of - {Output, Input} -> {ShellToMk(Output), Input, []}; - {Regex, Output, Input} -> - case rebar_utils:is_arch(Regex) of - true -> {ShellToMk(Output), Input, []}; - false -> [] - end; - {Regex, Output, Input, [{env, Env}]} -> - case rebar_utils:is_arch(Regex) of - true -> {ShellToMk(Output), Input, Env}; - false -> [] - end - end || S <- Specs]) - end - end(), - PortSpecWrite = fun (Text) -> - file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/c_src/Makefile.erlang.mk)", Text, [append]) - end, - case PortSpecs of - [] -> ok; - _ -> - Write("\npre-app::\n\t@$$\(MAKE) --no-print-directory -f c_src/Makefile.erlang.mk\n"), - PortSpecWrite(io_lib:format("ERL_CFLAGS ?= -finline-functions -Wall -fPIC -I \\"~s/erts-~s/include\\" -I \\"~s\\"\n", - [code:root_dir(), erlang:system_info(version), code:lib_dir(erl_interface, include)])), - PortSpecWrite(io_lib:format("ERL_LDFLAGS ?= -L \\"~s\\" -lerl_interface -lei\n", - [code:lib_dir(erl_interface, lib)])), - [PortSpecWrite(["\n", E, "\n"]) || E <- OsEnv], - FilterEnv = fun(Env) -> - lists:flatten([case E of - {_, _} -> E; - {Regex, K, V} -> - case rebar_utils:is_arch(Regex) of - true -> {K, V}; - false -> [] - end - end || E <- Env]) - end, - MergeEnv = fun(Env) -> - lists:foldl(fun ({K, V}, Acc) -> - case lists:keyfind(K, 1, Acc) of - false -> [{K, rebar_utils:expand_env_variable(V, K, "")}|Acc]; - {_, V0} -> [{K, rebar_utils:expand_env_variable(V, K, V0)}|Acc] - end - end, [], Env) - end, - PortEnv = case lists:keyfind(port_env, 1, Conf) of - false -> []; - {_, PortEnv0} -> FilterEnv(PortEnv0) - end, - PortSpec = fun ({Output, Input0, Env}) -> - filelib:ensure_dir("$(call core_native_path,$(DEPS_DIR)/$1/)" ++ Output), - Input = [[" ", I] || I <- Input0], - PortSpecWrite([ - [["\n", K, " = ", ShellToMk(V)] || {K, V} <- lists:reverse(MergeEnv(PortEnv))], - case $(PLATFORM) of - darwin -> "\n\nLDFLAGS += -flat_namespace -undefined suppress"; - _ -> "" - end, - "\n\nall:: ", Output, "\n\t@:\n\n", - "%.o: %.c\n\t$$\(CC) -c -o $$\@ $$\< $$\(CFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", - "%.o: %.C\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", - "%.o: %.cc\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", - "%.o: %.cpp\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", - [[Output, ": ", K, " += ", ShellToMk(V), "\n"] || {K, V} <- lists:reverse(MergeEnv(FilterEnv(Env)))], - Output, ": $$\(foreach ext,.c .C .cc .cpp,", - "$$\(patsubst %$$\(ext),%.o,$$\(filter %$$\(ext),$$\(wildcard", Input, "))))\n", - "\t$$\(CC) -o $$\@ $$\? $$\(LDFLAGS) $$\(ERL_LDFLAGS) $$\(DRV_LDFLAGS) $$\(EXE_LDFLAGS)", - case {filename:extension(Output), $(PLATFORM)} of - {[], _} -> "\n"; - {_, darwin} -> "\n"; - _ -> " -shared\n" - end]) - end, - [PortSpec(S) || S <- PortSpecs] - end, - fun() -> - case lists:keyfind(plugins, 1, Conf) of - false -> ok; - {_, Plugins0} -> - Plugins = [P || P <- Plugins0, is_tuple(P)], - case lists:keyfind('lfe-compile', 1, Plugins) of - false -> ok; - _ -> Write("\nBUILD_DEPS = lfe lfe.mk\ndep_lfe.mk = git https://github.com/ninenines/lfe.mk master\nDEP_PLUGINS = lfe.mk\n") - end - end - end(), - Write("\ninclude $$\(if $$\(ERLANG_MK_FILENAME),$$\(ERLANG_MK_FILENAME),erlang.mk)"), - RunPlugin = fun(Plugin, Step) -> - case erlang:function_exported(Plugin, Step, 2) of - false -> ok; - true -> - c:cd("$(call core_native_path,$(DEPS_DIR)/$1/)"), - Ret = Plugin:Step({config, "", Conf, dict:new(), dict:new(), dict:new(), - dict:store(base_dir, "", dict:new())}, undefined), - io:format("rebar plugin ~p step ~p ret ~p~n", [Plugin, Step, Ret]) - end - end, - fun() -> - case lists:keyfind(plugins, 1, Conf) of - false -> ok; - {_, Plugins0} -> - Plugins = [P || P <- Plugins0, is_atom(P)], - [begin - case lists:keyfind(deps, 1, Conf) of - false -> ok; - {_, Deps} -> - case lists:keyfind(P, 1, Deps) of - false -> ok; - _ -> - Path = "$(call core_native_path,$(DEPS_DIR)/)" ++ atom_to_list(P), - io:format("~s", [os:cmd("$(MAKE) -C $(call core_native_path,$(DEPS_DIR)/$1) " ++ Path)]), - io:format("~s", [os:cmd("$(MAKE) -C " ++ Path ++ " IS_DEP=1")]), - code:add_patha(Path ++ "/ebin") - end - end - end || P <- Plugins], - [case code:load_file(P) of - {module, P} -> ok; - _ -> - case lists:keyfind(plugin_dir, 1, Conf) of - false -> ok; - {_, PluginsDir} -> - ErlFile = "$(call core_native_path,$(DEPS_DIR)/$1/)" ++ PluginsDir ++ "/" ++ atom_to_list(P) ++ ".erl", - {ok, P, Bin} = compile:file(ErlFile, [binary]), - {module, P} = code:load_binary(P, ErlFile, Bin) - end - end || P <- Plugins], - [RunPlugin(P, preprocess) || P <- Plugins], - [RunPlugin(P, pre_compile) || P <- Plugins], - [RunPlugin(P, compile) || P <- Plugins] - end - end(), - halt() -endef - -define dep_autopatch_appsrc_script.erl - AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", - AppSrcScript = AppSrc ++ ".script", - {ok, Conf0} = file:consult(AppSrc), - Bindings0 = erl_eval:new_bindings(), - Bindings1 = erl_eval:add_binding('CONFIG', Conf0, Bindings0), - Bindings = erl_eval:add_binding('SCRIPT', AppSrcScript, Bindings1), - Conf = case file:script(AppSrcScript, Bindings) of - {ok, [C]} -> C; - {ok, C} -> C - end, - ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])), - halt() -endef - -define dep_autopatch_appsrc.erl - AppSrcOut = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", - AppSrcIn = case filelib:is_regular(AppSrcOut) of false -> "$(call core_native_path,$(DEPS_DIR)/$1/ebin/$1.app)"; true -> AppSrcOut end, - case filelib:is_regular(AppSrcIn) of - false -> ok; - true -> - {ok, [{application, $(1), L0}]} = file:consult(AppSrcIn), - L1 = lists:keystore(modules, 1, L0, {modules, []}), - L2 = case lists:keyfind(vsn, 1, L1) of - {_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, lists:droplast(os:cmd("git describe --dirty --tags --always"))}); - {_, {cmd, _}} -> lists:keyreplace(vsn, 1, L1, {vsn, "cmd"}); - _ -> L1 - end, - L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end, - ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])), - case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end - end, - halt() -endef - -define dep_fetch_git - git clone -q -n -- $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ - cd $(DEPS_DIR)/$(call dep_name,$(1)) && git checkout -q $(call dep_commit,$(1)); -endef - -define dep_fetch_git-subfolder - mkdir -p $(ERLANG_MK_TMP)/git-subfolder; \ - git clone -q -n -- $(call dep_repo,$1) \ - $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1); \ - cd $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1) \ - && git checkout -q $(call dep_commit,$1); \ - ln -s $(ERLANG_MK_TMP)/git-subfolder/$(call dep_name,$1)/$(word 4,$(dep_$(1))) \ - $(DEPS_DIR)/$(call dep_name,$1); -endef - -define dep_fetch_git-submodule - git submodule update --init -- $(DEPS_DIR)/$1; -endef - -define dep_fetch_hg - hg clone -q -U $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ - cd $(DEPS_DIR)/$(call dep_name,$(1)) && hg update -q $(call dep_commit,$(1)); -endef - -define dep_fetch_svn - svn checkout -q $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); -endef - -define dep_fetch_cp - cp -R $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); -endef - -define dep_fetch_ln - ln -s $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); -endef - -# Hex only has a package version. No need to look in the Erlang.mk packages. -define dep_fetch_hex - mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ - $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ - tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; -endef - -define dep_fetch_fail - echo "Error: Unknown or invalid dependency: $(1)." >&2; \ - exit 78; -endef - -# Kept for compatibility purposes with older Erlang.mk configuration. -define dep_fetch_legacy - $(warning WARNING: '$(1)' dependency configuration uses deprecated format.) \ - git clone -q -n -- $(word 1,$(dep_$(1))) $(DEPS_DIR)/$(1); \ - cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); -endef - -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - -define dep_target -$(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) - $(eval DEP_NAME := $(call dep_name,$1)) - $(eval DEP_STR := $(if $(filter $1,$(DEP_NAME)),$1,"$1 ($(DEP_NAME))")) - $(verbose) if test -d $(APPS_DIR)/$(DEP_NAME); then \ - echo "Error: Dependency" $(DEP_STR) "conflicts with application found in $(APPS_DIR)/$(DEP_NAME)." >&2; \ - exit 17; \ - fi - $(verbose) mkdir -p $(DEPS_DIR) - $(dep_verbose) $(call dep_fetch_$(strip $(call dep_fetch,$(1))),$(1)) - $(verbose) if [ -f $(DEPS_DIR)/$(1)/configure.ac -o -f $(DEPS_DIR)/$(1)/configure.in ] \ - && [ ! -f $(DEPS_DIR)/$(1)/configure ]; then \ - echo " AUTO " $(DEP_STR); \ - cd $(DEPS_DIR)/$(1) && autoreconf -Wall -vif -I m4; \ - fi - - $(verbose) if [ -f $(DEPS_DIR)/$(DEP_NAME)/configure ]; then \ - echo " CONF " $(DEP_STR); \ - cd $(DEPS_DIR)/$(DEP_NAME) && ./configure; \ - fi -ifeq ($(filter $(1),$(NO_AUTOPATCH)),) - $(verbose) $$(MAKE) --no-print-directory autopatch-$(DEP_NAME) -endif - -.PHONY: autopatch-$(call dep_name,$1) - -autopatch-$(call dep_name,$1):: - $(verbose) if [ "$(1)" = "amqp_client" -a "$(RABBITMQ_CLIENT_PATCH)" ]; then \ - if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ - echo " PATCH Downloading rabbitmq-codegen"; \ - git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ - fi; \ - if [ ! -d $(DEPS_DIR)/rabbitmq-server ]; then \ - echo " PATCH Downloading rabbitmq-server"; \ - git clone https://github.com/rabbitmq/rabbitmq-server.git $(DEPS_DIR)/rabbitmq-server; \ - fi; \ - ln -s $(DEPS_DIR)/amqp_client/deps/rabbit_common-0.0.0 $(DEPS_DIR)/rabbit_common; \ - elif [ "$(1)" = "rabbit" -a "$(RABBITMQ_SERVER_PATCH)" ]; then \ - if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ - echo " PATCH Downloading rabbitmq-codegen"; \ - git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ - fi \ - elif [ "$1" = "elixir" -a "$(ELIXIR_PATCH)" ]; then \ - ln -s lib/elixir/ebin $(DEPS_DIR)/elixir/; \ - else \ - $$(call dep_autopatch,$(call dep_name,$1)) \ - fi -endef - -$(foreach dep,$(BUILD_DEPS) $(DEPS),$(eval $(call dep_target,$(dep)))) - -ifndef IS_APP -clean:: clean-apps - -clean-apps: - $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ - $(MAKE) -C $$dep clean IS_APP=1; \ - done - -distclean:: distclean-apps - -distclean-apps: - $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ - $(MAKE) -C $$dep distclean IS_APP=1; \ - done -endif - -ifndef SKIP_DEPS -distclean:: distclean-deps - -distclean-deps: - $(gen_verbose) rm -rf $(DEPS_DIR) -endif - -# Forward-declare variables used in core/deps-tools.mk. This is required -# in case plugins use them. - -ERLANG_MK_RECURSIVE_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-deps-list.log -ERLANG_MK_RECURSIVE_DOC_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-doc-deps-list.log -ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log -ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log -ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: clean-app - -# Configuration. - -ERLC_OPTS ?= -Werror +debug_info +warn_export_vars +warn_shadow_vars \ - +warn_obsolete_guard # +bin_opt_info +warn_export_all +warn_missing_spec -COMPILE_FIRST ?= -COMPILE_FIRST_PATHS = $(addprefix src/,$(addsuffix .erl,$(COMPILE_FIRST))) -ERLC_EXCLUDE ?= -ERLC_EXCLUDE_PATHS = $(addprefix src/,$(addsuffix .erl,$(ERLC_EXCLUDE))) - -ERLC_ASN1_OPTS ?= - -ERLC_MIB_OPTS ?= -COMPILE_MIB_FIRST ?= -COMPILE_MIB_FIRST_PATHS = $(addprefix mibs/,$(addsuffix .mib,$(COMPILE_MIB_FIRST))) - -# Verbosity. - -app_verbose_0 = @echo " APP " $(PROJECT); -app_verbose_2 = set -x; -app_verbose = $(app_verbose_$(V)) - -appsrc_verbose_0 = @echo " APP " $(PROJECT).app.src; -appsrc_verbose_2 = set -x; -appsrc_verbose = $(appsrc_verbose_$(V)) - -makedep_verbose_0 = @echo " DEPEND" $(PROJECT).d; -makedep_verbose_2 = set -x; -makedep_verbose = $(makedep_verbose_$(V)) - -erlc_verbose_0 = @echo " ERLC " $(filter-out $(patsubst %,%.erl,$(ERLC_EXCLUDE)),\ - $(filter %.erl %.core,$(?F))); -erlc_verbose_2 = set -x; -erlc_verbose = $(erlc_verbose_$(V)) - -xyrl_verbose_0 = @echo " XYRL " $(filter %.xrl %.yrl,$(?F)); -xyrl_verbose_2 = set -x; -xyrl_verbose = $(xyrl_verbose_$(V)) - -asn1_verbose_0 = @echo " ASN1 " $(filter %.asn1,$(?F)); -asn1_verbose_2 = set -x; -asn1_verbose = $(asn1_verbose_$(V)) - -mib_verbose_0 = @echo " MIB " $(filter %.bin %.mib,$(?F)); -mib_verbose_2 = set -x; -mib_verbose = $(mib_verbose_$(V)) - -ifneq ($(wildcard src/),) - -# Targets. - -app:: $(if $(wildcard ebin/test),clean) deps - $(verbose) $(MAKE) --no-print-directory $(PROJECT).d - $(verbose) $(MAKE) --no-print-directory app-build - -ifeq ($(wildcard src/$(PROJECT_MOD).erl),) -define app_file -{application, '$(PROJECT)', [ - {description, "$(PROJECT_DESCRIPTION)"}, - {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), - {id$(comma)$(space)"$(1)"}$(comma)) - {modules, [$(call comma_list,$(2))]}, - {registered, []}, - {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, - {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) -]}. -endef -else -define app_file -{application, '$(PROJECT)', [ - {description, "$(PROJECT_DESCRIPTION)"}, - {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), - {id$(comma)$(space)"$(1)"}$(comma)) - {modules, [$(call comma_list,$(2))]}, - {registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]}, - {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, - {mod, {$(PROJECT_MOD), []}}, - {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) -]}. -endef -endif - -app-build: ebin/$(PROJECT).app - $(verbose) : - -# Source files. - -ALL_SRC_FILES := $(sort $(call core_find,src/,*)) - -ERL_FILES := $(filter %.erl,$(ALL_SRC_FILES)) -CORE_FILES := $(filter %.core,$(ALL_SRC_FILES)) - -# ASN.1 files. - -ifneq ($(wildcard asn1/),) -ASN1_FILES = $(sort $(call core_find,asn1/,*.asn1)) -ERL_FILES += $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) - -define compile_asn1 - $(verbose) mkdir -p include/ - $(asn1_verbose) erlc -v -I include/ -o asn1/ +noobj $(ERLC_ASN1_OPTS) $(1) - $(verbose) mv asn1/*.erl src/ - -$(verbose) mv asn1/*.hrl include/ - $(verbose) mv asn1/*.asn1db include/ -endef - -$(PROJECT).d:: $(ASN1_FILES) - $(if $(strip $?),$(call compile_asn1,$?)) -endif - -# SNMP MIB files. - -ifneq ($(wildcard mibs/),) -MIB_FILES = $(sort $(call core_find,mibs/,*.mib)) - -$(PROJECT).d:: $(COMPILE_MIB_FIRST_PATHS) $(MIB_FILES) - $(verbose) mkdir -p include/ priv/mibs/ - $(mib_verbose) erlc -v $(ERLC_MIB_OPTS) -o priv/mibs/ -I priv/mibs/ $? - $(mib_verbose) erlc -o include/ -- $(addprefix priv/mibs/,$(patsubst %.mib,%.bin,$(notdir $?))) -endif - -# Leex and Yecc files. - -XRL_FILES := $(filter %.xrl,$(ALL_SRC_FILES)) -XRL_ERL_FILES = $(addprefix src/,$(patsubst %.xrl,%.erl,$(notdir $(XRL_FILES)))) -ERL_FILES += $(XRL_ERL_FILES) - -YRL_FILES := $(filter %.yrl,$(ALL_SRC_FILES)) -YRL_ERL_FILES = $(addprefix src/,$(patsubst %.yrl,%.erl,$(notdir $(YRL_FILES)))) -ERL_FILES += $(YRL_ERL_FILES) - -$(PROJECT).d:: $(XRL_FILES) $(YRL_FILES) - $(if $(strip $?),$(xyrl_verbose) erlc -v -o src/ $(YRL_ERLC_OPTS) $?) - -# Erlang and Core Erlang files. - -define makedep.erl - E = ets:new(makedep, [bag]), - G = digraph:new([acyclic]), - ErlFiles = lists:usort(string:tokens("$(ERL_FILES)", " ")), - DepsDir = "$(call core_native_path,$(DEPS_DIR))", - AppsDir = "$(call core_native_path,$(APPS_DIR))", - DepsDirsSrc = "$(if $(wildcard $(DEPS_DIR)/*/src), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/src)))", - DepsDirsInc = "$(if $(wildcard $(DEPS_DIR)/*/include), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/include)))", - AppsDirsSrc = "$(if $(wildcard $(APPS_DIR)/*/src), $(call core_native_path,$(wildcard $(APPS_DIR)/*/src)))", - AppsDirsInc = "$(if $(wildcard $(APPS_DIR)/*/include), $(call core_native_path,$(wildcard $(APPS_DIR)/*/include)))", - DepsDirs = lists:usort(string:tokens(DepsDirsSrc++DepsDirsInc, " ")), - AppsDirs = lists:usort(string:tokens(AppsDirsSrc++AppsDirsInc, " ")), - Modules = [{list_to_atom(filename:basename(F, ".erl")), F} || F <- ErlFiles], - Add = fun (Mod, Dep) -> - case lists:keyfind(Dep, 1, Modules) of - false -> ok; - {_, DepFile} -> - {_, ModFile} = lists:keyfind(Mod, 1, Modules), - ets:insert(E, {ModFile, DepFile}), - digraph:add_vertex(G, Mod), - digraph:add_vertex(G, Dep), - digraph:add_edge(G, Mod, Dep) - end - end, - AddHd = fun (F, Mod, DepFile) -> - case file:open(DepFile, [read]) of - {error, enoent} -> - ok; - {ok, Fd} -> - {_, ModFile} = lists:keyfind(Mod, 1, Modules), - case ets:match(E, {ModFile, DepFile}) of - [] -> - ets:insert(E, {ModFile, DepFile}), - F(F, Fd, Mod,0); - _ -> ok - end - end - end, - SearchHrl = fun - F(_Hrl, []) -> {error,enoent}; - F(Hrl, [Dir|Dirs]) -> - HrlF = filename:join([Dir,Hrl]), - case filelib:is_file(HrlF) of - true -> - {ok, HrlF}; - false -> F(Hrl,Dirs) - end - end, - Attr = fun - (_F, Mod, behavior, Dep) -> - Add(Mod, Dep); - (_F, Mod, behaviour, Dep) -> - Add(Mod, Dep); - (_F, Mod, compile, {parse_transform, Dep}) -> - Add(Mod, Dep); - (_F, Mod, compile, Opts) when is_list(Opts) -> - case proplists:get_value(parse_transform, Opts) of - undefined -> ok; - Dep -> Add(Mod, Dep) - end; - (F, Mod, include, Hrl) -> - case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of - {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); - {error, _} -> false - end; - (F, Mod, include_lib, Hrl) -> - case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of - {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); - {error, _} -> false - end; - (F, Mod, import, {Imp, _}) -> - IsFile = - case lists:keyfind(Imp, 1, Modules) of - false -> false; - {_, FilePath} -> filelib:is_file(FilePath) - end, - case IsFile of - false -> ok; - true -> Add(Mod, Imp) - end; - (_, _, _, _) -> ok - end, - MakeDepend = fun - (F, Fd, Mod, StartLocation) -> - {ok, Filename} = file:pid2name(Fd), - case io:parse_erl_form(Fd, undefined, StartLocation) of - {ok, AbsData, EndLocation} -> - case AbsData of - {attribute, _, Key, Value} -> - Attr(F, Mod, Key, Value), - F(F, Fd, Mod, EndLocation); - _ -> F(F, Fd, Mod, EndLocation) - end; - {eof, _ } -> file:close(Fd); - {error, ErrorDescription } -> - file:close(Fd); - {error, ErrorInfo, ErrorLocation} -> - F(F, Fd, Mod, ErrorLocation) - end, - ok - end, - [begin - Mod = list_to_atom(filename:basename(F, ".erl")), - case file:open(F, [read]) of - {ok, Fd} -> MakeDepend(MakeDepend, Fd, Mod,0); - {error, enoent} -> ok - end - end || F <- ErlFiles], - Depend = sofs:to_external(sofs:relation_to_family(sofs:relation(ets:tab2list(E)))), - CompileFirst = [X || X <- lists:reverse(digraph_utils:topsort(G)), [] =/= digraph:in_neighbours(G, X)], - TargetPath = fun(Target) -> - case lists:keyfind(Target, 1, Modules) of - false -> ""; - {_, DepFile} -> - DirSubname = tl(string:tokens(filename:dirname(DepFile), "/")), - string:join(DirSubname ++ [atom_to_list(Target)], "/") - end - end, - ok = file:write_file("$(1)", [ - "# Generated by Erlang.mk. Edit at your own risk!\n\n", - [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], - "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" - ]), - halt() -endef - -ifeq ($(if $(NO_MAKEDEP),$(wildcard $(PROJECT).d),),) -$(PROJECT).d:: $(ERL_FILES) $(call core_find,include/,*.hrl) $(MAKEFILE_LIST) - $(makedep_verbose) $(call erlang,$(call makedep.erl,$@)) -endif - -ifeq ($(IS_APP)$(IS_DEP),) -ifneq ($(words $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES)),0) -# Rebuild everything when the Makefile changes. -$(ERLANG_MK_TMP)/last-makefile-change: $(MAKEFILE_LIST) | $(ERLANG_MK_TMP) - $(verbose) if test -f $@; then \ - touch $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES); \ - touch -c $(PROJECT).d; \ - fi - $(verbose) touch $@ - -$(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES):: $(ERLANG_MK_TMP)/last-makefile-change -ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change -endif -endif - -$(PROJECT).d:: - $(verbose) : - -include $(wildcard $(PROJECT).d) - -ebin/$(PROJECT).app:: ebin/ - -ebin/: - $(verbose) mkdir -p ebin/ - -define compile_erl - $(erlc_verbose) erlc -v $(if $(IS_DEP),$(filter-out -Werror,$(ERLC_OPTS)),$(ERLC_OPTS)) -o ebin/ \ - -pa ebin/ -I include/ $(filter-out $(ERLC_EXCLUDE_PATHS),$(COMPILE_FIRST_PATHS) $(1)) -endef - -define validate_app_file - case file:consult("ebin/$(PROJECT).app") of - {ok, _} -> halt(); - _ -> halt(1) - end -endef - -ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES) $(wildcard src/$(PROJECT).app.src) - $(eval FILES_TO_COMPILE := $(filter-out src/$(PROJECT).app.src,$?)) - $(if $(strip $(FILES_TO_COMPILE)),$(call compile_erl,$(FILES_TO_COMPILE))) - $(eval GITDESCRIBE := $(shell git describe --dirty --abbrev=7 --tags --always --first-parent 2>/dev/null || true)) - $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ - $(filter-out $(ERLC_EXCLUDE_PATHS),$(ERL_FILES) $(CORE_FILES) $(BEAM_FILES))))))) -ifeq ($(wildcard src/$(PROJECT).app.src),) - $(app_verbose) printf '$(subst %,%%,$(subst $(newline),\n,$(subst ','\'',$(call app_file,$(GITDESCRIBE),$(MODULES)))))' \ - > ebin/$(PROJECT).app - $(verbose) if ! $(call erlang,$(call validate_app_file)); then \ - echo "The .app file produced is invalid. Please verify the value of PROJECT_ENV." >&2; \ - exit 1; \ - fi -else - $(verbose) if [ -z "$$(grep -e '^[^%]*{\s*modules\s*,' src/$(PROJECT).app.src)" ]; then \ - echo "Empty modules entry not found in $(PROJECT).app.src. Please consult the erlang.mk documentation for instructions." >&2; \ - exit 1; \ - fi - $(appsrc_verbose) cat src/$(PROJECT).app.src \ - | sed "s/{[[:space:]]*modules[[:space:]]*,[[:space:]]*\[\]}/{modules, \[$(call comma_list,$(MODULES))\]}/" \ - | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ - > ebin/$(PROJECT).app -endif - -clean:: clean-app - -clean-app: - $(gen_verbose) rm -rf $(PROJECT).d ebin/ priv/mibs/ $(XRL_ERL_FILES) $(YRL_ERL_FILES) \ - $(addprefix include/,$(patsubst %.mib,%.hrl,$(notdir $(MIB_FILES)))) \ - $(addprefix include/,$(patsubst %.asn1,%.hrl,$(notdir $(ASN1_FILES)))) \ - $(addprefix include/,$(patsubst %.asn1,%.asn1db,$(notdir $(ASN1_FILES)))) \ - $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) - -endif - -# Copyright (c) 2016, Loïc Hoguin -# Copyright (c) 2015, Viktor Söderqvist -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: docs-deps - -# Configuration. - -ALL_DOC_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(DOC_DEPS)) - -# Targets. - -$(foreach dep,$(DOC_DEPS),$(eval $(call dep_target,$(dep)))) - -ifneq ($(SKIP_DEPS),) -doc-deps: -else -doc-deps: $(ALL_DOC_DEPS_DIRS) - $(verbose) set -e; for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done -endif - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: rel-deps - -# Configuration. - -ALL_REL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(REL_DEPS)) - -# Targets. - -$(foreach dep,$(REL_DEPS),$(eval $(call dep_target,$(dep)))) - -ifneq ($(SKIP_DEPS),) -rel-deps: -else -rel-deps: $(ALL_REL_DEPS_DIRS) - $(verbose) set -e; for dep in $(ALL_REL_DEPS_DIRS) ; do $(MAKE) -C $$dep; done -endif - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: test-deps test-dir test-build clean-test-dir - -# Configuration. - -TEST_DIR ?= $(CURDIR)/test - -ALL_TEST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(TEST_DEPS)) - -TEST_ERLC_OPTS ?= +debug_info +warn_export_vars +warn_shadow_vars +warn_obsolete_guard -TEST_ERLC_OPTS += -DTEST=1 - -# Targets. - -$(foreach dep,$(TEST_DEPS),$(eval $(call dep_target,$(dep)))) - -ifneq ($(SKIP_DEPS),) -test-deps: -else -test-deps: $(ALL_TEST_DEPS_DIRS) - $(verbose) set -e; for dep in $(ALL_TEST_DEPS_DIRS) ; do \ - if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ - :; \ - else \ - $(MAKE) -C $$dep IS_DEP=1; \ - if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ - fi \ - done -endif - -ifneq ($(wildcard $(TEST_DIR)),) -test-dir: - $(gen_verbose) erlc -v $(TEST_ERLC_OPTS) -o $(TEST_DIR) \ - -pa ebin/ -I include/ $(call core_find,$(TEST_DIR)/,*.erl) -endif - -test-build:: IS_TEST=1 -test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) -test-build:: $(if $(wildcard src),$(if $(wildcard ebin/test),,clean)) $(if $(IS_APP),,deps test-deps) -# We already compiled everything when IS_APP=1. -ifndef IS_APP -ifneq ($(wildcard $(TEST_DIR)),) - $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" -endif -ifneq ($(wildcard src),) - $(verbose) $(MAKE) --no-print-directory $(PROJECT).d ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" - $(verbose) $(MAKE) --no-print-directory app-build ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" - $(gen_verbose) touch ebin/test -endif -endif - -# Roughly the same as test-build, but when IS_APP=1. -# We only care about compiling the current application. -ifdef IS_APP -test-build-app:: ERLC_OPTS=$(TEST_ERLC_OPTS) -test-build-app:: test-deps -ifneq ($(wildcard $(TEST_DIR)),) - $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" -endif -ifneq ($(wildcard src),) - $(verbose) $(MAKE) --no-print-directory $(PROJECT).d ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" - $(verbose) $(MAKE) --no-print-directory app-build ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" - $(gen_verbose) touch ebin/test -endif -endif - -clean:: clean-test-dir - -clean-test-dir: -ifneq ($(wildcard $(TEST_DIR)/*.beam),) - $(gen_verbose) rm -f $(TEST_DIR)/*.beam -endif - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: rebar.config - -# We strip out -Werror because we don't want to fail due to -# warnings when used as a dependency. - -compat_prepare_erlc_opts = $(shell echo "$1" | sed 's/, */,/g') - -define compat_convert_erlc_opts -$(if $(filter-out -Werror,$1),\ - $(if $(findstring +,$1),\ - $(shell echo $1 | cut -b 2-))) -endef - -define compat_erlc_opts_to_list -[$(call comma_list,$(foreach o,$(call compat_prepare_erlc_opts,$1),$(call compat_convert_erlc_opts,$o)))] -endef - -define compat_rebar_config -{deps, [ -$(call comma_list,$(foreach d,$(DEPS),\ - $(if $(filter hex,$(call dep_fetch,$d)),\ - {$(call dep_name,$d)$(comma)"$(call dep_repo,$d)"},\ - {$(call dep_name,$d)$(comma)".*"$(comma){git,"$(call dep_repo,$d)"$(comma)"$(call dep_commit,$d)"}}))) -]}. -{erl_opts, $(call compat_erlc_opts_to_list,$(ERLC_OPTS))}. -endef - -rebar.config: - $(gen_verbose) $(call core_render,compat_rebar_config,rebar.config) - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -ifeq ($(filter asciideck,$(DEPS) $(DOC_DEPS)),asciideck) - -.PHONY: asciidoc asciidoc-guide asciidoc-manual install-asciidoc distclean-asciidoc-guide distclean-asciidoc-manual - -# Core targets. - -docs:: asciidoc - -distclean:: distclean-asciidoc-guide distclean-asciidoc-manual - -# Plugin-specific targets. - -asciidoc: asciidoc-guide asciidoc-manual - -# User guide. - -ifeq ($(wildcard doc/src/guide/book.asciidoc),) -asciidoc-guide: -else -asciidoc-guide: distclean-asciidoc-guide doc-deps - a2x -v -f pdf doc/src/guide/book.asciidoc && mv doc/src/guide/book.pdf doc/guide.pdf - a2x -v -f chunked doc/src/guide/book.asciidoc && mv doc/src/guide/book.chunked/ doc/html/ - -distclean-asciidoc-guide: - $(gen_verbose) rm -rf doc/html/ doc/guide.pdf -endif - -# Man pages. - -ASCIIDOC_MANUAL_FILES := $(wildcard doc/src/manual/*.asciidoc) - -ifeq ($(ASCIIDOC_MANUAL_FILES),) -asciidoc-manual: -else - -# Configuration. - -MAN_INSTALL_PATH ?= /usr/local/share/man -MAN_SECTIONS ?= 3 7 -MAN_PROJECT ?= $(shell echo $(PROJECT) | sed 's/^./\U&\E/') -MAN_VERSION ?= $(PROJECT_VERSION) - -# Plugin-specific targets. - -define asciidoc2man.erl -try - [begin - io:format(" ADOC ~s~n", [F]), - ok = asciideck:to_manpage(asciideck:parse_file(F), #{ - compress => gzip, - outdir => filename:dirname(F), - extra2 => "$(MAN_PROJECT) $(MAN_VERSION)", - extra3 => "$(MAN_PROJECT) Function Reference" - }) - end || F <- [$(shell echo $(addprefix $(comma)\",$(addsuffix \",$1)) | sed 's/^.//')]], - halt(0) -catch C:E -> - io:format("Exception ~p:~p~nStacktrace: ~p~n", [C, E, erlang:get_stacktrace()]), - halt(1) -end. -endef - -asciidoc-manual:: doc-deps - -asciidoc-manual:: $(ASCIIDOC_MANUAL_FILES) - $(gen_verbose) $(call erlang,$(call asciidoc2man.erl,$?)) - $(verbose) $(foreach s,$(MAN_SECTIONS),mkdir -p doc/man$s/ && mv doc/src/manual/*.$s.gz doc/man$s/;) - -install-docs:: install-asciidoc - -install-asciidoc: asciidoc-manual - $(foreach s,$(MAN_SECTIONS),\ - mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \ - install -g `id -g` -o `id -u` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;) - -distclean-asciidoc-manual: - $(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS)) -endif -endif - -# Copyright (c) 2014-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: bootstrap bootstrap-lib bootstrap-rel new list-templates - -# Core targets. - -help:: - $(verbose) printf "%s\n" "" \ - "Bootstrap targets:" \ - " bootstrap Generate a skeleton of an OTP application" \ - " bootstrap-lib Generate a skeleton of an OTP library" \ - " bootstrap-rel Generate the files needed to build a release" \ - " new-app in=NAME Create a new local OTP application NAME" \ - " new-lib in=NAME Create a new local OTP library NAME" \ - " new t=TPL n=NAME Generate a module NAME based on the template TPL" \ - " new t=T n=N in=APP Generate a module NAME based on the template TPL in APP" \ - " list-templates List available templates" - -# Bootstrap templates. - -define bs_appsrc -{application, $p, [ - {description, ""}, - {vsn, "0.1.0"}, - {id, "git"}, - {modules, []}, - {registered, []}, - {applications, [ - kernel, - stdlib - ]}, - {mod, {$p_app, []}}, - {env, []} -]}. -endef - -define bs_appsrc_lib -{application, $p, [ - {description, ""}, - {vsn, "0.1.0"}, - {id, "git"}, - {modules, []}, - {registered, []}, - {applications, [ - kernel, - stdlib - ]} -]}. -endef - -# To prevent autocompletion issues with ZSH, we add "include erlang.mk" -# separately during the actual bootstrap. -define bs_Makefile -PROJECT = $p -PROJECT_DESCRIPTION = New project -PROJECT_VERSION = 0.1.0 -$(if $(SP), -# Whitespace to be used when creating files from templates. -SP = $(SP) -) -endef - -define bs_apps_Makefile -PROJECT = $p -PROJECT_DESCRIPTION = New project -PROJECT_VERSION = 0.1.0 -$(if $(SP), -# Whitespace to be used when creating files from templates. -SP = $(SP) -) -# Make sure we know where the applications are located. -ROOT_DIR ?= $(call core_relpath,$(dir $(ERLANG_MK_FILENAME)),$(APPS_DIR)/app) -APPS_DIR ?= .. -DEPS_DIR ?= $(call core_relpath,$(DEPS_DIR),$(APPS_DIR)/app) - -include $$(ROOT_DIR)/erlang.mk -endef - -define bs_app --module($p_app). --behaviour(application). - --export([start/2]). --export([stop/1]). - -start(_Type, _Args) -> - $p_sup:start_link(). - -stop(_State) -> - ok. -endef - -define bs_relx_config -{release, {$p_release, "1"}, [$p, sasl, runtime_tools]}. -{extended_start_script, true}. -{sys_config, "config/sys.config"}. -{vm_args, "config/vm.args"}. -endef - -define bs_sys_config -[ -]. -endef - -define bs_vm_args --name $p@127.0.0.1 --setcookie $p --heart -endef - -# Normal templates. - -define tpl_supervisor --module($(n)). --behaviour(supervisor). - --export([start_link/0]). --export([init/1]). - -start_link() -> - supervisor:start_link({local, ?MODULE}, ?MODULE, []). - -init([]) -> - Procs = [], - {ok, {{one_for_one, 1, 5}, Procs}}. -endef - -define tpl_gen_server --module($(n)). --behaviour(gen_server). - -%% API. --export([start_link/0]). - -%% gen_server. --export([init/1]). --export([handle_call/3]). --export([handle_cast/2]). --export([handle_info/2]). --export([terminate/2]). --export([code_change/3]). - --record(state, { -}). - -%% API. - --spec start_link() -> {ok, pid()}. -start_link() -> - gen_server:start_link(?MODULE, [], []). - -%% gen_server. - -init([]) -> - {ok, #state{}}. - -handle_call(_Request, _From, State) -> - {reply, ignored, State}. - -handle_cast(_Msg, State) -> - {noreply, State}. - -handle_info(_Info, State) -> - {noreply, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. -endef - -define tpl_module --module($(n)). --export([]). -endef - -define tpl_cowboy_http --module($(n)). --behaviour(cowboy_http_handler). - --export([init/3]). --export([handle/2]). --export([terminate/3]). - --record(state, { -}). - -init(_, Req, _Opts) -> - {ok, Req, #state{}}. - -handle(Req, State=#state{}) -> - {ok, Req2} = cowboy_req:reply(200, Req), - {ok, Req2, State}. - -terminate(_Reason, _Req, _State) -> - ok. -endef - -define tpl_gen_fsm --module($(n)). --behaviour(gen_fsm). - -%% API. --export([start_link/0]). - -%% gen_fsm. --export([init/1]). --export([state_name/2]). --export([handle_event/3]). --export([state_name/3]). --export([handle_sync_event/4]). --export([handle_info/3]). --export([terminate/3]). --export([code_change/4]). - --record(state, { -}). - -%% API. - --spec start_link() -> {ok, pid()}. -start_link() -> - gen_fsm:start_link(?MODULE, [], []). - -%% gen_fsm. - -init([]) -> - {ok, state_name, #state{}}. - -state_name(_Event, StateData) -> - {next_state, state_name, StateData}. - -handle_event(_Event, StateName, StateData) -> - {next_state, StateName, StateData}. - -state_name(_Event, _From, StateData) -> - {reply, ignored, state_name, StateData}. - -handle_sync_event(_Event, _From, StateName, StateData) -> - {reply, ignored, StateName, StateData}. - -handle_info(_Info, StateName, StateData) -> - {next_state, StateName, StateData}. - -terminate(_Reason, _StateName, _StateData) -> - ok. - -code_change(_OldVsn, StateName, StateData, _Extra) -> - {ok, StateName, StateData}. -endef - -define tpl_gen_statem --module($(n)). --behaviour(gen_statem). - -%% API. --export([start_link/0]). - -%% gen_statem. --export([callback_mode/0]). --export([init/1]). --export([state_name/3]). --export([handle_event/4]). --export([terminate/3]). --export([code_change/4]). - --record(state, { -}). - -%% API. - --spec start_link() -> {ok, pid()}. -start_link() -> - gen_statem:start_link(?MODULE, [], []). - -%% gen_statem. - -callback_mode() -> - state_functions. - -init([]) -> - {ok, state_name, #state{}}. - -state_name(_EventType, _EventData, StateData) -> - {next_state, state_name, StateData}. - -handle_event(_EventType, _EventData, StateName, StateData) -> - {next_state, StateName, StateData}. - -terminate(_Reason, _StateName, _StateData) -> - ok. - -code_change(_OldVsn, StateName, StateData, _Extra) -> - {ok, StateName, StateData}. -endef - -define tpl_cowboy_loop --module($(n)). --behaviour(cowboy_loop_handler). - --export([init/3]). --export([info/3]). --export([terminate/3]). - --record(state, { -}). - -init(_, Req, _Opts) -> - {loop, Req, #state{}, 5000, hibernate}. - -info(_Info, Req, State) -> - {loop, Req, State, hibernate}. - -terminate(_Reason, _Req, _State) -> - ok. -endef - -define tpl_cowboy_rest --module($(n)). - --export([init/3]). --export([content_types_provided/2]). --export([get_html/2]). - -init(_, _Req, _Opts) -> - {upgrade, protocol, cowboy_rest}. - -content_types_provided(Req, State) -> - {[{{<<"text">>, <<"html">>, '*'}, get_html}], Req, State}. - -get_html(Req, State) -> - {<<"This is REST!">>, Req, State}. -endef - -define tpl_cowboy_ws --module($(n)). --behaviour(cowboy_websocket_handler). - --export([init/3]). --export([websocket_init/3]). --export([websocket_handle/3]). --export([websocket_info/3]). --export([websocket_terminate/3]). - --record(state, { -}). - -init(_, _, _) -> - {upgrade, protocol, cowboy_websocket}. - -websocket_init(_, Req, _Opts) -> - Req2 = cowboy_req:compact(Req), - {ok, Req2, #state{}}. - -websocket_handle({text, Data}, Req, State) -> - {reply, {text, Data}, Req, State}; -websocket_handle({binary, Data}, Req, State) -> - {reply, {binary, Data}, Req, State}; -websocket_handle(_Frame, Req, State) -> - {ok, Req, State}. - -websocket_info(_Info, Req, State) -> - {ok, Req, State}. - -websocket_terminate(_Reason, _Req, _State) -> - ok. -endef - -define tpl_ranch_protocol --module($(n)). --behaviour(ranch_protocol). - --export([start_link/4]). --export([init/4]). - --type opts() :: []. --export_type([opts/0]). - --record(state, { - socket :: inet:socket(), - transport :: module() -}). - -start_link(Ref, Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), - {ok, Pid}. - --spec init(ranch:ref(), inet:socket(), module(), opts()) -> ok. -init(Ref, Socket, Transport, _Opts) -> - ok = ranch:accept_ack(Ref), - loop(#state{socket=Socket, transport=Transport}). - -loop(State) -> - loop(State). -endef - -# Plugin-specific targets. - -ifndef WS -ifdef SP -WS = $(subst a,,a $(wordlist 1,$(SP),a a a a a a a a a a a a a a a a a a a a)) -else -WS = $(tab) -endif -endif - -bootstrap: -ifneq ($(wildcard src/),) - $(error Error: src/ directory already exists) -endif - $(eval p := $(PROJECT)) - $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ - $(error Error: Invalid characters in the application name)) - $(eval n := $(PROJECT)_sup) - $(verbose) $(call core_render,bs_Makefile,Makefile) - $(verbose) echo "include erlang.mk" >> Makefile - $(verbose) mkdir src/ -ifdef LEGACY - $(verbose) $(call core_render,bs_appsrc,src/$(PROJECT).app.src) -endif - $(verbose) $(call core_render,bs_app,src/$(PROJECT)_app.erl) - $(verbose) $(call core_render,tpl_supervisor,src/$(PROJECT)_sup.erl) - -bootstrap-lib: -ifneq ($(wildcard src/),) - $(error Error: src/ directory already exists) -endif - $(eval p := $(PROJECT)) - $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ - $(error Error: Invalid characters in the application name)) - $(verbose) $(call core_render,bs_Makefile,Makefile) - $(verbose) echo "include erlang.mk" >> Makefile - $(verbose) mkdir src/ -ifdef LEGACY - $(verbose) $(call core_render,bs_appsrc_lib,src/$(PROJECT).app.src) -endif - -bootstrap-rel: -ifneq ($(wildcard relx.config),) - $(error Error: relx.config already exists) -endif -ifneq ($(wildcard config/),) - $(error Error: config/ directory already exists) -endif - $(eval p := $(PROJECT)) - $(verbose) $(call core_render,bs_relx_config,relx.config) - $(verbose) mkdir config/ - $(verbose) $(call core_render,bs_sys_config,config/sys.config) - $(verbose) $(call core_render,bs_vm_args,config/vm.args) - -new-app: -ifndef in - $(error Usage: $(MAKE) new-app in=APP) -endif -ifneq ($(wildcard $(APPS_DIR)/$in),) - $(error Error: Application $in already exists) -endif - $(eval p := $(in)) - $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ - $(error Error: Invalid characters in the application name)) - $(eval n := $(in)_sup) - $(verbose) mkdir -p $(APPS_DIR)/$p/src/ - $(verbose) $(call core_render,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) -ifdef LEGACY - $(verbose) $(call core_render,bs_appsrc,$(APPS_DIR)/$p/src/$p.app.src) -endif - $(verbose) $(call core_render,bs_app,$(APPS_DIR)/$p/src/$p_app.erl) - $(verbose) $(call core_render,tpl_supervisor,$(APPS_DIR)/$p/src/$p_sup.erl) - -new-lib: -ifndef in - $(error Usage: $(MAKE) new-lib in=APP) -endif -ifneq ($(wildcard $(APPS_DIR)/$in),) - $(error Error: Application $in already exists) -endif - $(eval p := $(in)) - $(if $(shell echo $p | grep -x "[a-z0-9_]*"),,\ - $(error Error: Invalid characters in the application name)) - $(verbose) mkdir -p $(APPS_DIR)/$p/src/ - $(verbose) $(call core_render,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) -ifdef LEGACY - $(verbose) $(call core_render,bs_appsrc_lib,$(APPS_DIR)/$p/src/$p.app.src) -endif - -new: -ifeq ($(wildcard src/)$(in),) - $(error Error: src/ directory does not exist) -endif -ifndef t - $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) -endif -ifndef n - $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) -endif -ifdef in - $(verbose) $(call core_render,tpl_$(t),$(APPS_DIR)/$(in)/src/$(n).erl) -else - $(verbose) $(call core_render,tpl_$(t),src/$(n).erl) -endif - -list-templates: - $(verbose) @echo Available templates: - $(verbose) printf " %s\n" $(sort $(patsubst tpl_%,%,$(filter tpl_%,$(.VARIABLES)))) - -# Copyright (c) 2014-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: clean-c_src distclean-c_src-env - -# Configuration. - -C_SRC_DIR ?= $(CURDIR)/c_src -C_SRC_ENV ?= $(C_SRC_DIR)/env.mk -C_SRC_OUTPUT ?= $(CURDIR)/priv/$(PROJECT) -C_SRC_TYPE ?= shared - -# System type and C compiler/flags. - -ifeq ($(PLATFORM),msys2) - C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= .exe - C_SRC_OUTPUT_SHARED_EXTENSION ?= .dll -else - C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= - C_SRC_OUTPUT_SHARED_EXTENSION ?= .so -endif - -ifeq ($(C_SRC_TYPE),shared) - C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_SHARED_EXTENSION) -else - C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_EXECUTABLE_EXTENSION) -endif - -ifeq ($(PLATFORM),msys2) -# We hardcode the compiler used on MSYS2. The default CC=cc does -# not produce working code. The "gcc" MSYS2 package also doesn't. - CC = /mingw64/bin/gcc - export CC - CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes - CXXFLAGS ?= -O3 -finline-functions -Wall -else ifeq ($(PLATFORM),darwin) - CC ?= cc - CFLAGS ?= -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes - CXXFLAGS ?= -O3 -arch x86_64 -Wall - LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress -else ifeq ($(PLATFORM),freebsd) - CC ?= cc - CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes - CXXFLAGS ?= -O3 -finline-functions -Wall -else ifeq ($(PLATFORM),linux) - CC ?= gcc - CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes - CXXFLAGS ?= -O3 -finline-functions -Wall -endif - -ifneq ($(PLATFORM),msys2) - CFLAGS += -fPIC - CXXFLAGS += -fPIC -endif - -CFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" -CXXFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" - -LDLIBS += -L"$(ERL_INTERFACE_LIB_DIR)" -lerl_interface -lei - -# Verbosity. - -c_verbose_0 = @echo " C " $(?F); -c_verbose = $(c_verbose_$(V)) - -cpp_verbose_0 = @echo " CPP " $(?F); -cpp_verbose = $(cpp_verbose_$(V)) - -link_verbose_0 = @echo " LD " $(@F); -link_verbose = $(link_verbose_$(V)) - -# Targets. - -ifeq ($(wildcard $(C_SRC_DIR)),) -else ifneq ($(wildcard $(C_SRC_DIR)/Makefile),) -app:: app-c_src - -test-build:: app-c_src - -app-c_src: - $(MAKE) -C $(C_SRC_DIR) - -clean:: - $(MAKE) -C $(C_SRC_DIR) clean - -else - -ifeq ($(SOURCES),) -SOURCES := $(sort $(foreach pat,*.c *.C *.cc *.cpp,$(call core_find,$(C_SRC_DIR)/,$(pat)))) -endif -OBJECTS = $(addsuffix .o, $(basename $(SOURCES))) - -COMPILE_C = $(c_verbose) $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE_CPP = $(cpp_verbose) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c - -app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) - -test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) - -$(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ - $(link_verbose) $(CC) $(OBJECTS) \ - $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ - -o $(C_SRC_OUTPUT_FILE) - -$(OBJECTS): $(MAKEFILE_LIST) $(C_SRC_ENV) - -%.o: %.c - $(COMPILE_C) $(OUTPUT_OPTION) $< - -%.o: %.cc - $(COMPILE_CPP) $(OUTPUT_OPTION) $< - -%.o: %.C - $(COMPILE_CPP) $(OUTPUT_OPTION) $< - -%.o: %.cpp - $(COMPILE_CPP) $(OUTPUT_OPTION) $< - -clean:: clean-c_src - -clean-c_src: - $(gen_verbose) rm -f $(C_SRC_OUTPUT_FILE) $(OBJECTS) - -endif - -ifneq ($(wildcard $(C_SRC_DIR)),) -ERL_ERTS_DIR = $(shell $(ERL) -eval 'io:format("~s~n", [code:lib_dir(erts)]), halt().') - -$(C_SRC_ENV): - $(verbose) $(ERL) -eval "file:write_file(\"$(call core_native_path,$(C_SRC_ENV))\", \ - io_lib:format( \ - \"# Generated by Erlang.mk. Edit at your own risk!~n~n\" \ - \"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \ - \"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \ - \"ERL_INTERFACE_LIB_DIR ?= ~s~n\" \ - \"ERTS_DIR ?= $(ERL_ERTS_DIR)~n\", \ - [code:root_dir(), erlang:system_info(version), \ - code:lib_dir(erl_interface, include), \ - code:lib_dir(erl_interface, lib)])), \ - halt()." - -distclean:: distclean-c_src-env - -distclean-c_src-env: - $(gen_verbose) rm -f $(C_SRC_ENV) - --include $(C_SRC_ENV) - -ifneq ($(ERL_ERTS_DIR),$(ERTS_DIR)) -$(shell rm -f $(C_SRC_ENV)) -endif -endif - -# Templates. - -define bs_c_nif -#include "erl_nif.h" - -static int loads = 0; - -static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) -{ - /* Initialize private data. */ - *priv_data = NULL; - - loads++; - - return 0; -} - -static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info) -{ - /* Convert the private data to the new version. */ - *priv_data = *old_priv_data; - - loads++; - - return 0; -} - -static void unload(ErlNifEnv* env, void* priv_data) -{ - if (loads == 1) { - /* Destroy the private data. */ - } - - loads--; -} - -static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) -{ - if (enif_is_atom(env, argv[0])) { - return enif_make_tuple2(env, - enif_make_atom(env, "hello"), - argv[0]); - } - - return enif_make_tuple2(env, - enif_make_atom(env, "error"), - enif_make_atom(env, "badarg")); -} - -static ErlNifFunc nif_funcs[] = { - {"hello", 1, hello} -}; - -ERL_NIF_INIT($n, nif_funcs, load, NULL, upgrade, unload) -endef - -define bs_erl_nif --module($n). - --export([hello/1]). - --on_load(on_load/0). -on_load() -> - PrivDir = case code:priv_dir(?MODULE) of - {error, _} -> - AppPath = filename:dirname(filename:dirname(code:which(?MODULE))), - filename:join(AppPath, "priv"); - Path -> - Path - end, - erlang:load_nif(filename:join(PrivDir, atom_to_list(?MODULE)), 0). - -hello(_) -> - erlang:nif_error({not_loaded, ?MODULE}). -endef - -new-nif: -ifneq ($(wildcard $(C_SRC_DIR)/$n.c),) - $(error Error: $(C_SRC_DIR)/$n.c already exists) -endif -ifneq ($(wildcard src/$n.erl),) - $(error Error: src/$n.erl already exists) -endif -ifndef n - $(error Usage: $(MAKE) new-nif n=NAME [in=APP]) -endif -ifdef in - $(verbose) $(MAKE) -C $(APPS_DIR)/$(in)/ new-nif n=$n in= -else - $(verbose) mkdir -p $(C_SRC_DIR) src/ - $(verbose) $(call core_render,bs_c_nif,$(C_SRC_DIR)/$n.c) - $(verbose) $(call core_render,bs_erl_nif,src/$n.erl) -endif - -# Copyright (c) 2015-2017, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: ci ci-prepare ci-setup - -CI_OTP ?= -CI_HIPE ?= -CI_ERLLVM ?= - -ifeq ($(CI_VM),native) -ERLC_OPTS += +native -TEST_ERLC_OPTS += +native -else ifeq ($(CI_VM),erllvm) -ERLC_OPTS += +native +'{hipe, [to_llvm]}' -TEST_ERLC_OPTS += +native +'{hipe, [to_llvm]}' -endif - -ifeq ($(strip $(CI_OTP) $(CI_HIPE) $(CI_ERLLVM)),) -ci:: -else - -ci:: $(addprefix ci-,$(CI_OTP) $(addsuffix -native,$(CI_HIPE)) $(addsuffix -erllvm,$(CI_ERLLVM))) - -ci-prepare: $(addprefix $(KERL_INSTALL_DIR)/,$(CI_OTP) $(addsuffix -native,$(CI_HIPE))) - -ci-setup:: - $(verbose) : - -ci-extra:: - $(verbose) : - -ci_verbose_0 = @echo " CI " $(1); -ci_verbose = $(ci_verbose_$(V)) - -define ci_target -ci-$1: $(KERL_INSTALL_DIR)/$2 - $(verbose) $(MAKE) --no-print-directory clean - $(ci_verbose) \ - PATH="$(KERL_INSTALL_DIR)/$2/bin:$(PATH)" \ - CI_OTP_RELEASE="$1" \ - CT_OPTS="-label $1" \ - CI_VM="$3" \ - $(MAKE) ci-setup tests - $(verbose) $(MAKE) --no-print-directory ci-extra -endef - -$(foreach otp,$(CI_OTP),$(eval $(call ci_target,$(otp),$(otp),otp))) -$(foreach otp,$(CI_HIPE),$(eval $(call ci_target,$(otp)-native,$(otp)-native,native))) -$(foreach otp,$(CI_ERLLVM),$(eval $(call ci_target,$(otp)-erllvm,$(otp)-native,erllvm))) - -$(foreach otp,$(filter-out $(ERLANG_OTP),$(CI_OTP)),$(eval $(call kerl_otp_target,$(otp)))) -$(foreach otp,$(filter-out $(ERLANG_HIPE),$(sort $(CI_HIPE) $(CI_ERLLLVM))),$(eval $(call kerl_hipe_target,$(otp)))) - -help:: - $(verbose) printf "%s\n" "" \ - "Continuous Integration targets:" \ - " ci Run '$(MAKE) tests' on all configured Erlang versions." \ - "" \ - "The CI_OTP variable must be defined with the Erlang versions" \ - "that must be tested. For example: CI_OTP = OTP-17.3.4 OTP-17.5.3" - -endif - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: ct apps-ct distclean-ct - -# Configuration. - -CT_OPTS ?= - -ifneq ($(wildcard $(TEST_DIR)),) -ifndef CT_SUITES -CT_SUITES := $(sort $(subst _SUITE.erl,,$(notdir $(call core_find,$(TEST_DIR)/,*_SUITE.erl)))) -endif -endif -CT_SUITES ?= -CT_LOGS_DIR ?= $(CURDIR)/logs - -# Core targets. - -tests:: ct - -ifndef KEEP_LOGS -distclean:: distclean-ct -endif - -help:: - $(verbose) printf "%s\n" "" \ - "Common_test targets:" \ - " ct Run all the common_test suites for this project" \ - "" \ - "All your common_test suites have their associated targets." \ - "A suite named http_SUITE can be ran using the ct-http target." - -# Plugin-specific targets. - -CT_RUN = ct_run \ - -no_auto_compile \ - -noinput \ - -pa $(CURDIR)/ebin $(TEST_DIR) \ - -dir $(TEST_DIR) \ - -logdir $(CT_LOGS_DIR) - -ifeq ($(CT_SUITES),) -ct: $(if $(IS_APP)$(ROOT_DIR),,apps-ct) -else -# We do not run tests if we are in an apps/* with no test directory. -ifneq ($(IS_APP)$(wildcard $(TEST_DIR)),1) -ct: test-build $(if $(IS_APP)$(ROOT_DIR),,apps-ct) - $(verbose) mkdir -p $(CT_LOGS_DIR) - $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(CT_SUITES)) $(CT_OPTS) -endif -endif - -ifneq ($(ALL_APPS_DIRS),) -define ct_app_target -apps-ct-$1: test-build - $$(MAKE) -C $1 ct IS_APP=1 -endef - -$(foreach app,$(ALL_APPS_DIRS),$(eval $(call ct_app_target,$(app)))) - -apps-ct: $(addprefix apps-ct-,$(ALL_APPS_DIRS)) -endif - -ifdef t -ifeq (,$(findstring :,$t)) -CT_EXTRA = -group $t -else -t_words = $(subst :, ,$t) -CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words)) -endif -else -ifdef c -CT_EXTRA = -case $c -else -CT_EXTRA = -endif -endif - -define ct_suite_target -ct-$(1): test-build - $(verbose) mkdir -p $(CT_LOGS_DIR) - $(gen_verbose_esc) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(1)) $(CT_EXTRA) $(CT_OPTS) -endef - -$(foreach test,$(CT_SUITES),$(eval $(call ct_suite_target,$(test)))) - -distclean-ct: - $(gen_verbose) rm -rf $(CT_LOGS_DIR) - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: plt distclean-plt dialyze - -# Configuration. - -DIALYZER_PLT ?= $(CURDIR)/.$(PROJECT).plt -export DIALYZER_PLT - -PLT_APPS ?= -DIALYZER_DIRS ?= --src -r $(wildcard src) $(ALL_APPS_DIRS) -DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs -DIALYZER_PLT_OPTS ?= - -# Core targets. - -check:: dialyze - -distclean:: distclean-plt - -help:: - $(verbose) printf "%s\n" "" \ - "Dialyzer targets:" \ - " plt Build a PLT file for this project" \ - " dialyze Analyze the project using Dialyzer" - -# Plugin-specific targets. - -define filter_opts.erl - Opts = init:get_plain_arguments(), - {Filtered, _} = lists:foldl(fun - (O, {Os, true}) -> {[O|Os], false}; - (O = "-D", {Os, _}) -> {[O|Os], true}; - (O = [\\$$-, \\$$D, _ | _], {Os, _}) -> {[O|Os], false}; - (O = "-I", {Os, _}) -> {[O|Os], true}; - (O = [\\$$-, \\$$I, _ | _], {Os, _}) -> {[O|Os], false}; - (O = "-pa", {Os, _}) -> {[O|Os], true}; - (_, Acc) -> Acc - end, {[], false}, Opts), - io:format("~s~n", [string:join(lists:reverse(Filtered), " ")]), - halt(). -endef - -# DIALYZER_PLT is a variable understood directly by Dialyzer. -# -# We append the path to erts at the end of the PLT. This works -# because the PLT file is in the external term format and the -# function binary_to_term/1 ignores any trailing data. -$(DIALYZER_PLT): deps app - $(eval DEPS_LOG := $(shell test -f $(ERLANG_MK_TMP)/deps.log && \ - while read p; do test -d $$p/ebin && echo $$p/ebin; done <$(ERLANG_MK_TMP)/deps.log)) - $(verbose) dialyzer --build_plt $(DIALYZER_PLT_OPTS) --apps \ - erts kernel stdlib $(PLT_APPS) $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS_LOG) || test $$? -eq 2 - $(verbose) $(ERL) -eval 'io:format("~n~s~n", [code:lib_dir(erts)]), halt().' >> $@ - -plt: $(DIALYZER_PLT) - -distclean-plt: - $(gen_verbose) rm -f $(DIALYZER_PLT) - -ifneq ($(wildcard $(DIALYZER_PLT)),) -dialyze: $(if $(filter --src,$(DIALYZER_DIRS)),,deps app) - $(verbose) if ! tail -n1 $(DIALYZER_PLT) | \ - grep -q "^`$(ERL) -eval 'io:format("~s", [code:lib_dir(erts)]), halt().'`$$"; then \ - rm $(DIALYZER_PLT); \ - $(MAKE) plt; \ - fi -else -dialyze: $(DIALYZER_PLT) -endif - $(verbose) dialyzer --no_native `$(ERL) \ - -eval "$(subst $(newline),,$(call escape_dquotes,$(call filter_opts.erl)))" \ - -extra $(ERLC_OPTS)` $(DIALYZER_DIRS) $(DIALYZER_OPTS) $(if $(wildcard ebin/),-pa ebin/) - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: distclean-edoc edoc - -# Configuration. - -EDOC_OPTS ?= -EDOC_SRC_DIRS ?= -EDOC_OUTPUT ?= doc - -define edoc.erl - SrcPaths = lists:foldl(fun(P, Acc) -> - filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc - end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]), - DefaultOpts = [{dir, "$(EDOC_OUTPUT)"}, {source_path, SrcPaths}, {subpackages, false}], - edoc:application($(1), ".", [$(2)] ++ DefaultOpts), - halt(0). -endef - -# Core targets. - -ifneq ($(strip $(EDOC_SRC_DIRS)$(wildcard doc/overview.edoc)),) -docs:: edoc -endif - -distclean:: distclean-edoc - -# Plugin-specific targets. - -edoc: distclean-edoc doc-deps - $(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS))) - -distclean-edoc: - $(gen_verbose) rm -f $(EDOC_OUTPUT)/*.css $(EDOC_OUTPUT)/*.html $(EDOC_OUTPUT)/*.png $(EDOC_OUTPUT)/edoc-info - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -# Configuration. - -DTL_FULL_PATH ?= -DTL_PATH ?= templates/ -DTL_PREFIX ?= -DTL_SUFFIX ?= _dtl -DTL_OPTS ?= - -# Verbosity. - -dtl_verbose_0 = @echo " DTL " $(filter %.dtl,$(?F)); -dtl_verbose = $(dtl_verbose_$(V)) - -# Core targets. - -DTL_PATH := $(abspath $(DTL_PATH)) -DTL_FILES := $(sort $(call core_find,$(DTL_PATH),*.dtl)) - -ifneq ($(DTL_FILES),) - -DTL_NAMES = $(addprefix $(DTL_PREFIX),$(addsuffix $(DTL_SUFFIX),$(DTL_FILES:$(DTL_PATH)/%.dtl=%))) -DTL_MODULES = $(if $(DTL_FULL_PATH),$(subst /,_,$(DTL_NAMES)),$(notdir $(DTL_NAMES))) -BEAM_FILES += $(addsuffix .beam,$(addprefix ebin/,$(DTL_MODULES))) - -ifneq ($(words $(DTL_FILES)),0) -# Rebuild templates when the Makefile changes. -$(ERLANG_MK_TMP)/last-makefile-change-erlydtl: $(MAKEFILE_LIST) | $(ERLANG_MK_TMP) - $(verbose) if test -f $@; then \ - touch $(DTL_FILES); \ - fi - $(verbose) touch $@ - -ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change-erlydtl -endif - -define erlydtl_compile.erl - [begin - Module0 = case "$(strip $(DTL_FULL_PATH))" of - "" -> - filename:basename(F, ".dtl"); - _ -> - "$(DTL_PATH)/" ++ F2 = filename:rootname(F, ".dtl"), - re:replace(F2, "/", "_", [{return, list}, global]) - end, - Module = list_to_atom("$(DTL_PREFIX)" ++ string:to_lower(Module0) ++ "$(DTL_SUFFIX)"), - case erlydtl:compile(F, Module, [$(DTL_OPTS)] ++ [{out_dir, "ebin/"}, return_errors]) of - ok -> ok; - {ok, _} -> ok - end - end || F <- string:tokens("$(1)", " ")], - halt(). -endef - -ebin/$(PROJECT).app:: $(DTL_FILES) | ebin/ - $(if $(strip $?),\ - $(dtl_verbose) $(call erlang,$(call erlydtl_compile.erl,$(call core_native_path,$?)),\ - -pa ebin/)) - -endif - -# Copyright (c) 2016, Loïc Hoguin -# Copyright (c) 2014, Dave Cottlehuber -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: distclean-escript escript escript-zip - -# Configuration. - -ESCRIPT_NAME ?= $(PROJECT) -ESCRIPT_FILE ?= $(ESCRIPT_NAME) - -ESCRIPT_SHEBANG ?= /usr/bin/env escript -ESCRIPT_COMMENT ?= This is an -*- erlang -*- file -ESCRIPT_EMU_ARGS ?= -escript main $(ESCRIPT_NAME) - -ESCRIPT_ZIP ?= 7z a -tzip -mx=9 -mtc=off $(if $(filter-out 0,$(V)),,> /dev/null) -ESCRIPT_ZIP_FILE ?= $(ERLANG_MK_TMP)/escript.zip - -# Core targets. - -distclean:: distclean-escript - -help:: - $(verbose) printf "%s\n" "" \ - "Escript targets:" \ - " escript Build an executable escript archive" \ - -# Plugin-specific targets. - -escript-zip:: FULL=1 -escript-zip:: deps app - $(verbose) mkdir -p $(dir $(ESCRIPT_ZIP)) - $(verbose) rm -f $(ESCRIPT_ZIP_FILE) - $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(PROJECT)/ebin/* -ifneq ($(DEPS),) - $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) \ - $(subst $(DEPS_DIR)/,,$(addsuffix /*,$(wildcard \ - $(addsuffix /ebin,$(shell cat $(ERLANG_MK_TMP)/deps.log))))) -endif - -escript:: escript-zip - $(gen_verbose) printf "%s\n" \ - "#!$(ESCRIPT_SHEBANG)" \ - "%% $(ESCRIPT_COMMENT)" \ - "%%! $(ESCRIPT_EMU_ARGS)" > $(ESCRIPT_FILE) - $(verbose) cat $(ESCRIPT_ZIP_FILE) >> $(ESCRIPT_FILE) - $(verbose) chmod +x $(ESCRIPT_FILE) - -distclean-escript: - $(gen_verbose) rm -f $(ESCRIPT_FILE) - -# Copyright (c) 2015-2016, Loïc Hoguin -# Copyright (c) 2014, Enrique Fernandez -# This file is contributed to erlang.mk and subject to the terms of the ISC License. - -.PHONY: eunit apps-eunit - -# Configuration - -EUNIT_OPTS ?= -EUNIT_ERL_OPTS ?= - -# Core targets. - -tests:: eunit - -help:: - $(verbose) printf "%s\n" "" \ - "EUnit targets:" \ - " eunit Run all the EUnit tests for this project" - -# Plugin-specific targets. - -define eunit.erl - $(call cover.erl) - CoverSetup(), - case eunit:test($1, [$(EUNIT_OPTS)]) of - ok -> ok; - error -> halt(2) - end, - CoverExport("$(COVER_DATA_DIR)/eunit.coverdata"), - halt() -endef - -EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(CURDIR)/ebin - -ifdef t -ifeq (,$(findstring :,$(t))) -eunit: test-build cover-data-dir - $(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS)) -else -eunit: test-build cover-data-dir - $(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS)) -endif -else -EUNIT_EBIN_MODS = $(notdir $(basename $(ERL_FILES) $(BEAM_FILES))) -EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl))) - -EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \ - $(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)') - -eunit: test-build $(if $(IS_APP)$(ROOT_DIR),,apps-eunit) cover-data-dir -ifneq ($(wildcard src/ $(TEST_DIR)),) - $(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS)) -endif - -ifneq ($(ALL_APPS_DIRS),) -apps-eunit: test-build - $(verbose) eunit_retcode=0 ; for app in $(ALL_APPS_DIRS); do $(MAKE) -C $$app eunit IS_APP=1; \ - [ $$? -ne 0 ] && eunit_retcode=1 ; done ; \ - exit $$eunit_retcode -endif -endif - -# Copyright (c) 2015-2017, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -ifeq ($(filter proper,$(DEPS) $(TEST_DEPS)),proper) -.PHONY: proper - -# Targets. - -tests:: proper - -define proper_check.erl - $(call cover.erl) - code:add_pathsa([ - "$(call core_native_path,$(CURDIR)/ebin)", - "$(call core_native_path,$(DEPS_DIR)/*/ebin)", - "$(call core_native_path,$(TEST_DIR))"]), - Module = fun(M) -> - [true] =:= lists:usort([ - case atom_to_list(F) of - "prop_" ++ _ -> - io:format("Testing ~p:~p/0~n", [M, F]), - proper:quickcheck(M:F(), nocolors); - _ -> - true - end - || {F, 0} <- M:module_info(exports)]) - end, - try begin - CoverSetup(), - Res = case $(1) of - all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]); - module -> Module($(2)); - function -> proper:quickcheck($(2), nocolors) - end, - CoverExport("$(COVER_DATA_DIR)/proper.coverdata"), - Res - end of - true -> halt(0); - _ -> halt(1) - catch error:undef -> - io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), - halt(0) - end. -endef - -ifdef t -ifeq (,$(findstring :,$(t))) -proper: test-build cover-data-dir - $(verbose) $(call erlang,$(call proper_check.erl,module,$(t))) -else -proper: test-build cover-data-dir - $(verbose) echo Testing $(t)/0 - $(verbose) $(call erlang,$(call proper_check.erl,function,$(t)())) -endif -else -proper: test-build cover-data-dir - $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ - $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) - $(gen_verbose) $(call erlang,$(call proper_check.erl,all,undefined,$(MODULES))) -endif -endif - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -# Verbosity. - -proto_verbose_0 = @echo " PROTO " $(filter %.proto,$(?F)); -proto_verbose = $(proto_verbose_$(V)) - -# Core targets. - -ifneq ($(wildcard src/),) -PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) -ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) - -ifeq ($(PROTO_FILES),) -$(ERLANG_MK_TMP)/last-makefile-change-protobuffs: - $(verbose) : -else -# Rebuild proto files when the Makefile changes. -# We exclude $(PROJECT).d to avoid a circular dependency. -$(ERLANG_MK_TMP)/last-makefile-change-protobuffs: $(filter-out $(PROJECT).d,$(MAKEFILE_LIST)) | $(ERLANG_MK_TMP) - $(verbose) if test -f $@; then \ - touch $(PROTO_FILES); \ - fi - $(verbose) touch $@ - -$(PROJECT).d:: $(ERLANG_MK_TMP)/last-makefile-change-protobuffs -endif - -ifeq ($(filter gpb,$(BUILD_DEPS) $(DEPS)),) -define compile_proto.erl - [begin - protobuffs_compile:generate_source(F, [ - {output_include_dir, "./include"}, - {output_src_dir, "./src"}]) - end || F <- string:tokens("$1", " ")], - halt(). -endef -else -define compile_proto.erl - [begin - gpb_compile:file(F, [ - {include_as_lib, true}, - {module_name_suffix, "_pb"}, - {o_hrl, "./include"}, - {o_erl, "./src"}]) - end || F <- string:tokens("$1", " ")], - halt(). -endef -endif - -ifneq ($(PROTO_FILES),) -$(PROJECT).d:: $(PROTO_FILES) - $(verbose) mkdir -p ebin/ include/ - $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) -endif -endif - -# Copyright (c) 2013-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: relx-rel relx-relup distclean-relx-rel run - -# Configuration. - -RELX ?= $(ERLANG_MK_TMP)/relx -RELX_CONFIG ?= $(CURDIR)/relx.config - -RELX_URL ?= https://erlang.mk/res/relx-v3.27.0 -RELX_OPTS ?= -RELX_OUTPUT_DIR ?= _rel -RELX_REL_EXT ?= -RELX_TAR ?= 1 - -ifdef SFX - RELX_TAR = 1 -endif - -ifeq ($(firstword $(RELX_OPTS)),-o) - RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS)) -else - RELX_OPTS += -o $(RELX_OUTPUT_DIR) -endif - -# Core targets. - -ifeq ($(IS_DEP),) -ifneq ($(wildcard $(RELX_CONFIG)),) -rel:: relx-rel - -relup:: relx-relup -endif -endif - -distclean:: distclean-relx-rel - -# Plugin-specific targets. - -$(RELX): | $(ERLANG_MK_TMP) - $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL)) - $(verbose) chmod +x $(RELX) - -relx-rel: $(RELX) rel-deps app - $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release - $(verbose) $(MAKE) relx-post-rel -ifeq ($(RELX_TAR),1) - $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) tar -endif - -relx-relup: $(RELX) rel-deps app - $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release - $(MAKE) relx-post-rel - $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) relup $(if $(filter 1,$(RELX_TAR)),tar) - -distclean-relx-rel: - $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR) - -# Default hooks. -relx-post-rel:: - $(verbose) : - -# Run target. - -ifeq ($(wildcard $(RELX_CONFIG)),) -run:: -else - -define get_relx_release.erl - {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"), - {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config), - Vsn = case Vsn0 of - {cmd, Cmd} -> os:cmd(Cmd); - semver -> ""; - {semver, _} -> ""; - VsnStr -> Vsn0 - end, - Extended = case lists:keyfind(extended_start_script, 1, Config) of - {_, true} -> "1"; - _ -> "" - end, - io:format("~s ~s ~s", [Name, Vsn, Extended]), - halt(0). -endef - -RELX_REL := $(shell $(call erlang,$(get_relx_release.erl))) -RELX_REL_NAME := $(word 1,$(RELX_REL)) -RELX_REL_VSN := $(word 2,$(RELX_REL)) -RELX_REL_CMD := $(if $(word 3,$(RELX_REL)),console) - -ifeq ($(PLATFORM),msys2) -RELX_REL_EXT := .cmd -endif - -run:: all - $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) $(RELX_REL_CMD) - -ifdef RELOAD -rel:: - $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping - $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \ - eval "io:format(\"~p~n\", [c:lm()])" -endif - -help:: - $(verbose) printf "%s\n" "" \ - "Relx targets:" \ - " run Compile the project, build the release and run it" - -endif - -# Copyright (c) 2015-2016, Loïc Hoguin -# Copyright (c) 2014, M Robert Martin -# This file is contributed to erlang.mk and subject to the terms of the ISC License. - -.PHONY: shell - -# Configuration. - -SHELL_ERL ?= erl -SHELL_PATHS ?= $(CURDIR)/ebin $(TEST_DIR) -SHELL_OPTS ?= - -ALL_SHELL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(SHELL_DEPS)) - -# Core targets - -help:: - $(verbose) printf "%s\n" "" \ - "Shell targets:" \ - " shell Run an erlang shell with SHELL_OPTS or reasonable default" - -# Plugin-specific targets. - -$(foreach dep,$(SHELL_DEPS),$(eval $(call dep_target,$(dep)))) - -ifneq ($(SKIP_DEPS),) -build-shell-deps: -else -build-shell-deps: $(ALL_SHELL_DEPS_DIRS) - $(verbose) set -e; for dep in $(ALL_SHELL_DEPS_DIRS) ; do \ - if [ -z "$(strip $(FULL))" ] && [ ! -L $$dep ] && [ -f $$dep/ebin/dep_built ]; then \ - :; \ - else \ - $(MAKE) -C $$dep IS_DEP=1; \ - if [ ! -L $$dep ] && [ -d $$dep/ebin ]; then touch $$dep/ebin/dep_built; fi; \ - fi \ - done -endif - -shell:: build-shell-deps - $(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS) - -# Copyright 2017, Stanislaw Klekot -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: distclean-sphinx sphinx - -# Configuration. - -SPHINX_BUILD ?= sphinx-build -SPHINX_SOURCE ?= doc -SPHINX_CONFDIR ?= -SPHINX_FORMATS ?= html -SPHINX_DOCTREES ?= $(ERLANG_MK_TMP)/sphinx.doctrees -SPHINX_OPTS ?= - -#sphinx_html_opts = -#sphinx_html_output = html -#sphinx_man_opts = -#sphinx_man_output = man -#sphinx_latex_opts = -#sphinx_latex_output = latex - -# Helpers. - -sphinx_build_0 = @echo " SPHINX" $1; $(SPHINX_BUILD) -N -q -sphinx_build_1 = $(SPHINX_BUILD) -N -sphinx_build_2 = set -x; $(SPHINX_BUILD) -sphinx_build = $(sphinx_build_$(V)) - -define sphinx.build -$(call sphinx_build,$1) -b $1 -d $(SPHINX_DOCTREES) $(if $(SPHINX_CONFDIR),-c $(SPHINX_CONFDIR)) $(SPHINX_OPTS) $(sphinx_$1_opts) -- $(SPHINX_SOURCE) $(call sphinx.output,$1) - -endef - -define sphinx.output -$(if $(sphinx_$1_output),$(sphinx_$1_output),$1) -endef - -# Targets. - -ifneq ($(wildcard $(if $(SPHINX_CONFDIR),$(SPHINX_CONFDIR),$(SPHINX_SOURCE))/conf.py),) -docs:: sphinx -distclean:: distclean-sphinx -endif - -help:: - $(verbose) printf "%s\n" "" \ - "Sphinx targets:" \ - " sphinx Generate Sphinx documentation." \ - "" \ - "ReST sources and 'conf.py' file are expected in directory pointed by" \ - "SPHINX_SOURCE ('doc' by default). SPHINX_FORMATS lists formats to build (only" \ - "'html' format is generated by default); target directory can be specified by" \ - 'setting sphinx_$${format}_output, for example: sphinx_html_output = output/html' \ - "Additional Sphinx options can be set in SPHINX_OPTS." - -# Plugin-specific targets. - -sphinx: - $(foreach F,$(SPHINX_FORMATS),$(call sphinx.build,$F)) - -distclean-sphinx: - $(gen_verbose) rm -rf $(filter-out $(SPHINX_SOURCE),$(foreach F,$(SPHINX_FORMATS),$(call sphinx.output,$F))) - -# Copyright (c) 2017, Jean-Sébastien Pédron -# This file is contributed to erlang.mk and subject to the terms of the ISC License. - -.PHONY: show-ERL_LIBS show-ERLC_OPTS show-TEST_ERLC_OPTS - -show-ERL_LIBS: - @echo $(ERL_LIBS) - -show-ERLC_OPTS: - @$(foreach opt,$(ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) - -show-TEST_ERLC_OPTS: - @$(foreach opt,$(TEST_ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) - -# Copyright (c) 2015-2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -ifeq ($(filter triq,$(DEPS) $(TEST_DEPS)),triq) -.PHONY: triq - -# Targets. - -tests:: triq - -define triq_check.erl - $(call cover.erl) - code:add_pathsa([ - "$(call core_native_path,$(CURDIR)/ebin)", - "$(call core_native_path,$(DEPS_DIR)/*/ebin)", - "$(call core_native_path,$(TEST_DIR))"]), - try begin - CoverSetup(), - Res = case $(1) of - all -> [true] =:= lists:usort([triq:check(M) || M <- [$(call comma_list,$(3))]]); - module -> triq:check($(2)); - function -> triq:check($(2)) - end, - CoverExport("$(COVER_DATA_DIR)/triq.coverdata"), - Res - end of - true -> halt(0); - _ -> halt(1) - catch error:undef -> - io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), - halt(0) - end. -endef - -ifdef t -ifeq (,$(findstring :,$(t))) -triq: test-build cover-data-dir - $(verbose) $(call erlang,$(call triq_check.erl,module,$(t))) -else -triq: test-build cover-data-dir - $(verbose) echo Testing $(t)/0 - $(verbose) $(call erlang,$(call triq_check.erl,function,$(t)())) -endif -else -triq: test-build cover-data-dir - $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ - $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) - $(gen_verbose) $(call erlang,$(call triq_check.erl,all,undefined,$(MODULES))) -endif -endif - -# Copyright (c) 2016, Loïc Hoguin -# Copyright (c) 2015, Erlang Solutions Ltd. -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: xref distclean-xref - -# Configuration. - -ifeq ($(XREF_CONFIG),) - XREFR_ARGS := -else - XREFR_ARGS := -c $(XREF_CONFIG) -endif - -XREFR ?= $(CURDIR)/xrefr -export XREFR - -XREFR_URL ?= https://github.com/inaka/xref_runner/releases/download/1.1.0/xrefr - -# Core targets. - -help:: - $(verbose) printf '%s\n' '' \ - 'Xref targets:' \ - ' xref Run Xrefr using $$XREF_CONFIG as config file if defined' - -distclean:: distclean-xref - -# Plugin-specific targets. - -$(XREFR): - $(gen_verbose) $(call core_http_get,$(XREFR),$(XREFR_URL)) - $(verbose) chmod +x $(XREFR) - -xref: deps app $(XREFR) - $(gen_verbose) $(XREFR) $(XREFR_ARGS) - -distclean-xref: - $(gen_verbose) rm -rf $(XREFR) - -# Copyright (c) 2016, Loïc Hoguin -# Copyright (c) 2015, Viktor Söderqvist -# This file is part of erlang.mk and subject to the terms of the ISC License. - -COVER_REPORT_DIR ?= cover -COVER_DATA_DIR ?= $(COVER_REPORT_DIR) - -ifdef COVER -COVER_APPS ?= $(notdir $(ALL_APPS_DIRS)) -COVER_DEPS ?= -endif - -# Code coverage for Common Test. - -ifdef COVER -ifdef CT_RUN -ifneq ($(wildcard $(TEST_DIR)),) -test-build:: $(TEST_DIR)/ct.cover.spec - -$(TEST_DIR)/ct.cover.spec: cover-data-dir - $(gen_verbose) printf "%s\n" \ - "{incl_app, '$(PROJECT)', details}." \ - "{incl_dirs, '$(PROJECT)', [\"$(CURDIR)/ebin\" \ - $(foreach a,$(COVER_APPS),$(comma) \"$(APPS_DIR)/$a/ebin\") \ - $(foreach d,$(COVER_DEPS),$(comma) \"$(DEPS_DIR)/$d/ebin\")]}." \ - '{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@ - -CT_RUN += -cover $(TEST_DIR)/ct.cover.spec -endif -endif -endif - -# Code coverage for other tools. - -ifdef COVER -define cover.erl - CoverSetup = fun() -> - Dirs = ["$(CURDIR)/ebin" - $(foreach a,$(COVER_APPS),$(comma) "$(APPS_DIR)/$a/ebin") - $(foreach d,$(COVER_DEPS),$(comma) "$(DEPS_DIR)/$d/ebin")], - [begin - case filelib:is_dir(Dir) of - false -> false; - true -> - case cover:compile_beam_directory(Dir) of - {error, _} -> halt(1); - _ -> true - end - end - end || Dir <- Dirs] - end, - CoverExport = fun(Filename) -> cover:export(Filename) end, -endef -else -define cover.erl - CoverSetup = fun() -> ok end, - CoverExport = fun(_) -> ok end, -endef -endif - -# Core targets - -ifdef COVER -ifneq ($(COVER_REPORT_DIR),) -tests:: - $(verbose) $(MAKE) --no-print-directory cover-report -endif - -cover-data-dir: | $(COVER_DATA_DIR) - -$(COVER_DATA_DIR): - $(verbose) mkdir -p $(COVER_DATA_DIR) -else -cover-data-dir: -endif - -clean:: coverdata-clean - -ifneq ($(COVER_REPORT_DIR),) -distclean:: cover-report-clean -endif - -help:: - $(verbose) printf "%s\n" "" \ - "Cover targets:" \ - " cover-report Generate a HTML coverage report from previously collected" \ - " cover data." \ - " all.coverdata Merge all coverdata files into all.coverdata." \ - "" \ - "If COVER=1 is set, coverage data is generated by the targets eunit and ct. The" \ - "target tests additionally generates a HTML coverage report from the combined" \ - "coverdata files from each of these testing tools. HTML reports can be disabled" \ - "by setting COVER_REPORT_DIR to empty." - -# Plugin specific targets - -COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata)) - -.PHONY: coverdata-clean -coverdata-clean: - $(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec - -# Merge all coverdata files into one. -define cover_export.erl - $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) - cover:export("$(COVER_DATA_DIR)/$@"), halt(0). -endef - -all.coverdata: $(COVERDATA) cover-data-dir - $(gen_verbose) $(call erlang,$(cover_export.erl)) - -# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to -# empty if you want the coverdata files but not the HTML report. -ifneq ($(COVER_REPORT_DIR),) - -.PHONY: cover-report-clean cover-report - -cover-report-clean: - $(gen_verbose) rm -rf $(COVER_REPORT_DIR) -ifneq ($(COVER_REPORT_DIR),$(COVER_DATA_DIR)) - $(if $(shell ls -A $(COVER_DATA_DIR)/),,$(verbose) rmdir $(COVER_DATA_DIR)) -endif - -ifeq ($(COVERDATA),) -cover-report: -else - -# Modules which include eunit.hrl always contain one line without coverage -# because eunit defines test/0 which is never called. We compensate for this. -EUNIT_HRL_MODS = $(subst $(space),$(comma),$(shell \ - grep -H -e '^\s*-include.*include/eunit\.hrl"' src/*.erl \ - | sed "s/^src\/\(.*\)\.erl:.*/'\1'/" | uniq)) - -define cover_report.erl - $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) - Ms = cover:imported_modules(), - [cover:analyse_to_file(M, "$(COVER_REPORT_DIR)/" ++ atom_to_list(M) - ++ ".COVER.html", [html]) || M <- Ms], - Report = [begin {ok, R} = cover:analyse(M, module), R end || M <- Ms], - EunitHrlMods = [$(EUNIT_HRL_MODS)], - Report1 = [{M, {Y, case lists:member(M, EunitHrlMods) of - true -> N - 1; false -> N end}} || {M, {Y, N}} <- Report], - TotalY = lists:sum([Y || {_, {Y, _}} <- Report1]), - TotalN = lists:sum([N || {_, {_, N}} <- Report1]), - Perc = fun(Y, N) -> case Y + N of 0 -> 100; S -> round(100 * Y / S) end end, - TotalPerc = Perc(TotalY, TotalN), - {ok, F} = file:open("$(COVER_REPORT_DIR)/index.html", [write]), - io:format(F, "~n" - "~n" - "Coverage report~n" - "~n", []), - io:format(F, "

    Coverage

    ~n

    Total: ~p%

    ~n", [TotalPerc]), - io:format(F, "~n", []), - [io:format(F, "" - "~n", - [M, M, Perc(Y, N)]) || {M, {Y, N}} <- Report1], - How = "$(subst $(space),$(comma)$(space),$(basename $(COVERDATA)))", - Date = "$(shell date -u "+%Y-%m-%dT%H:%M:%SZ")", - io:format(F, "
    ModuleCoverage
    ~p~p%
    ~n" - "

    Generated using ~s and erlang.mk on ~s.

    ~n" - "", [How, Date]), - halt(). -endef - -cover-report: - $(verbose) mkdir -p $(COVER_REPORT_DIR) - $(gen_verbose) $(call erlang,$(cover_report.erl)) - -endif -endif # ifneq ($(COVER_REPORT_DIR),) - -# Copyright (c) 2016, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -.PHONY: sfx - -ifdef RELX_REL -ifdef SFX - -# Configuration. - -SFX_ARCHIVE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/$(RELX_REL_NAME)-$(RELX_REL_VSN).tar.gz -SFX_OUTPUT_FILE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME).run - -# Core targets. - -rel:: sfx - -# Plugin-specific targets. - -define sfx_stub -#!/bin/sh - -TMPDIR=`mktemp -d` -ARCHIVE=`awk '/^__ARCHIVE_BELOW__$$/ {print NR + 1; exit 0;}' $$0` -FILENAME=$$(basename $$0) -REL=$${FILENAME%.*} - -tail -n+$$ARCHIVE $$0 | tar -xzf - -C $$TMPDIR - -$$TMPDIR/bin/$$REL console -RET=$$? - -rm -rf $$TMPDIR - -exit $$RET - -__ARCHIVE_BELOW__ -endef - -sfx: - $(verbose) $(call core_render,sfx_stub,$(SFX_OUTPUT_FILE)) - $(gen_verbose) cat $(SFX_ARCHIVE) >> $(SFX_OUTPUT_FILE) - $(verbose) chmod +x $(SFX_OUTPUT_FILE) - -endif -endif - -# Copyright (c) 2013-2017, Loïc Hoguin -# This file is part of erlang.mk and subject to the terms of the ISC License. - -# External plugins. - -DEP_PLUGINS ?= - -$(foreach p,$(DEP_PLUGINS),\ - $(eval $(if $(findstring /,$p),\ - $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ - $(call core_dep_plugin,$p/plugins.mk,$p)))) - -help:: help-plugins - -help-plugins:: - $(verbose) : - -# Copyright (c) 2013-2015, Loïc Hoguin -# Copyright (c) 2015-2016, Jean-Sébastien Pédron -# This file is part of erlang.mk and subject to the terms of the ISC License. - -# Fetch dependencies recursively (without building them). - -.PHONY: fetch-deps fetch-doc-deps fetch-rel-deps fetch-test-deps \ - fetch-shell-deps - -.PHONY: $(ERLANG_MK_RECURSIVE_DEPS_LIST) \ - $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ - $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ - $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ - $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) - -fetch-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) -fetch-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) -fetch-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) -fetch-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) -fetch-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) - -ifneq ($(SKIP_DEPS),) -$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): - $(verbose) :> $@ -else -# By default, we fetch "normal" dependencies. They are also included no -# matter the type of requested dependencies. -# -# $(ALL_DEPS_DIRS) includes $(BUILD_DEPS). - -$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DEPS_DIRS) -$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_DOC_DEPS_DIRS) -$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_REL_DEPS_DIRS) -$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_TEST_DEPS_DIRS) -$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_SHELL_DEPS_DIRS) - -# Allow to use fetch-deps and $(DEP_TYPES) to fetch multiple types of -# dependencies with a single target. -ifneq ($(filter doc,$(DEP_TYPES)),) -$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DOC_DEPS_DIRS) -endif -ifneq ($(filter rel,$(DEP_TYPES)),) -$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_REL_DEPS_DIRS) -endif -ifneq ($(filter test,$(DEP_TYPES)),) -$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_TEST_DEPS_DIRS) -endif -ifneq ($(filter shell,$(DEP_TYPES)),) -$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_SHELL_DEPS_DIRS) -endif - -ERLANG_MK_RECURSIVE_TMP_LIST := $(abspath $(ERLANG_MK_TMP)/recursive-tmp-deps.log) - -$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ -$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): | $(ERLANG_MK_TMP) -ifeq ($(IS_APP)$(IS_DEP),) - $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST) -endif -ifndef IS_APP - $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ - $(MAKE) -C $$dep $@ \ - IS_APP=1 \ - ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ - done -endif - $(verbose) set -e; for dep in $^ ; do \ - if ! grep -qs ^$$dep$$ $(ERLANG_MK_RECURSIVE_TMP_LIST); then \ - echo $$dep >> $(ERLANG_MK_RECURSIVE_TMP_LIST); \ - if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \ - $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \ - $(MAKE) -C $$dep fetch-deps \ - IS_DEP=1 \ - ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ - fi \ - fi \ - done -ifeq ($(IS_APP)$(IS_DEP),) - $(verbose) sort < $(ERLANG_MK_RECURSIVE_TMP_LIST) | uniq > $@ - $(verbose) rm $(ERLANG_MK_RECURSIVE_TMP_LIST) -endif -endif # ifneq ($(SKIP_DEPS),) - -# List dependencies recursively. - -.PHONY: list-deps list-doc-deps list-rel-deps list-test-deps \ - list-shell-deps - -list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) -list-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) -list-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) -list-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) -list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) - -list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: - $(verbose) cat $^ diff --git a/erlang/new_task.erl b/erlang/new_task.erl index 26df1587..9d64a9a0 100755 --- a/erlang/new_task.erl +++ b/erlang/new_task.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive.erl b/erlang/receive.erl index 1f990e03..57cc0c5a 100755 --- a/erlang/receive.erl +++ b/erlang/receive.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs.erl b/erlang/receive_logs.erl index 79edbb79..4043c292 100755 --- a/erlang/receive_logs.erl +++ b/erlang/receive_logs.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_direct.erl b/erlang/receive_logs_direct.erl index 6651b580..a03be869 100755 --- a/erlang/receive_logs_direct.erl +++ b/erlang/receive_logs_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_topic.erl b/erlang/receive_logs_topic.erl index ba8c288e..0366a14a 100755 --- a/erlang/receive_logs_topic.erl +++ b/erlang/receive_logs_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/send.erl b/erlang/send.erl index 61b7239c..58bf849d 100755 --- a/erlang/send.erl +++ b/erlang/send.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/worker.erl b/erlang/worker.erl index b2a7fbfd..54e0a913 100755 --- a/erlang/worker.erl +++ b/erlang/worker.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/amqp_client/ebin ./deps/rabbit_common/ebin ./deps/recon/ebin ./deps/lager/ebin ./deps/goldrush/ebin ./deps/jsx/ebin ./deps/ranch/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). From 9c464805ce63a4fa244e95284d5c9687eccde767 Mon Sep 17 00:00:00 2001 From: Simon Unge Date: Thu, 29 Sep 2022 13:42:56 -0700 Subject: [PATCH 244/659] untabify and fix indentation --- erlang/emit_log.erl | 8 ++++---- erlang/emit_log_direct.erl | 6 +++--- erlang/emit_log_topic.erl | 6 +++--- erlang/new_task.erl | 6 +++--- erlang/send.erl | 6 +++--- erlang/worker.erl | 5 +++-- 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/erlang/emit_log.erl b/erlang/emit_log.erl index 93c126e0..88297c3a 100755 --- a/erlang/emit_log.erl +++ b/erlang/emit_log.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -12,9 +12,9 @@ main(Argv) -> type = <<"fanout">>}), Message = case Argv of - [] -> <<"info: Hello World!">>; - Msg -> list_to_binary(string:join(Msg, " ")) - end, + [] -> <<"info: Hello World!">>; + Msg -> list_to_binary(string:join(Msg, " ")) + end, amqp_channel:cast(Channel, #'basic.publish'{exchange = <<"logs">>}, #amqp_msg{payload = Message}), diff --git a/erlang/emit_log_direct.erl b/erlang/emit_log_direct.erl index 07cf7ba9..e363a4f2 100755 --- a/erlang/emit_log_direct.erl +++ b/erlang/emit_log_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -21,8 +21,8 @@ main(Argv) -> end, amqp_channel:cast(Channel, #'basic.publish'{ - exchange = <<"direct_logs">>, - routing_key = Severity}, + exchange = <<"direct_logs">>, + routing_key = Severity}, #amqp_msg{payload = Message}), io:format(" [x] Sent ~p:~p~n", [Severity, Message]), ok = amqp_channel:close(Channel), diff --git a/erlang/emit_log_topic.erl b/erlang/emit_log_topic.erl index 3f1f3e12..0934d9ef 100755 --- a/erlang/emit_log_topic.erl +++ b/erlang/emit_log_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -21,8 +21,8 @@ main(Argv) -> end, amqp_channel:cast(Channel, #'basic.publish'{ - exchange = <<"topic_logs">>, - routing_key = RoutingKey}, + exchange = <<"topic_logs">>, + routing_key = RoutingKey}, #amqp_msg{payload = Message}), io:format(" [x] Sent ~p:~p~n", [RoutingKey, Message]), ok = amqp_channel:close(Channel), diff --git a/erlang/new_task.erl b/erlang/new_task.erl index 9d64a9a0..0ab63fc9 100755 --- a/erlang/new_task.erl +++ b/erlang/new_task.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -17,8 +17,8 @@ main(Argv) -> end, amqp_channel:cast(Channel, #'basic.publish'{ - exchange = <<"">>, - routing_key = <<"task_queue">>}, + exchange = <<"">>, + routing_key = <<"task_queue">>}, #amqp_msg{props = #'P_basic'{delivery_mode = 2}, payload = Message}), io:format(" [x] Sent ~p~n", [Message]), diff --git a/erlang/send.erl b/erlang/send.erl index 58bf849d..eb39a748 100755 --- a/erlang/send.erl +++ b/erlang/send.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -12,8 +12,8 @@ main(_) -> amqp_channel:cast(Channel, #'basic.publish'{ - exchange = <<"">>, - routing_key = <<"hello">>}, + exchange = <<"">>, + routing_key = <<"hello">>}, #amqp_msg{payload = <<"Hello World!">>}), io:format(" [x] Sent 'Hello World!'~n"), ok = amqp_channel:close(Channel), diff --git a/erlang/worker.erl b/erlang/worker.erl index 54e0a913..3b33f6d6 100755 --- a/erlang/worker.erl +++ b/erlang/worker.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). @@ -18,7 +18,8 @@ main(_) -> receive #'basic.consume_ok'{} -> ok end, - loop(Channel). + loop(Channel), + io:format("GOOD BYE~n"). loop(Channel) -> receive From a9d9eb25b066f9c9a62be62e49a0e1b4be3fc025 Mon Sep 17 00:00:00 2001 From: Adam Tajti Date: Wed, 19 Oct 2022 21:25:33 +0200 Subject: [PATCH 245/659] Renames amqp.node to amqplib --- README.md | 4 ++-- javascript-nodejs/README.md | 6 +++--- javascript-nodejs/package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 331f27b4..53a797db 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ The following ports are available: * [Erlang](./erlang) * [Go](./go) * [Haskell](./haskell) - * [JavaScript (with Node and amqp-node)](./javascript-nodejs) (using callbacks) - * [JavaScript (with Node and amqp-node)](https://github.com/squaremo/amqp.node/tree/master/examples) (using promises/futures) + * [JavaScript (with Node and amqplib)](./javascript-nodejs) (using callbacks) + * [JavaScript (with Node and amqplib)](https://github.com/amqp-node/amqplib) (using promises/futures) * [Java with Maven](./java-mvn) * [Java (with IntelliJ IDEA)](./java-idea) * [Java](./java) (with manual dependency management) diff --git a/javascript-nodejs/README.md b/javascript-nodejs/README.md index 2c90a082..5491b45f 100644 --- a/javascript-nodejs/README.md +++ b/javascript-nodejs/README.md @@ -9,13 +9,13 @@ To successfully use the examples you will need a running RabbitMQ server. ### Node.js -You need [Node.js](https://nodejs.org/en/download/) and [amqp.node](https://github.com/squaremo/amqp.node) +You need [Node.js](https://nodejs.org/en/download/) and [amqplib](https://github.com/amqp-node/amqplib) to run these tutorials. ### Client Library -To install `amqp.node` using npm: +To install `amqplib` using npm: ``` shell npm install amqplib -g @@ -64,4 +64,4 @@ node src/emit_log_topic.js red.rabbit Hello ``` shell node src/rpc_server.js node src/rpc_client.js 30 -``` \ No newline at end of file +``` diff --git a/javascript-nodejs/package.json b/javascript-nodejs/package.json index a8dc7ec7..cd258f77 100644 --- a/javascript-nodejs/package.json +++ b/javascript-nodejs/package.json @@ -1,7 +1,7 @@ { "name": "rabbitmq-node-tutorial", "version": "1.0.0", - "description": "RabbitMQ amqp.node tutorial ", + "description": "RabbitMQ amqplib tutorial ", "dependencies": { "amqplib": "latest", "js-beautify": "^1.9.1", From fda508e3f11d23a0b60f86d751113d301a9ecfd1 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 12 Nov 2022 23:55:10 +0400 Subject: [PATCH 246/659] Node port: upgrade dependencies to address a vulnerability See https://github.com/rabbitmq/rabbitmq-tutorials/security/dependabot/11 for details --- javascript-nodejs/package-lock.json | 467 +++++----------------------- 1 file changed, 82 insertions(+), 385 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index 4f411187..cdf84714 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -1,34 +1,45 @@ { "name": "rabbitmq-node-tutorial", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rabbitmq-node-tutorial", "version": "1.0.0", "dependencies": { - "amqplib": "*", + "amqplib": "latest", "js-beautify": "^1.9.1", "url-parse": ">=1.5.9" } }, + "node_modules/@acuminous/bitsyntax": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz", + "integrity": "sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==", + "dependencies": { + "buffer-more-ints": "~1.0.0", + "debug": "^4.3.4", + "safe-buffer": "~5.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/amqplib": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.8.0.tgz", - "integrity": "sha512-icU+a4kkq4Y1PS4NNi+YPDMwdlbFcZ1EZTQT2nigW3fvOb6AOgUQ9+Mk4ue0Zu5cBg/XpDzB40oH10ysrk2dmA==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.3.tgz", + "integrity": "sha512-UHmuSa7n8vVW/a5HGh2nFPqAEr8+cD4dEZ6u9GjP91nHfr1a54RyAKyra7Sb5NH7NBKOUlyQSMXIp0qAixKexw==", "dependencies": { - "bitsyntax": "~0.1.0", - "bluebird": "^3.7.2", + "@acuminous/bitsyntax": "^0.1.2", "buffer-more-ints": "~1.0.0", "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.2.1", - "url-parse": "~1.5.1" + "url-parse": "~1.5.10" }, "engines": { "node": ">=10" @@ -39,36 +50,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/bitsyntax": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", - "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", - "dependencies": { - "buffer-more-ints": "~1.0.0", - "debug": "~2.6.9", - "safe-buffer": "~5.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/bitsyntax/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/buffer-more-ints": { @@ -81,11 +68,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -96,16 +78,24 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/editorconfig": { @@ -125,22 +115,21 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -149,7 +138,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -168,17 +157,17 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/js-beautify": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", - "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.7.tgz", + "integrity": "sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==", "dependencies": { - "config-chain": "^1.1.12", + "config-chain": "^1.1.13", "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "nopt": "^5.0.0" + "glob": "^8.0.3", + "nopt": "^6.0.0" }, "bin": { "css-beautify": "js/bin/css-beautify.js", @@ -199,60 +188,52 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, "node_modules/querystringify": { "version": "2.2.0", @@ -262,7 +243,7 @@ "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -273,26 +254,12 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/semver": { "version": "5.7.1", @@ -305,17 +272,17 @@ "node_modules/sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==" }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/url-parse": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.9.tgz", - "integrity": "sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -324,282 +291,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "amqplib": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.8.0.tgz", - "integrity": "sha512-icU+a4kkq4Y1PS4NNi+YPDMwdlbFcZ1EZTQT2nigW3fvOb6AOgUQ9+Mk4ue0Zu5cBg/XpDzB40oH10ysrk2dmA==", - "requires": { - "bitsyntax": "~0.1.0", - "bluebird": "^3.7.2", - "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.2.1", - "url-parse": "~1.5.1" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bitsyntax": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", - "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", - "requires": { - "buffer-more-ints": "~1.0.0", - "debug": "~2.6.9", - "safe-buffer": "~5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-more-ints": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", - "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "js-beautify": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz", - "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==", - "requires": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "nopt": "^5.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "url-parse": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.9.tgz", - "integrity": "sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" } } } From 1014a24b6e7dfb1c46c2d8ac1ea2d3fa4b17e0d2 Mon Sep 17 00:00:00 2001 From: sasa Date: Wed, 14 Dec 2022 15:17:03 +0100 Subject: [PATCH 247/659] Added C++ code examplesfor all tutorials --- cpp/CMakeLists.txt | 40 +++++++++++++++++ cpp/README.md | 11 +++++ cpp/emit_log.cpp | 37 +++++++++++++++ cpp/emit_log_direct.cpp | 38 ++++++++++++++++ cpp/emit_log_topic.cpp | 38 ++++++++++++++++ cpp/new_task.cpp | 40 +++++++++++++++++ cpp/publisher_confirms.cpp | 52 ++++++++++++++++++++++ cpp/receive.cpp | 41 +++++++++++++++++ cpp/receive_logs.cpp | 52 ++++++++++++++++++++++ cpp/receive_logs_direct.cpp | 60 +++++++++++++++++++++++++ cpp/receive_logs_topic.cpp | 60 +++++++++++++++++++++++++ cpp/rpc_client.cpp | 89 +++++++++++++++++++++++++++++++++++++ cpp/rpc_server.cpp | 62 ++++++++++++++++++++++++++ cpp/send.cpp | 26 +++++++++++ cpp/worker.cpp | 49 ++++++++++++++++++++ 15 files changed, 695 insertions(+) create mode 100644 cpp/CMakeLists.txt create mode 100644 cpp/README.md create mode 100644 cpp/emit_log.cpp create mode 100644 cpp/emit_log_direct.cpp create mode 100644 cpp/emit_log_topic.cpp create mode 100644 cpp/new_task.cpp create mode 100644 cpp/publisher_confirms.cpp create mode 100644 cpp/receive.cpp create mode 100644 cpp/receive_logs.cpp create mode 100644 cpp/receive_logs_direct.cpp create mode 100644 cpp/receive_logs_topic.cpp create mode 100644 cpp/rpc_client.cpp create mode 100644 cpp/rpc_server.cpp create mode 100644 cpp/send.cpp create mode 100644 cpp/worker.cpp diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt new file mode 100644 index 00000000..24b5acd7 --- /dev/null +++ b/cpp/CMakeLists.txt @@ -0,0 +1,40 @@ +set(CMAKE_CXX_STANDARD 11) + +add_executable(send send.cpp) +target_link_libraries(send rabbitmq) + +add_executable(receive receive.cpp) +target_link_libraries(receive rabbitmq) + +add_executable(new_task new_task.cpp) +target_link_libraries(new_task rabbitmq) + +add_executable(worker worker.cpp) +target_link_libraries(worker rabbitmq) + +add_executable(emit_log emit_log.cpp) +target_link_libraries(emit_log rabbitmq) + +add_executable(receive_logs receive_logs.cpp) +target_link_libraries(receive_logs rabbitmq) + +add_executable(emit_log_direct emit_log_direct.cpp) +target_link_libraries(emit_log_direct rabbitmq) + +add_executable(receive_logs_direct receive_logs_direct.cpp) +target_link_libraries(receive_logs_direct rabbitmq) + +add_executable(emit_log_topic emit_log_topic.cpp) +target_link_libraries(emit_log_topic rabbitmq) + +add_executable(receive_logs_topic receive_logs_topic.cpp) +target_link_libraries(receive_logs_topic rabbitmq) + +add_executable(rpc_server rpc_server.cpp) +target_link_libraries(rpc_server rabbitmq) + +add_executable(rpc_client rpc_client.cpp) +target_link_libraries(rpc_client rabbitmq) + +add_executable(publisher_confirms publisher_confirms.cpp) +target_link_libraries(publisher_confirms rabbitmq) \ No newline at end of file diff --git a/cpp/README.md b/cpp/README.md new file mode 100644 index 00000000..1aed703a --- /dev/null +++ b/cpp/README.md @@ -0,0 +1,11 @@ +# C++ code for RabbitMQ tutorials + +Here you can find the C++ code examples from [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +To successfully use the examples you will need a RabbitMQ node running locally. + +## Requirements +Examples use [rabbitmq-c library](https://github.com/alanxz/rabbitmq-c) that must be installed first. +You can build the examples via CMakeFile.txt. +Examples are tested on CentOS 7, RabbitMQ 3.10.0, Erlang 23.3.1 and built with Visual Studio Code 1.73.1 diff --git a/cpp/emit_log.cpp b/cpp/emit_log.cpp new file mode 100644 index 00000000..f5bd3dba --- /dev/null +++ b/cpp/emit_log.cpp @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("fanout"), + false, false, false, false, amqp_empty_table); + + std::string message("info: Hello World!"); + if (argc > 1) + { + std::stringstream s; + copy(&argv[1], &argv[argc], std::ostream_iterator(s, " ")); + message = s.str(); + } + + amqp_basic_publish(conn, KChannel, exchangeName, amqp_empty_bytes, false, false, nullptr, amqp_cstring_bytes(message.c_str())); + std::cout << " [x] Sent " << message << std::endl; + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/emit_log_direct.cpp b/cpp/emit_log_direct.cpp new file mode 100644 index 00000000..856448c8 --- /dev/null +++ b/cpp/emit_log_direct.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("direct_logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("direct"), + false, false, false, false, amqp_empty_table); + + std::string severity = argc > 1 ? argv[1] : "info"; + std::string message(" Hello World!"); + if (argc > 2) + { + std::stringstream s; + copy(&argv[2], &argv[argc], std::ostream_iterator(s, " ")); + message = s.str(); + } + + amqp_basic_publish(conn, KChannel, exchangeName, amqp_cstring_bytes(severity.c_str()), false, false, nullptr, amqp_cstring_bytes(message.c_str())); + std::cout << " [x] Sent " << severity << ":" << message << std::endl; + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/emit_log_topic.cpp b/cpp/emit_log_topic.cpp new file mode 100644 index 00000000..9074030c --- /dev/null +++ b/cpp/emit_log_topic.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("topic_logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("topic"), + false, false, false, false, amqp_empty_table); + + std::string routing_key = argc > 2 ? argv[1] : "anonymous.info"; + std::string message(" Hello World!"); + if (argc > 2) + { + std::stringstream s; + copy(&argv[2], &argv[argc], std::ostream_iterator(s, " ")); + message = s.str(); + } + + amqp_basic_publish(conn, KChannel, exchangeName, amqp_cstring_bytes(routing_key.c_str()), false, false, nullptr, amqp_cstring_bytes(message.c_str())); + std::cout << " [x] Sent " << routing_key << ":" << message << std::endl; + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/new_task.cpp b/cpp/new_task.cpp new file mode 100644 index 00000000..9db362ba --- /dev/null +++ b/cpp/new_task.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("task_queue")); + amqp_queue_declare(conn, KChannel, queueName, false, /*durable*/ true, false, true, amqp_empty_table); + + std::string message("Hello World!"); + if (argc > 1) + { + std::stringstream s; + copy(&argv[1], &argv[argc], std::ostream_iterator(s, " ")); + message = s.str(); + } + + amqp_basic_properties_t props; + props._flags = AMQP_BASIC_DELIVERY_MODE_FLAG; + props.delivery_mode = AMQP_DELIVERY_PERSISTENT; + + amqp_basic_publish(conn, KChannel, amqp_empty_bytes, /* routing key*/ queueName, false, false, &props, amqp_cstring_bytes(message.c_str())); + std::cout << " [x] Sent " << message << std::endl; + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/publisher_confirms.cpp b/cpp/publisher_confirms.cpp new file mode 100644 index 00000000..2857ea09 --- /dev/null +++ b/cpp/publisher_confirms.cpp @@ -0,0 +1,52 @@ +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("hello")); + amqp_queue_declare(conn, KChannel, queueName, false, false, false, false, amqp_empty_table); + + amqp_confirm_select(conn, KChannel); + amqp_basic_publish(conn, KChannel, amqp_empty_bytes, /* routing key*/ queueName, false, false, nullptr, amqp_cstring_bytes("Hello World!")); + amqp_basic_publish(conn, KChannel, amqp_empty_bytes, /* routing key*/ queueName, false, false, nullptr, amqp_cstring_bytes("Hello World!")); + + amqp_frame_t frame; + amqp_simple_wait_frame(conn, &frame); + if (frame.channel == KChannel) + { + if (frame.payload.method.id == AMQP_BASIC_ACK_METHOD) + { + amqp_basic_ack_t *ack = (amqp_basic_ack_t *)frame.payload.method.decoded; + if (ack->multiple) + std::cout << "Sucessfully sent messages up to delivery tag: " << ack->delivery_tag << std::endl; + else + std::cout << "Sucessfully sent message with delivery tag: " << ack->delivery_tag << std::endl; + } + else if (frame.payload.method.id == AMQP_BASIC_RETURN_METHOD) + { + // message wasn't routed to a queue, but returned + amqp_message_t returned_message; + amqp_read_message(conn, 1, &returned_message, 0); + amqp_destroy_message(&returned_message); + + amqp_simple_wait_frame(conn, &frame); + if (frame.payload.method.id == AMQP_BASIC_ACK_METHOD) + std::cout << "Message returned" << std::endl; + } + } + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/receive.cpp b/cpp/receive.cpp new file mode 100644 index 00000000..5f4d68e4 --- /dev/null +++ b/cpp/receive.cpp @@ -0,0 +1,41 @@ +#include +#include + +#include +#include + + +int main(int argc, char const *const *argv) +{ + + amqp_connection_state_t conn = amqp_new_connection(); + + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("hello")); + amqp_queue_declare(conn, KChannel, queueName, false, false, false, false, amqp_empty_table); + + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/true, false, amqp_empty_table); + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_consume_message(conn, &envelope, nullptr, 0); + + std::cout << " [x] Received " << std::string((char *)envelope.message.body.bytes,(int)envelope.message.body.len) << std::endl; + amqp_destroy_envelope(&envelope); + } + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} diff --git a/cpp/receive_logs.cpp b/cpp/receive_logs.cpp new file mode 100644 index 00000000..f7d1ed48 --- /dev/null +++ b/cpp/receive_logs.cpp @@ -0,0 +1,52 @@ + #include +#include +#include +#include +#include + +#include +#include + + +int main(int argc, char const *const *argv) +{ + + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("fanout"), + false, false, false, false, amqp_empty_table); + + amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, KChannel, amqp_empty_bytes, false, false, true, false, amqp_empty_table); + amqp_bytes_t queueName = amqp_bytes_malloc_dup(r->queue); + + amqp_queue_bind(conn, KChannel, queueName, exchangeName, amqp_empty_bytes, amqp_empty_table); + + std::cout << "[*] Waiting for logs. To exit press CTRL+C'" << std::endl; + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/true, false, amqp_empty_table); + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_consume_message(conn, &envelope, nullptr, 0); + + std::string message((char *)envelope.message.body.bytes,(int)envelope.message.body.len); + std::cout << " [x] Received " << message << std::endl; + + amqp_destroy_envelope(&envelope); + } + + amqp_bytes_free(queueName); + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} diff --git a/cpp/receive_logs_direct.cpp b/cpp/receive_logs_direct.cpp new file mode 100644 index 00000000..84addf51 --- /dev/null +++ b/cpp/receive_logs_direct.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("direct_logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("direct"), + false, false, false, false, amqp_empty_table); + + amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, KChannel, amqp_empty_bytes, false, false, /*exclusive*/ true, false, amqp_empty_table); + amqp_bytes_t queueName = amqp_bytes_malloc_dup(r->queue); + + if (argc > 1) + { + for (int i = 1; i < argc; ++i) + amqp_queue_bind(conn, KChannel, queueName, exchangeName, amqp_cstring_bytes(argv[i]), amqp_empty_table); + } + else + { + std::cout << "Usage: " << argv[0] << " [info] [warning] [error]" << std::endl; + return 1; + } + + std::cout << "[*] Waiting for logs. To exit press CTRL+C'" << std::endl; + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/ true, false, amqp_empty_table); + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_consume_message(conn, &envelope, nullptr, 0); + + std::string message((char *)envelope.message.body.bytes, (int)envelope.message.body.len); + std::cout << " [x] Received " << std::string((char*)envelope.routing_key.bytes, (int)envelope.routing_key.len) << ":" << message << std::endl; + + amqp_destroy_envelope(&envelope); + } + + amqp_bytes_free(queueName); + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} diff --git a/cpp/receive_logs_topic.cpp b/cpp/receive_logs_topic.cpp new file mode 100644 index 00000000..8bbdbada --- /dev/null +++ b/cpp/receive_logs_topic.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t exchangeName(amqp_cstring_bytes("topic_logs")); + amqp_exchange_declare(conn, KChannel, exchangeName, amqp_cstring_bytes("topic"), + false, false, false, false, amqp_empty_table); + + amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, KChannel, amqp_empty_bytes, false, false, /*exclusive*/ true, false, amqp_empty_table); + amqp_bytes_t queueName = amqp_bytes_malloc_dup(r->queue); + + if (argc > 1) + { + for (int i = 1; i < argc; ++i) + amqp_queue_bind(conn, KChannel, queueName, exchangeName, amqp_cstring_bytes(argv[i]), amqp_empty_table); + } + else + { + std::cout << "Usage: " << argv[0] << " [binding_key] ..." << std::endl; + return 1; + } + + std::cout << "[*] Waiting for logs. To exit press CTRL+C'" << std::endl; + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/ true, false, amqp_empty_table); + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_consume_message(conn, &envelope, nullptr, 0); + + std::string message((char *)envelope.message.body.bytes, (int)envelope.message.body.len); + std::cout << " [x] Received " << std::string((char*)envelope.routing_key.bytes, (int)envelope.routing_key.len) << ":" << message << std::endl; + + amqp_destroy_envelope(&envelope); + } + + amqp_bytes_free(queueName); + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} diff --git a/cpp/rpc_client.cpp b/cpp/rpc_client.cpp new file mode 100644 index 00000000..383df8f6 --- /dev/null +++ b/cpp/rpc_client.cpp @@ -0,0 +1,89 @@ +#include +#include + +#include +#include + +class FibonacciRpcClient +{ +public: + FibonacciRpcClient() + { + m_conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(m_conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(m_conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + + amqp_channel_open(m_conn, KChannel); + + amqp_queue_declare_ok_t *r = amqp_queue_declare(m_conn, KChannel, amqp_empty_bytes, false, false, false, /*auto delete*/true, amqp_empty_table); + m_callbackQueue = amqp_bytes_malloc_dup(r->queue); + } + + int call(int n) + { + m_corr_id = std::to_string(++m_requestCount); + + amqp_basic_properties_t props; + props._flags = AMQP_BASIC_CORRELATION_ID_FLAG | AMQP_BASIC_REPLY_TO_FLAG; + props.correlation_id = amqp_cstring_bytes(m_corr_id.c_str()); + props.reply_to = m_callbackQueue; + + amqp_bytes_t n_; + n_.bytes = &n; + n_.len = sizeof(n); + amqp_basic_publish(m_conn, KChannel, amqp_empty_bytes, /* routing key*/ amqp_cstring_bytes("rpc_queue"), false, false, &props, n_); + + amqp_basic_consume(m_conn, KChannel, m_callbackQueue, amqp_empty_bytes, false, /* auto ack*/ true, false, amqp_empty_table); + + int response = 0; + bool keepProcessing = true; + while (keepProcessing) + { + amqp_maybe_release_buffers(m_conn); + amqp_envelope_t envelope; + amqp_consume_message(m_conn, &envelope, nullptr, 0); + + std::string correlation_id((char *)envelope.message.properties.correlation_id.bytes, (int)envelope.message.properties.correlation_id.len); + if (correlation_id == m_corr_id) + { + response = *(int *)envelope.message.body.bytes; + keepProcessing = false; + } + + amqp_destroy_envelope(&envelope); + } + + return response; + } + + ~FibonacciRpcClient() + { + amqp_bytes_free(m_callbackQueue); + amqp_channel_close(m_conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(m_conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(m_conn); + } + +private: + amqp_connection_state_t m_conn; + const amqp_channel_t KChannel = 1; + amqp_bytes_t m_callbackQueue; + std::string m_corr_id; + int m_requestCount = 0; +}; + +int main(int argc, char const *const *argv) +{ + int n = 30; + if (argc > 1) + { + n = std::stoi(argv[1]); + } + + FibonacciRpcClient fibonacciRpcClient; + std::cout << " [x] Requesting fib(" << n << ")" << std::endl; + int response = fibonacciRpcClient.call(n); + std::cout << " [.] Got " << response << std::endl; + return 0; +} diff --git a/cpp/rpc_server.cpp b/cpp/rpc_server.cpp new file mode 100644 index 00000000..ec0b32c0 --- /dev/null +++ b/cpp/rpc_server.cpp @@ -0,0 +1,62 @@ +#include +#include + +#include +#include + +int fib(int n) +{ + if (n == 0) + return 0; + else if (n == 1) + return 1; + else + return fib(n-1) + fib(n-2); +} + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("rpc_queue")); + amqp_queue_declare(conn, KChannel, queueName, false, false, false, false, amqp_empty_table); + + amqp_basic_qos(conn, KChannel, 0, /*prefetch_count*/1, 0); + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/false, false, amqp_empty_table); + std::cout << " [x] Awaiting RPC requests" << std::endl; + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_rpc_reply_t res = amqp_consume_message(conn, &envelope, nullptr, 0); + + int n = *(int *)envelope.message.body.bytes; + std::cout << " [.] fib(" << n << ")" << std::endl; + int response = fib(n); + amqp_bytes_t response_; + response_.bytes = &response; + response_.len = sizeof(response); + + amqp_basic_properties_t props; + props._flags = AMQP_BASIC_CORRELATION_ID_FLAG; + props.correlation_id = envelope.message.properties.correlation_id; + + amqp_channel_t replyChannel = envelope.channel; + amqp_basic_publish(conn, replyChannel, amqp_empty_bytes, /* routing key*/ envelope.message.properties.reply_to, false, false, &props, response_); + amqp_basic_ack(conn, replyChannel, envelope.delivery_tag, false); + + amqp_destroy_envelope(&envelope); + } + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} diff --git a/cpp/send.cpp b/cpp/send.cpp new file mode 100644 index 00000000..9fcf0821 --- /dev/null +++ b/cpp/send.cpp @@ -0,0 +1,26 @@ +#include +#include + +#include +#include + +int main(int argc, char const *const *argv) +{ + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("hello")); + amqp_queue_declare(conn, KChannel, queueName, false, false, false, false, amqp_empty_table); + + amqp_basic_publish(conn, KChannel, amqp_empty_bytes, /* routing key*/ queueName, false, false, nullptr, amqp_cstring_bytes("Hello World!")); + std::cout << " [x] Sent 'Hello World!'" << std::endl; + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + return 0; +} diff --git a/cpp/worker.cpp b/cpp/worker.cpp new file mode 100644 index 00000000..14af2290 --- /dev/null +++ b/cpp/worker.cpp @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include + +#include +#include + + +int main(int argc, char const *const *argv) +{ + + amqp_connection_state_t conn = amqp_new_connection(); + amqp_socket_t *socket = amqp_tcp_socket_new(conn); + amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + + amqp_login(conn, "/", 0, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + const amqp_channel_t KChannel = 1; + amqp_channel_open(conn, KChannel); + + amqp_bytes_t queueName(amqp_cstring_bytes("task_queue")); + amqp_queue_declare(conn, KChannel, queueName, false, /*durable*/ true, false, true, amqp_empty_table); + + amqp_basic_qos(conn, KChannel, 0, /*prefetch_count*/1, 0); + amqp_basic_consume(conn, KChannel, queueName, amqp_empty_bytes, false, /* auto ack*/false, false, amqp_empty_table); + + for (;;) + { + amqp_maybe_release_buffers(conn); + amqp_envelope_t envelope; + amqp_consume_message(conn, &envelope, nullptr, 0); + + std::string message((char *)envelope.message.body.bytes,(int)envelope.message.body.len); + std::cout << " [x] Received " << message << std::endl; + const int seconds = std::count(std::begin(message), std::end(message), '.'); + std::this_thread::sleep_for(std::chrono::seconds(seconds)); + std::cout << " [x] Done" << std::endl; + + amqp_basic_ack(conn, KChannel, envelope.delivery_tag, false); + amqp_destroy_envelope(&envelope); + } + + amqp_channel_close(conn, KChannel, AMQP_REPLY_SUCCESS); + amqp_connection_close(conn, AMQP_REPLY_SUCCESS); + amqp_destroy_connection(conn); + + return 0; +} From 08ff9164d9850e8d4a80accd2eeb9ba66af19986 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 21:46:54 +0000 Subject: [PATCH 248/659] Bump tokio from 1.19.2 to 1.20.3 in /rust Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.19.2 to 1.20.3. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.19.2...tokio-1.20.3) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- rust/Cargo.lock | 6 +++--- rust/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 13c1e37b..d693f06d 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1104,16 +1104,16 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "664cf6576f16c0ad68184998f3c2d4be9903ede6b291a5b5cfc97d29e0057283" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", "num_cpus", - "once_cell", "parking_lot", "pin-project-lite", "signal-hook-registry", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 70b8196b..68cd5541 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -7,6 +7,6 @@ edition = "2018" [dependencies] futures = "0.3.21" lapin = "2.1.1" -tokio = { version = "1.19.2", features = ["full"] } +tokio = { version = "1.20.3", features = ["full"] } uuid = { version = "1.1.1", features = ["v4"] } tokio-stream = "0.1" From 69d52fd5a7cad24ee0b8d2115352e48602176cd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jan 2023 22:05:57 +0000 Subject: [PATCH 249/659] Bump bumpalo from 3.10.0 to 3.12.0 in /rust Bumps [bumpalo](https://github.com/fitzgen/bumpalo) from 3.10.0 to 3.12.0. - [Release notes](https://github.com/fitzgen/bumpalo/releases) - [Changelog](https://github.com/fitzgen/bumpalo/blob/main/CHANGELOG.md) - [Commits](https://github.com/fitzgen/bumpalo/compare/3.10.0...3.12.0) --- updated-dependencies: - dependency-name: bumpalo dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index d693f06d..59f48b8b 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bytes" From e620c113d9067dfbc62cfdc19e95c84f7e15a3e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Wed, 25 Jan 2023 19:20:31 +0100 Subject: [PATCH 250/659] updated solution name --- dotnet-6/{dotnet-6.sln => dotnet-7.sln} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dotnet-6/{dotnet-6.sln => dotnet-7.sln} (100%) diff --git a/dotnet-6/dotnet-6.sln b/dotnet-6/dotnet-7.sln similarity index 100% rename from dotnet-6/dotnet-6.sln rename to dotnet-6/dotnet-7.sln From 87f2d36f2932a2866360b9e4a3f3d4d39184f749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:34:07 +0100 Subject: [PATCH 251/659] rename dotnet-6 folder to dotnet-7 Also removed some redundant tags in .csproj files, and removed redundant scripts. If they still serve a purpose please correct me :smile: --- dotnet-6/EmitLogDirect/EmitLogDirect.csproj | 17 -- .../PublisherConfirms.csproj | 17 -- .../ReceiveLogsDirect.csproj | 17 -- .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 17 -- dotnet-6/Receiver | 20 -- dotnet-6/recompile.bat | 1 - dotnet-6/recompile.ps1 | 7 - dotnet-6/recompile.sh | 6 - dotnet-6/update.ps1 | 6 - {dotnet-6 => dotnet-7}/.gitignore | 0 {dotnet-6 => dotnet-7}/EmitLog/EmitLog.cs | 0 {dotnet-6 => dotnet-7}/EmitLog/EmitLog.csproj | 7 +- .../EmitLogDirect/EmitLogDirect.cs | 0 dotnet-7/EmitLogDirect/EmitLogDirect.csproj | 14 ++ .../EmitLogTopic/EmitLogTopic.cs | 0 .../EmitLogTopic/EmitLogTopic.csproj | 7 +- {dotnet-6 => dotnet-7}/NewTask/NewTask.cs | 0 {dotnet-6 => dotnet-7}/NewTask/NewTask.csproj | 7 +- .../PublisherConfirms/PublisherConfirms.cs | 0 .../PublisherConfirms.csproj | 14 ++ {dotnet-6 => dotnet-7}/README.md | 35 ++- {dotnet-6 => dotnet-7}/RPCClient/RPCClient.cs | 0 .../RPCClient/RPCClient.csproj | 7 +- {dotnet-6 => dotnet-7}/RPCServer/RPCServer.cs | 0 .../RPCServer/RPCServer.csproj | 7 +- {dotnet-6 => dotnet-7}/Receive/Receive.cs | 0 {dotnet-6 => dotnet-7}/Receive/Receive.csproj | 7 +- .../ReceiveLogs/ReceiveLogs.cs | 0 .../ReceiveLogs/ReceiveLogs.csproj | 7 +- .../ReceiveLogsDirect/ReceiveLogsDirect.cs | 0 .../ReceiveLogsDirect.csproj | 14 ++ .../ReceiveLogsTopic/ReceiveLogsTopic.cs | 0 .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 14 ++ {dotnet-6 => dotnet-7}/Send/Send.cs | 0 {dotnet-6 => dotnet-7}/Send/Send.csproj | 7 +- {dotnet-6 => dotnet-7}/Worker/Worker.cs | 0 {dotnet-6 => dotnet-7}/Worker/Worker.csproj | 7 +- {dotnet-6 => dotnet-7}/dotnet-7.sln | 211 +++++++++--------- 38 files changed, 192 insertions(+), 281 deletions(-) delete mode 100644 dotnet-6/EmitLogDirect/EmitLogDirect.csproj delete mode 100644 dotnet-6/PublisherConfirms/PublisherConfirms.csproj delete mode 100644 dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj delete mode 100644 dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj delete mode 100644 dotnet-6/Receiver delete mode 100644 dotnet-6/recompile.bat delete mode 100644 dotnet-6/recompile.ps1 delete mode 100644 dotnet-6/recompile.sh delete mode 100644 dotnet-6/update.ps1 rename {dotnet-6 => dotnet-7}/.gitignore (100%) rename {dotnet-6 => dotnet-7}/EmitLog/EmitLog.cs (100%) rename {dotnet-6 => dotnet-7}/EmitLog/EmitLog.csproj (50%) rename {dotnet-6 => dotnet-7}/EmitLogDirect/EmitLogDirect.cs (100%) create mode 100644 dotnet-7/EmitLogDirect/EmitLogDirect.csproj rename {dotnet-6 => dotnet-7}/EmitLogTopic/EmitLogTopic.cs (100%) rename {dotnet-6 => dotnet-7}/EmitLogTopic/EmitLogTopic.csproj (50%) rename {dotnet-6 => dotnet-7}/NewTask/NewTask.cs (100%) rename {dotnet-6 => dotnet-7}/NewTask/NewTask.csproj (51%) rename {dotnet-6 => dotnet-7}/PublisherConfirms/PublisherConfirms.cs (100%) create mode 100644 dotnet-7/PublisherConfirms/PublisherConfirms.csproj rename {dotnet-6 => dotnet-7}/README.md (55%) rename {dotnet-6 => dotnet-7}/RPCClient/RPCClient.cs (100%) rename {dotnet-6 => dotnet-7}/RPCClient/RPCClient.csproj (50%) rename {dotnet-6 => dotnet-7}/RPCServer/RPCServer.cs (100%) rename {dotnet-6 => dotnet-7}/RPCServer/RPCServer.csproj (51%) rename {dotnet-6 => dotnet-7}/Receive/Receive.cs (100%) rename {dotnet-6 => dotnet-7}/Receive/Receive.csproj (51%) rename {dotnet-6 => dotnet-7}/ReceiveLogs/ReceiveLogs.cs (100%) rename {dotnet-6 => dotnet-7}/ReceiveLogs/ReceiveLogs.csproj (50%) rename {dotnet-6 => dotnet-7}/ReceiveLogsDirect/ReceiveLogsDirect.cs (100%) create mode 100644 dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj rename {dotnet-6 => dotnet-7}/ReceiveLogsTopic/ReceiveLogsTopic.cs (100%) create mode 100644 dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj rename {dotnet-6 => dotnet-7}/Send/Send.cs (100%) rename {dotnet-6 => dotnet-7}/Send/Send.csproj (51%) rename {dotnet-6 => dotnet-7}/Worker/Worker.cs (100%) rename {dotnet-6 => dotnet-7}/Worker/Worker.csproj (51%) rename {dotnet-6 => dotnet-7}/dotnet-7.sln (98%) diff --git a/dotnet-6/EmitLogDirect/EmitLogDirect.csproj b/dotnet-6/EmitLogDirect/EmitLogDirect.csproj deleted file mode 100644 index 9cb08cf5..00000000 --- a/dotnet-6/EmitLogDirect/EmitLogDirect.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - portable - EmitLogDirect - Exe - EmitLogDirect - enable - enable - - - - - - - diff --git a/dotnet-6/PublisherConfirms/PublisherConfirms.csproj b/dotnet-6/PublisherConfirms/PublisherConfirms.csproj deleted file mode 100644 index 0755edd1..00000000 --- a/dotnet-6/PublisherConfirms/PublisherConfirms.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - portable - PublisherConfirms - Exe - PublisherConfirms - enable - enable - - - - - - - diff --git a/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj deleted file mode 100644 index d67c2f75..00000000 --- a/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - portable - ReceiveLogsDirect - Exe - ReceiveLogsDirect - enable - enable - - - - - - - diff --git a/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj deleted file mode 100644 index a1c09ae9..00000000 --- a/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - portable - ReceiveLogsTopic - Exe - ReceiveLogsTopic - enable - enable - - - - - - - diff --git a/dotnet-6/Receiver b/dotnet-6/Receiver deleted file mode 100644 index a05ac538..00000000 --- a/dotnet-6/Receiver +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "5.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet-6/recompile.bat b/dotnet-6/recompile.bat deleted file mode 100644 index 7f486ec1..00000000 --- a/dotnet-6/recompile.bat +++ /dev/null @@ -1 +0,0 @@ -for /D %%s in (.\*) do @dotnet build %%s diff --git a/dotnet-6/recompile.ps1 b/dotnet-6/recompile.ps1 deleted file mode 100644 index 53c42e21..00000000 --- a/dotnet-6/recompile.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose - -Get-Childitem -Recurse '*.csproj' | ForEach-Object { - # & dotnet build $_.FullName - & dotnet build $_ -} diff --git a/dotnet-6/recompile.sh b/dotnet-6/recompile.sh deleted file mode 100644 index d67be133..00000000 --- a/dotnet-6/recompile.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -for f in */; do \ - dotnet restore $f - dotnet build $f -done diff --git a/dotnet-6/update.ps1 b/dotnet-6/update.ps1 deleted file mode 100644 index 21724b99..00000000 --- a/dotnet-6/update.ps1 +++ /dev/null @@ -1,6 +0,0 @@ -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose - -Get-Childitem -Recurse '*.csproj' | ForEach-Object { - & dotnet add $_ package --version '6.0.0' RabbitMQ.Client -} diff --git a/dotnet-6/.gitignore b/dotnet-7/.gitignore similarity index 100% rename from dotnet-6/.gitignore rename to dotnet-7/.gitignore diff --git a/dotnet-6/EmitLog/EmitLog.cs b/dotnet-7/EmitLog/EmitLog.cs similarity index 100% rename from dotnet-6/EmitLog/EmitLog.cs rename to dotnet-7/EmitLog/EmitLog.cs diff --git a/dotnet-6/EmitLog/EmitLog.csproj b/dotnet-7/EmitLog/EmitLog.csproj similarity index 50% rename from dotnet-6/EmitLog/EmitLog.csproj rename to dotnet-7/EmitLog/EmitLog.csproj index 422940c4..2a9d13b7 100644 --- a/dotnet-6/EmitLog/EmitLog.csproj +++ b/dotnet-7/EmitLog/EmitLog.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - EmitLog + net7.0 Exe - EmitLog enable enable - + diff --git a/dotnet-6/EmitLogDirect/EmitLogDirect.cs b/dotnet-7/EmitLogDirect/EmitLogDirect.cs similarity index 100% rename from dotnet-6/EmitLogDirect/EmitLogDirect.cs rename to dotnet-7/EmitLogDirect/EmitLogDirect.cs diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.csproj b/dotnet-7/EmitLogDirect/EmitLogDirect.csproj new file mode 100644 index 00000000..2a9d13b7 --- /dev/null +++ b/dotnet-7/EmitLogDirect/EmitLogDirect.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + Exe + enable + enable + + + + + + + diff --git a/dotnet-6/EmitLogTopic/EmitLogTopic.cs b/dotnet-7/EmitLogTopic/EmitLogTopic.cs similarity index 100% rename from dotnet-6/EmitLogTopic/EmitLogTopic.cs rename to dotnet-7/EmitLogTopic/EmitLogTopic.cs diff --git a/dotnet-6/EmitLogTopic/EmitLogTopic.csproj b/dotnet-7/EmitLogTopic/EmitLogTopic.csproj similarity index 50% rename from dotnet-6/EmitLogTopic/EmitLogTopic.csproj rename to dotnet-7/EmitLogTopic/EmitLogTopic.csproj index 655a55ea..4fdb1beb 100644 --- a/dotnet-6/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet-7/EmitLogTopic/EmitLogTopic.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - EmitLogTopic + net7.0 Exe - EmitLogTopic enable enable - + diff --git a/dotnet-6/NewTask/NewTask.cs b/dotnet-7/NewTask/NewTask.cs similarity index 100% rename from dotnet-6/NewTask/NewTask.cs rename to dotnet-7/NewTask/NewTask.cs diff --git a/dotnet-6/NewTask/NewTask.csproj b/dotnet-7/NewTask/NewTask.csproj similarity index 51% rename from dotnet-6/NewTask/NewTask.csproj rename to dotnet-7/NewTask/NewTask.csproj index 97bd25fc..540e7ceb 100644 --- a/dotnet-6/NewTask/NewTask.csproj +++ b/dotnet-7/NewTask/NewTask.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - NewTask + net7.0 Exe - NewTask enable enable - + diff --git a/dotnet-6/PublisherConfirms/PublisherConfirms.cs b/dotnet-7/PublisherConfirms/PublisherConfirms.cs similarity index 100% rename from dotnet-6/PublisherConfirms/PublisherConfirms.cs rename to dotnet-7/PublisherConfirms/PublisherConfirms.cs diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.csproj b/dotnet-7/PublisherConfirms/PublisherConfirms.csproj new file mode 100644 index 00000000..1b2cee76 --- /dev/null +++ b/dotnet-7/PublisherConfirms/PublisherConfirms.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + Exe + enable + enable + + + + + + + diff --git a/dotnet-6/README.md b/dotnet-7/README.md similarity index 55% rename from dotnet-6/README.md rename to dotnet-7/README.md index 8b11ac95..0afbfda4 100644 --- a/dotnet-6/README.md +++ b/dotnet-7/README.md @@ -1,7 +1,7 @@ # Dotnet C# code for RabbitMQ tutorials Here you can find the C# code examples for [RabbitMQ -tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 6.0. +tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 7.0. You will also find a solution file for Visual Studio 2022. @@ -14,7 +14,7 @@ To successfully use the examples you will need a running RabbitMQ server. * [dotnet core](https://www.microsoft.com/net/core) We're using the command line (start->run cmd.exe) to -compile and run -p the code. Alternatively you could use Visual Studio, but this set of tutorials assumes +compile and run the code. Alternatively you could use Visual Studio, but this set of tutorials assumes the command line. ### Requirements on Linux @@ -26,41 +26,36 @@ the command line. Each command is best run in a separate console/terminal instance run from the root of the tutorial directory. -First run the `recompile.sh` script on Linux, for Windows run `recompile.bat` script from Command Line or -`recompile.ps1` script from Power Shell. This will run `dotnet restore` and build each project which is -required before they can be run. Alternatively or if you are on windows cd into each project and run -`dotnet restore` manually. - #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) - dotnet run -p Receive/Receive.csproj - dotnet run -p Send/Send.csproj + dotnet run --project Receive/Receive.csproj + dotnet run --project Send/Send.csproj #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) - dotnet run -p Worker/Worker.csproj - dotnet run -p NewTask/NewTask.csproj + dotnet run --project Worker/Worker.csproj + dotnet run --project NewTask/NewTask.csproj #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) - dotnet run -p ReceiveLogs/ReceiveLogs.csproj - dotnet run -p EmitLog/EmitLog.csproj + dotnet run --project ReceiveLogs/ReceiveLogs.csproj + dotnet run --project EmitLog/EmitLog.csproj #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) - dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info - dotnet run -p EmitLogDirect/EmitLogDirect.csproj + dotnet run --project ReceiveLogsDirect/ReceiveLogsDirect.csproj info + dotnet run --project EmitLogDirect/EmitLogDirect.csproj #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) - dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info - dotnet run -p EmitLogTopic/EmitLogTopic.csproj + dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info + dotnet run --project EmitLogTopic/EmitLogTopic.csproj #### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) - dotnet run -p RPCServer/RPCServer.csproj - dotnet run -p RPCClient/RPCClient.csproj + dotnet run --project RPCServer/RPCServer.csproj + dotnet run --project RPCClient/RPCClient.csproj #### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) - dotnet run -p PublisherConfirms/PublisherConfirms.csproj + dotnet run --project PublisherConfirms/PublisherConfirms.csproj diff --git a/dotnet-6/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs similarity index 100% rename from dotnet-6/RPCClient/RPCClient.cs rename to dotnet-7/RPCClient/RPCClient.cs diff --git a/dotnet-6/RPCClient/RPCClient.csproj b/dotnet-7/RPCClient/RPCClient.csproj similarity index 50% rename from dotnet-6/RPCClient/RPCClient.csproj rename to dotnet-7/RPCClient/RPCClient.csproj index 896de27a..659ddaed 100644 --- a/dotnet-6/RPCClient/RPCClient.csproj +++ b/dotnet-7/RPCClient/RPCClient.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - RPCClient + net7.0 Exe - RPCClient enable enable - + diff --git a/dotnet-6/RPCServer/RPCServer.cs b/dotnet-7/RPCServer/RPCServer.cs similarity index 100% rename from dotnet-6/RPCServer/RPCServer.cs rename to dotnet-7/RPCServer/RPCServer.cs diff --git a/dotnet-6/RPCServer/RPCServer.csproj b/dotnet-7/RPCServer/RPCServer.csproj similarity index 51% rename from dotnet-6/RPCServer/RPCServer.csproj rename to dotnet-7/RPCServer/RPCServer.csproj index e55ce07f..4979ace0 100644 --- a/dotnet-6/RPCServer/RPCServer.csproj +++ b/dotnet-7/RPCServer/RPCServer.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - RPCServer + net7.0 Exe - RPCServer enable enable - + diff --git a/dotnet-6/Receive/Receive.cs b/dotnet-7/Receive/Receive.cs similarity index 100% rename from dotnet-6/Receive/Receive.cs rename to dotnet-7/Receive/Receive.cs diff --git a/dotnet-6/Receive/Receive.csproj b/dotnet-7/Receive/Receive.csproj similarity index 51% rename from dotnet-6/Receive/Receive.csproj rename to dotnet-7/Receive/Receive.csproj index fca9a1c3..4979ace0 100644 --- a/dotnet-6/Receive/Receive.csproj +++ b/dotnet-7/Receive/Receive.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - Receive + net7.0 Exe - Receive enable enable - + diff --git a/dotnet-6/ReceiveLogs/ReceiveLogs.cs b/dotnet-7/ReceiveLogs/ReceiveLogs.cs similarity index 100% rename from dotnet-6/ReceiveLogs/ReceiveLogs.cs rename to dotnet-7/ReceiveLogs/ReceiveLogs.cs diff --git a/dotnet-6/ReceiveLogs/ReceiveLogs.csproj b/dotnet-7/ReceiveLogs/ReceiveLogs.csproj similarity index 50% rename from dotnet-6/ReceiveLogs/ReceiveLogs.csproj rename to dotnet-7/ReceiveLogs/ReceiveLogs.csproj index 73b9d47a..88534bc0 100644 --- a/dotnet-6/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet-7/ReceiveLogs/ReceiveLogs.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - ReceiveLogs + net7.0 Exe - ReceiveLogs enable enable - + diff --git a/dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs similarity index 100% rename from dotnet-6/ReceiveLogsDirect/ReceiveLogsDirect.cs rename to dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj new file mode 100644 index 00000000..61b00179 --- /dev/null +++ b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + Exe + enable + enable + + + + + + + diff --git a/dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs similarity index 100% rename from dotnet-6/ReceiveLogsTopic/ReceiveLogsTopic.cs rename to dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj new file mode 100644 index 00000000..61b00179 --- /dev/null +++ b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + Exe + enable + enable + + + + + + + diff --git a/dotnet-6/Send/Send.cs b/dotnet-7/Send/Send.cs similarity index 100% rename from dotnet-6/Send/Send.cs rename to dotnet-7/Send/Send.cs diff --git a/dotnet-6/Send/Send.csproj b/dotnet-7/Send/Send.csproj similarity index 51% rename from dotnet-6/Send/Send.csproj rename to dotnet-7/Send/Send.csproj index 7d24d70b..1b2cee76 100644 --- a/dotnet-6/Send/Send.csproj +++ b/dotnet-7/Send/Send.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - Send + net7.0 Exe - Send enable enable - + diff --git a/dotnet-6/Worker/Worker.cs b/dotnet-7/Worker/Worker.cs similarity index 100% rename from dotnet-6/Worker/Worker.cs rename to dotnet-7/Worker/Worker.cs diff --git a/dotnet-6/Worker/Worker.csproj b/dotnet-7/Worker/Worker.csproj similarity index 51% rename from dotnet-6/Worker/Worker.csproj rename to dotnet-7/Worker/Worker.csproj index 9417ae7b..540e7ceb 100644 --- a/dotnet-6/Worker/Worker.csproj +++ b/dotnet-7/Worker/Worker.csproj @@ -1,17 +1,14 @@  - net6.0 - portable - Worker + net7.0 Exe - Worker enable enable - + diff --git a/dotnet-6/dotnet-7.sln b/dotnet-7/dotnet-7.sln similarity index 98% rename from dotnet-6/dotnet-7.sln rename to dotnet-7/dotnet-7.sln index b3a78af9..6b3357dd 100644 --- a/dotnet-6/dotnet-7.sln +++ b/dotnet-7/dotnet-7.sln @@ -1,108 +1,103 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31717.71 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLog", "EmitLog\EmitLog.csproj", "{38520F1F-5F59-4D6C-815A-BCB811B8335E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogDirect", "EmitLogDirect\EmitLogDirect.csproj", "{303D712F-9107-41D9-A855-46A281DA250C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogTopic", "EmitLogTopic\EmitLogTopic.csproj", "{E1A0AF83-F505-483E-9F22-C0A137E4B190}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewTask", "NewTask\NewTask.csproj", "{7575E7F7-4C5E-42A2-894D-DDCD16D964DB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublisherConfirms", "PublisherConfirms\PublisherConfirms.csproj", "{0BBAF99D-B711-4201-B30B-114D88EDD276}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receive", "Receive\Receive.csproj", "{BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogs", "ReceiveLogs\ReceiveLogs.csproj", "{63E5ECF3-C78E-4461-8247-33F3BF019EF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsDirect", "ReceiveLogsDirect\ReceiveLogsDirect.csproj", "{D16666BC-C69F-49D4-96B9-3DC562CC11C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCClient", "RPCClient\RPCClient.csproj", "{6161C019-58A6-4A72-B3F8-D1A1FD2681E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Send", "Send\Send.csproj", "{1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "Worker\Worker.csproj", "{0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCServer", "RPCServer\RPCServer.csproj", "{7317B766-BBD8-402B-82E3-1DBAA376FA64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsTopic", "ReceiveLogsTopic\ReceiveLogsTopic.csproj", "{497698C7-9D59-478F-9394-265915455F00}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Folder", "Solution Folder", "{853BA576-BFDF-4547-BA70-BC7781EDAB10}" - ProjectSection(SolutionItems) = preProject - .gitignore = .gitignore - README.md = README.md - Receiver = Receiver - recompile.bat = recompile.bat - recompile.ps1 = recompile.ps1 - recompile.sh = recompile.sh - update.ps1 = update.ps1 - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.Build.0 = Release|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.Build.0 = Release|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.Build.0 = Release|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.Build.0 = Release|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.Build.0 = Release|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.Build.0 = Release|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.Build.0 = Release|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.Build.0 = Release|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.Build.0 = Release|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.Build.0 = Release|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.Build.0 = Release|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.Build.0 = Release|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {22E2792A-85EF-4497-AA49-1A9C62A33CAC} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31717.71 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLog", "EmitLog\EmitLog.csproj", "{38520F1F-5F59-4D6C-815A-BCB811B8335E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogDirect", "EmitLogDirect\EmitLogDirect.csproj", "{303D712F-9107-41D9-A855-46A281DA250C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogTopic", "EmitLogTopic\EmitLogTopic.csproj", "{E1A0AF83-F505-483E-9F22-C0A137E4B190}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewTask", "NewTask\NewTask.csproj", "{7575E7F7-4C5E-42A2-894D-DDCD16D964DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublisherConfirms", "PublisherConfirms\PublisherConfirms.csproj", "{0BBAF99D-B711-4201-B30B-114D88EDD276}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receive", "Receive\Receive.csproj", "{BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogs", "ReceiveLogs\ReceiveLogs.csproj", "{63E5ECF3-C78E-4461-8247-33F3BF019EF1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsDirect", "ReceiveLogsDirect\ReceiveLogsDirect.csproj", "{D16666BC-C69F-49D4-96B9-3DC562CC11C4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCClient", "RPCClient\RPCClient.csproj", "{6161C019-58A6-4A72-B3F8-D1A1FD2681E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Send", "Send\Send.csproj", "{1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "Worker\Worker.csproj", "{0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCServer", "RPCServer\RPCServer.csproj", "{7317B766-BBD8-402B-82E3-1DBAA376FA64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsTopic", "ReceiveLogsTopic\ReceiveLogsTopic.csproj", "{497698C7-9D59-478F-9394-265915455F00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Folder", "Solution Folder", "{853BA576-BFDF-4547-BA70-BC7781EDAB10}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + README.md = README.md + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.Build.0 = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.Build.0 = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.Build.0 = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.Build.0 = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.Build.0 = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.Build.0 = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.Build.0 = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.Build.0 = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.Build.0 = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.Build.0 = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.Build.0 = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.Build.0 = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {22E2792A-85EF-4497-AA49-1A9C62A33CAC} + EndGlobalSection +EndGlobal From 2149f9c5d44fa0cc3c684fda3d70b54898e1b187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:34:26 +0100 Subject: [PATCH 252/659] removed dotnet-visual-studio examples (net5.0) --- dotnet-visual-studio/.gitignore | 199 ------------------ .../1_Receive/1_Receive.csproj | 11 - dotnet-visual-studio/1_Receive/Program.cs | 30 --- dotnet-visual-studio/1_Send/1_Send.csproj | 11 - dotnet-visual-studio/1_Send/Program.cs | 25 --- .../2_NewTask/2_NewTask.csproj | 11 - dotnet-visual-studio/2_NewTask/Program.cs | 33 --- dotnet-visual-studio/2_Worker/2_Worker.csproj | 11 - dotnet-visual-studio/2_Worker/Program.cs | 42 ---- .../3_EmitLog/3_EmitLog.csproj | 11 - dotnet-visual-studio/3_EmitLog/Program.cs | 29 --- .../3_ReceiveLogs/3_ReceiveLogs.csproj | 11 - dotnet-visual-studio/3_ReceiveLogs/Program.cs | 34 --- .../4_EmitLogDirect/4_EmitLogDirect.csproj | 11 - .../4_EmitLogDirect/Program.cs | 26 --- .../4_ReceiveLogsDirect.csproj | 11 - .../4_ReceiveLogsDirect/Program.cs | 46 ---- .../5_EmitLogTopic/5_EmitLogTopic.csproj | 11 - .../5_EmitLogTopic/Program.cs | 23 -- .../5_ReceiveLogsTopic.csproj | 11 - .../5_ReceiveLogsTopic/Program.cs | 46 ---- .../6_RPCClient/6_RPCClient.csproj | 11 - dotnet-visual-studio/6_RPCClient/Program.cs | 31 --- dotnet-visual-studio/6_RPCClient/RPCClient.cs | 68 ------ .../6_RPCServer/6_RPCServer.csproj | 11 - dotnet-visual-studio/6_RPCServer/Program.cs | 66 ------ .../7_PublisherConfirms.csproj | 11 - .../7_PublisherConfirms/Program.cs | 138 ------------ dotnet-visual-studio/README.md | 48 ----- dotnet-visual-studio/RabbitMQ.Tutorials.sln | 97 --------- 30 files changed, 1124 deletions(-) delete mode 100644 dotnet-visual-studio/.gitignore delete mode 100644 dotnet-visual-studio/1_Receive/1_Receive.csproj delete mode 100644 dotnet-visual-studio/1_Receive/Program.cs delete mode 100644 dotnet-visual-studio/1_Send/1_Send.csproj delete mode 100644 dotnet-visual-studio/1_Send/Program.cs delete mode 100644 dotnet-visual-studio/2_NewTask/2_NewTask.csproj delete mode 100644 dotnet-visual-studio/2_NewTask/Program.cs delete mode 100644 dotnet-visual-studio/2_Worker/2_Worker.csproj delete mode 100644 dotnet-visual-studio/2_Worker/Program.cs delete mode 100644 dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj delete mode 100644 dotnet-visual-studio/3_EmitLog/Program.cs delete mode 100644 dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj delete mode 100644 dotnet-visual-studio/3_ReceiveLogs/Program.cs delete mode 100644 dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj delete mode 100644 dotnet-visual-studio/4_EmitLogDirect/Program.cs delete mode 100644 dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj delete mode 100644 dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs delete mode 100644 dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj delete mode 100644 dotnet-visual-studio/5_EmitLogTopic/Program.cs delete mode 100644 dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj delete mode 100644 dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs delete mode 100644 dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj delete mode 100644 dotnet-visual-studio/6_RPCClient/Program.cs delete mode 100644 dotnet-visual-studio/6_RPCClient/RPCClient.cs delete mode 100644 dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj delete mode 100644 dotnet-visual-studio/6_RPCServer/Program.cs delete mode 100644 dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj delete mode 100644 dotnet-visual-studio/7_PublisherConfirms/Program.cs delete mode 100644 dotnet-visual-studio/README.md delete mode 100644 dotnet-visual-studio/RabbitMQ.Tutorials.sln diff --git a/dotnet-visual-studio/.gitignore b/dotnet-visual-studio/.gitignore deleted file mode 100644 index 0ca5cd49..00000000 --- a/dotnet-visual-studio/.gitignore +++ /dev/null @@ -1,199 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -build/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Visual Studo 2015 cache/options directory -.vs/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding addin-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config - -# Windows Azure Build Output -csx/ -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -*.[Cc]ache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Nuget -.nuget/ \ No newline at end of file diff --git a/dotnet-visual-studio/1_Receive/1_Receive.csproj b/dotnet-visual-studio/1_Receive/1_Receive.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/1_Receive/1_Receive.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/1_Receive/Program.cs b/dotnet-visual-studio/1_Receive/Program.cs deleted file mode 100644 index b4fba32f..00000000 --- a/dotnet-visual-studio/1_Receive/Program.cs +++ /dev/null @@ -1,30 +0,0 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System; -using System.Text; - -class Program -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); - - Console.WriteLine(" [*] Waiting for messages."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); - Console.WriteLine(" [x] Received {0}", message); - }; - channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet-visual-studio/1_Send/1_Send.csproj b/dotnet-visual-studio/1_Send/1_Send.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/1_Send/1_Send.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/1_Send/Program.cs b/dotnet-visual-studio/1_Send/Program.cs deleted file mode 100644 index 11edd2cd..00000000 --- a/dotnet-visual-studio/1_Send/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class Program -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); - - string message = "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - - channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } -} diff --git a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj b/dotnet-visual-studio/2_NewTask/2_NewTask.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/2_NewTask/2_NewTask.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/2_NewTask/Program.cs b/dotnet-visual-studio/2_NewTask/Program.cs deleted file mode 100644 index e76fee5a..00000000 --- a/dotnet-visual-studio/2_NewTask/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); - - var message = GetMessage(args); - var body = Encoding.UTF8.GetBytes(message); - - var properties = channel.CreateBasicProperties(); - properties.Persistent = true; - - channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static string GetMessage(string[] args) - { - return ((args.Length > 0) ? string.Join(" ", args) : "Hello World!"); - } -} diff --git a/dotnet-visual-studio/2_Worker/2_Worker.csproj b/dotnet-visual-studio/2_Worker/2_Worker.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/2_Worker/2_Worker.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/2_Worker/Program.cs b/dotnet-visual-studio/2_Worker/Program.cs deleted file mode 100644 index 51eafef7..00000000 --- a/dotnet-visual-studio/2_Worker/Program.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; -using System.Threading; - -class Program -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); - - channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); - - Console.WriteLine(" [*] Waiting for messages."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - byte[] body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - Console.WriteLine(" [x] Received {0}", message); - - int dots = message.Split('.').Length - 1; - Thread.Sleep(dots * 1000); - - Console.WriteLine(" [x] Done"); - - // here channel could also be accessed as ((EventingBasicConsumer)sender).Model - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); - }; - channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj b/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/3_EmitLog/3_EmitLog.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/3_EmitLog/Program.cs b/dotnet-visual-studio/3_EmitLog/Program.cs deleted file mode 100644 index d20e651b..00000000 --- a/dotnet-visual-studio/3_EmitLog/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); - - var message = GetMessage(args); - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static string GetMessage(string[] args) - { - return ((args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); - } -} diff --git a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj b/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/3_ReceiveLogs/3_ReceiveLogs.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/3_ReceiveLogs/Program.cs b/dotnet-visual-studio/3_ReceiveLogs/Program.cs deleted file mode 100644 index 82c4d867..00000000 --- a/dotnet-visual-studio/3_ReceiveLogs/Program.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class Program -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); - - var queueName = channel.QueueDeclare().QueueName; - channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); - - Console.WriteLine(" [*] Waiting for logs."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - byte[] body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - Console.WriteLine(" [x] {0}", message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj b/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/4_EmitLogDirect/4_EmitLogDirect.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/4_EmitLogDirect/Program.cs b/dotnet-visual-studio/4_EmitLogDirect/Program.cs deleted file mode 100644 index 8ef94594..00000000 --- a/dotnet-visual-studio/4_EmitLogDirect/Program.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Linq; -using RabbitMQ.Client; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); - - var severity = (args.Length > 0) ? args[0] : "info"; - var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "direct_logs", routingKey: severity, basicProperties: null, body: body); - Console.WriteLine(" [x] Sent '{0}':'{1}'", severity, message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } -} diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj b/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/4_ReceiveLogsDirect.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs b/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs deleted file mode 100644 index 1760e490..00000000 --- a/dotnet-visual-studio/4_ReceiveLogsDirect/Program.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); - var queueName = channel.QueueDeclare().QueueName; - - if (args.Length < 1) - { - Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - Environment.ExitCode = 1; - return; - } - - foreach(var severity in args) - { - channel.QueueBind(queue: queueName, exchange: "direct_logs", routingKey: severity); - } - - Console.WriteLine(" [*] Waiting for messages."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); - var routingKey = ea.RoutingKey; - Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj b/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/5_EmitLogTopic/5_EmitLogTopic.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/5_EmitLogTopic/Program.cs b/dotnet-visual-studio/5_EmitLogTopic/Program.cs deleted file mode 100644 index af376b0e..00000000 --- a/dotnet-visual-studio/5_EmitLogTopic/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Linq; -using RabbitMQ.Client; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); - - var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; - var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "topic_logs", routingKey: routingKey, basicProperties: null, body: body); - Console.WriteLine(" [x] Sent '{0}':'{1}'", routingKey, message); - } - } -} diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj b/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/5_ReceiveLogsTopic.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs b/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs deleted file mode 100644 index ffb7f206..00000000 --- a/dotnet-visual-studio/5_ReceiveLogsTopic/Program.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class Program -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); - var queueName = channel.QueueDeclare().QueueName; - - if (args.Length < 1) - { - Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - Environment.ExitCode = 1; - return; - } - - foreach(var bindingKey in args) - { - channel.QueueBind(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); - } - - Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); - var routingKey = ea.RoutingKey; - Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj b/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/6_RPCClient/6_RPCClient.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/6_RPCClient/Program.cs b/dotnet-visual-studio/6_RPCClient/Program.cs deleted file mode 100644 index 3416d7a5..00000000 --- a/dotnet-visual-studio/6_RPCClient/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Text; -using System.Threading.Tasks; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; - -internal class Program -{ - public static void Main(string[] args) - { - Console.WriteLine("RPC Client"); - string n = args.Length > 0 ? args[0] : "30"; - Task t = InvokeAsync(n); - t.Wait(); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static async Task InvokeAsync(string n) - { - var rnd = new Random(Guid.NewGuid().GetHashCode()); - var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib({0})", n); - var response = await rpcClient.CallAsync(n.ToString()); - Console.WriteLine(" [.] Got '{0}'", response); - - rpcClient.Close(); - } -} diff --git a/dotnet-visual-studio/6_RPCClient/RPCClient.cs b/dotnet-visual-studio/6_RPCClient/RPCClient.cs deleted file mode 100644 index 0fa1ffff..00000000 --- a/dotnet-visual-studio/6_RPCClient/RPCClient.cs +++ /dev/null @@ -1,68 +0,0 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System; -using System.Collections.Concurrent; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -class RpcClient -{ - private const string QUEUE_NAME = "rpc_queue"; - - private readonly IConnection _connection; - private readonly IModel _channel; - private readonly string _replyQueueName; - private readonly EventingBasicConsumer _consumer; - private readonly ConcurrentDictionary> _callbackMapper = - new ConcurrentDictionary>(); - - public RpcClient() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - - _connection = factory.CreateConnection(); - _channel = _connection.CreateModel(); - _replyQueueName = _channel.QueueDeclare().QueueName; - _consumer = new EventingBasicConsumer(_channel); - _consumer.Received += (model, ea) => - { - if (!_callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) - { - return; - } - var response = Encoding.UTF8.GetString(ea.Body.ToArray()); - tcs.TrySetResult(response); - }; - } - - public Task CallAsync(string message, CancellationToken cancellationToken = default(CancellationToken)) - { - IBasicProperties props = _channel.CreateBasicProperties(); - var correlationId = Guid.NewGuid().ToString(); - props.CorrelationId = correlationId; - props.ReplyTo = _replyQueueName; - var messageBytes = Encoding.UTF8.GetBytes(message); - var tcs = new TaskCompletionSource(); - _callbackMapper.TryAdd(correlationId, tcs); - - _channel.BasicPublish( - exchange: "", - routingKey: QUEUE_NAME, - basicProperties: props, - body: messageBytes); - - _channel.BasicConsume( - consumer: _consumer, - queue: _replyQueueName, - autoAck: true); - - cancellationToken.Register(() => _callbackMapper.TryRemove(correlationId, out var tmp)); - return tcs.Task; - } - - public void Close() - { - _connection.Close(); - } -} diff --git a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj b/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/6_RPCServer/6_RPCServer.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/6_RPCServer/Program.cs b/dotnet-visual-studio/6_RPCServer/Program.cs deleted file mode 100644 index 416af604..00000000 --- a/dotnet-visual-studio/6_RPCServer/Program.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class Program -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using (var connection = factory.CreateConnection()) - using (var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); - channel.BasicQos(0, 1, false); - var consumer = new EventingBasicConsumer(channel); - channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); - Console.WriteLine(" [x] Awaiting RPC requests"); - - consumer.Received += (model, ea) => - { - string response = null; - - var props = ea.BasicProperties; - var replyProps = channel.CreateBasicProperties(); - replyProps.CorrelationId = props.CorrelationId; - - try - { - var message = Encoding.UTF8.GetString(ea.Body.ToArray()); - int n = int.Parse(message); - Console.WriteLine(" [.] fib({0})", message); - response = fib(n).ToString(); - } - catch (Exception e) - { - Console.WriteLine(" [.] " + e.Message); - response = ""; - } - finally - { - var responseBytes = Encoding.UTF8.GetBytes(response); - channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); - } - }; - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } - - /// - /// Assumes only valid positive integer input. - /// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. - /// - private static int fib(int n) - { - if (n == 0 || n == 1) - { - return n; - } - - return fib(n - 1) + fib(n - 2); - } -} diff --git a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj b/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj deleted file mode 100644 index c83242bd..00000000 --- a/dotnet-visual-studio/7_PublisherConfirms/7_PublisherConfirms.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - Exe - net5.0 - - - - - - diff --git a/dotnet-visual-studio/7_PublisherConfirms/Program.cs b/dotnet-visual-studio/7_PublisherConfirms/Program.cs deleted file mode 100644 index 81ab100b..00000000 --- a/dotnet-visual-studio/7_PublisherConfirms/Program.cs +++ /dev/null @@ -1,138 +0,0 @@ -using RabbitMQ.Client; -using System; -using System.Collections.Concurrent; -using System.Diagnostics; -using System.Text; -using System.Linq; -using System.Threading; - -class PublisherConfirms -{ - private const int MESSAGE_COUNT = 50_000; - - public static void Main() - { - PublishMessagesIndividually(); - PublishMessagesInBatch(); - HandlePublishConfirmsAsynchronously(); - } - - private static IConnection CreateConnection() - { - var factory = new ConnectionFactory { HostName = "localhost" }; - return factory.CreateConnection(); - } - - private static void PublishMessagesIndividually() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); - - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - } - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static void PublishMessagesInBatch() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); - - var batchSize = 100; - var outstandingMessageCount = 0; - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); - outstandingMessageCount++; - - if (outstandingMessageCount == batchSize) - { - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - outstandingMessageCount = 0; - } - } - - if (outstandingMessageCount > 0) - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static void HandlePublishConfirmsAsynchronously() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); - - var outstandingConfirms = new ConcurrentDictionary(); - - void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) - { - if (multiple) - { - var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); - foreach (var entry in confirmed) - outstandingConfirms.TryRemove(entry.Key, out _); - } - else - outstandingConfirms.TryRemove(sequenceNumber, out _); - } - - channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); - channel.BasicNacks += (sender, ea) => - { - outstandingConfirms.TryGetValue(ea.DeliveryTag, out string body); - Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); - cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); - }; - - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = i.ToString(); - outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); - } - - if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) - throw new Exception("All messages could not be confirmed in 60 seconds"); - - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static bool WaitUntil(int numberOfSeconds, Func condition) - { - int waited = 0; - while (!condition() && waited < numberOfSeconds * 1000) - { - Thread.Sleep(100); - waited += 100; - } - - return condition(); - } -} \ No newline at end of file diff --git a/dotnet-visual-studio/README.md b/dotnet-visual-studio/README.md deleted file mode 100644 index 2e1866f1..00000000 --- a/dotnet-visual-studio/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# .NET C# Visual Studio Solution for RabbitMQ tutorials - -Here you can find the C# code examples for [RabbitMQ -tutorials](https://www.rabbitmq.com/getstarted.html) compiled -into a Visual Studio solution. - -To successfully use the examples you will need a running RabbitMQ server. - -## NuGet Restore - -You may need to "Enable NuGet Package Restore" on the solution upon the first -time opening it in order to get the .NET RabbitMQ dependency from NuGet. - -## Code - -#### [Tutorial 1: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) - -- 1_Receive -- 1_Send - -#### [Tutorial 2: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) - -- 2_Worker -- 2_NewTask - -#### [Tutorial 3: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) - -- 3_ReceiveLogs -- 3_EmitLog - -#### [Tutorial 4: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) - -- 4_ReceiveLogsDirect -- 4_EmitLogDirect - -#### [Tutorial 5: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) - -- 5_ReceiveLogsTopic -- 5_EmitLogTopic - -#### [Tutorial 6: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) - -- 6_RPCServer -- 6_RPCClient - -#### [Tutorial 7: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) - -- 7_PublisherConfirms diff --git a/dotnet-visual-studio/RabbitMQ.Tutorials.sln b/dotnet-visual-studio/RabbitMQ.Tutorials.sln deleted file mode 100644 index 520010ca..00000000 --- a/dotnet-visual-studio/RabbitMQ.Tutorials.sln +++ /dev/null @@ -1,97 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29306.81 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Send", "1_Send\1_Send.csproj", "{5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1_Receive", "1_Receive\1_Receive.csproj", "{DABA9504-8375-46DE-8349-A2DFCA9B1F2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_NewTask", "2_NewTask\2_NewTask.csproj", "{79410434-9BDD-49CE-A3EE-CE85526F317D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2_Worker", "2_Worker\2_Worker.csproj", "{76C2AE27-9C4B-439B-B647-1CE709E59ABF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_EmitLog", "3_EmitLog\3_EmitLog.csproj", "{EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3_ReceiveLogs", "3_ReceiveLogs\3_ReceiveLogs.csproj", "{164DB92B-2FE7-424C-8F79-EC23998F568B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_EmitLogDirect", "4_EmitLogDirect\4_EmitLogDirect.csproj", "{74E16495-2A01-4314-BE72-8ADAE64666BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4_ReceiveLogsDirect", "4_ReceiveLogsDirect\4_ReceiveLogsDirect.csproj", "{2DE4DE5A-7377-4914-9E32-014D9BD1CD44}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_EmitLogTopic", "5_EmitLogTopic\5_EmitLogTopic.csproj", "{86A66C9E-E479-4EA1-803D-E703F77581DC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "5_ReceiveLogsTopic", "5_ReceiveLogsTopic\5_ReceiveLogsTopic.csproj", "{61A68101-F68B-4333-91C5-6F2B7BB0D5F6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCClient", "6_RPCClient\6_RPCClient.csproj", "{CAF32E20-FC0F-4FB5-8158-31DA442696EB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "6_RPCServer", "6_RPCServer\6_RPCServer.csproj", "{FD2191EB-380C-426D-A629-53DF095E6295}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "7_PublisherConfirms", "7_PublisherConfirms\7_PublisherConfirms.csproj", "{A46637FF-A028-4FF9-A70F-82CB32EC3A74}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FCA7642-F829-4AB9-BC2D-C5FDEFCA80BF}.Release|Any CPU.Build.0 = Release|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DABA9504-8375-46DE-8349-A2DFCA9B1F2D}.Release|Any CPU.Build.0 = Release|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79410434-9BDD-49CE-A3EE-CE85526F317D}.Release|Any CPU.Build.0 = Release|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76C2AE27-9C4B-439B-B647-1CE709E59ABF}.Release|Any CPU.Build.0 = Release|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE47BA8A-4A5B-45F8-969A-C0DDCA667BF8}.Release|Any CPU.Build.0 = Release|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164DB92B-2FE7-424C-8F79-EC23998F568B}.Release|Any CPU.Build.0 = Release|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74E16495-2A01-4314-BE72-8ADAE64666BC}.Release|Any CPU.Build.0 = Release|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DE4DE5A-7377-4914-9E32-014D9BD1CD44}.Release|Any CPU.Build.0 = Release|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86A66C9E-E479-4EA1-803D-E703F77581DC}.Release|Any CPU.Build.0 = Release|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61A68101-F68B-4333-91C5-6F2B7BB0D5F6}.Release|Any CPU.Build.0 = Release|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAF32E20-FC0F-4FB5-8158-31DA442696EB}.Release|Any CPU.Build.0 = Release|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD2191EB-380C-426D-A629-53DF095E6295}.Release|Any CPU.Build.0 = Release|Any CPU - {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A46637FF-A028-4FF9-A70F-82CB32EC3A74}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {364576C4-05CA-4C17-AFFD-AB4F1157596A} - EndGlobalSection -EndGlobal From e86d9d785553a89080329f2acf3d56e5f0455047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:34:42 +0100 Subject: [PATCH 253/659] removed dotnet examples (netcoreapp3.1) --- dotnet/.gitignore | 4 - dotnet/EmitLog/EmitLog.cs | 29 ---- dotnet/EmitLog/EmitLog.csproj | 13 -- dotnet/EmitLogDirect/EmitLogDirect.cs | 26 ---- dotnet/EmitLogDirect/EmitLogDirect.csproj | 13 -- dotnet/EmitLogTopic/EmitLogTopic.cs | 23 --- dotnet/EmitLogTopic/EmitLogTopic.csproj | 13 -- dotnet/NewTask/NewTask.cs | 33 ---- dotnet/NewTask/NewTask.csproj | 13 -- dotnet/PublisherConfirms/PublisherConfirms.cs | 141 ------------------ .../PublisherConfirms.csproj | 15 -- dotnet/README.md | 63 -------- dotnet/RPCClient/RPCClient.cs | 94 ------------ dotnet/RPCClient/RPCClient.csproj | 13 -- dotnet/RPCServer/RPCServer.cs | 67 --------- dotnet/RPCServer/RPCServer.csproj | 14 -- dotnet/Receive/Receive.cs | 35 ----- dotnet/Receive/Receive.csproj | 14 -- dotnet/ReceiveLogs/ReceiveLogs.cs | 35 ----- dotnet/ReceiveLogs/ReceiveLogs.csproj | 13 -- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 48 ------ .../ReceiveLogsDirect.csproj | 13 -- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 48 ------ .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 13 -- dotnet/Receiver | 20 --- dotnet/Send/Send.cs | 32 ---- dotnet/Send/Send.csproj | 14 -- dotnet/Worker/Worker.cs | 42 ------ dotnet/Worker/Worker.csproj | 13 -- dotnet/recompile.bat | 1 - dotnet/recompile.ps1 | 7 - dotnet/recompile.sh | 6 - dotnet/update.ps1 | 6 - 33 files changed, 934 deletions(-) delete mode 100644 dotnet/.gitignore delete mode 100644 dotnet/EmitLog/EmitLog.cs delete mode 100755 dotnet/EmitLog/EmitLog.csproj delete mode 100644 dotnet/EmitLogDirect/EmitLogDirect.cs delete mode 100755 dotnet/EmitLogDirect/EmitLogDirect.csproj delete mode 100644 dotnet/EmitLogTopic/EmitLogTopic.cs delete mode 100755 dotnet/EmitLogTopic/EmitLogTopic.csproj delete mode 100644 dotnet/NewTask/NewTask.cs delete mode 100755 dotnet/NewTask/NewTask.csproj delete mode 100644 dotnet/PublisherConfirms/PublisherConfirms.cs delete mode 100644 dotnet/PublisherConfirms/PublisherConfirms.csproj delete mode 100644 dotnet/README.md delete mode 100644 dotnet/RPCClient/RPCClient.cs delete mode 100755 dotnet/RPCClient/RPCClient.csproj delete mode 100644 dotnet/RPCServer/RPCServer.cs delete mode 100755 dotnet/RPCServer/RPCServer.csproj delete mode 100644 dotnet/Receive/Receive.cs delete mode 100755 dotnet/Receive/Receive.csproj delete mode 100644 dotnet/ReceiveLogs/ReceiveLogs.cs delete mode 100755 dotnet/ReceiveLogs/ReceiveLogs.csproj delete mode 100644 dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs delete mode 100755 dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj delete mode 100644 dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs delete mode 100755 dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj delete mode 100755 dotnet/Receiver delete mode 100644 dotnet/Send/Send.cs delete mode 100755 dotnet/Send/Send.csproj delete mode 100644 dotnet/Worker/Worker.cs delete mode 100755 dotnet/Worker/Worker.csproj delete mode 100644 dotnet/recompile.bat delete mode 100644 dotnet/recompile.ps1 delete mode 100755 dotnet/recompile.sh delete mode 100644 dotnet/update.ps1 diff --git a/dotnet/.gitignore b/dotnet/.gitignore deleted file mode 100644 index 52800612..00000000 --- a/dotnet/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.dll -*.exe -*.lock.json -packages/ diff --git a/dotnet/EmitLog/EmitLog.cs b/dotnet/EmitLog/EmitLog.cs deleted file mode 100644 index e31a7362..00000000 --- a/dotnet/EmitLog/EmitLog.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class EmitLog -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); - - var message = GetMessage(args); - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static string GetMessage(string[] args) - { - return ((args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); - } -} diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj deleted file mode 100755 index e67b0d00..00000000 --- a/dotnet/EmitLog/EmitLog.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - EmitLog - Exe - EmitLog - - - - - - diff --git a/dotnet/EmitLogDirect/EmitLogDirect.cs b/dotnet/EmitLogDirect/EmitLogDirect.cs deleted file mode 100644 index 707267f9..00000000 --- a/dotnet/EmitLogDirect/EmitLogDirect.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Linq; -using RabbitMQ.Client; -using System.Text; - -class EmitLogDirect -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); - - var severity = (args.Length > 0) ? args[0] : "info"; - var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "direct_logs", routingKey: severity, basicProperties: null, body: body); - Console.WriteLine(" [x] Sent '{0}':'{1}'", severity, message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } -} diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj deleted file mode 100755 index a992cb01..00000000 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - EmitLogDirect - Exe - EmitLogDirect - - - - - - diff --git a/dotnet/EmitLogTopic/EmitLogTopic.cs b/dotnet/EmitLogTopic/EmitLogTopic.cs deleted file mode 100644 index f50fee0a..00000000 --- a/dotnet/EmitLogTopic/EmitLogTopic.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Linq; -using RabbitMQ.Client; -using System.Text; - -class EmitLogTopic -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); - - var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; - var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - channel.BasicPublish(exchange: "topic_logs", routingKey: routingKey, basicProperties: null, body: body); - Console.WriteLine(" [x] Sent '{0}':'{1}'", routingKey, message); - } - } -} diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj deleted file mode 100755 index 9e67c891..00000000 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - EmitLogTopic - Exe - EmitLogTopic - - - - - - diff --git a/dotnet/NewTask/NewTask.cs b/dotnet/NewTask/NewTask.cs deleted file mode 100644 index 9ee3b664..00000000 --- a/dotnet/NewTask/NewTask.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class NewTask -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); - - var message = GetMessage(args); - var body = Encoding.UTF8.GetBytes(message); - - var properties = channel.CreateBasicProperties(); - properties.Persistent = true; - - channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static string GetMessage(string[] args) - { - return ((args.Length > 0) ? string.Join(" ", args) : "Hello World!"); - } -} diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj deleted file mode 100755 index ea53c62c..00000000 --- a/dotnet/NewTask/NewTask.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - NewTask - Exe - NewTask - - - - - - diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs deleted file mode 100644 index d11c2f62..00000000 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ /dev/null @@ -1,141 +0,0 @@ -using RabbitMQ.Client; -using System; -using System.Collections.Concurrent; -using System.Diagnostics; -using System.Text; -using System.Linq; -using System.Threading; - -class PublisherConfirms -{ - private const int MESSAGE_COUNT = 50_000; - - public static void Main() - { - PublishMessagesIndividually(); - PublishMessagesInBatch(); - HandlePublishConfirmsAsynchronously(); - } - - private static IConnection CreateConnection() - { - var factory = new ConnectionFactory { HostName = "localhost" }; - return factory.CreateConnection(); - } - - private static void PublishMessagesIndividually() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - channel.ConfirmSelect(); - - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - } - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static void PublishMessagesInBatch() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - channel.ConfirmSelect(); - - var batchSize = 100; - var outstandingMessageCount = 0; - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); - outstandingMessageCount++; - - if (outstandingMessageCount == batchSize) - { - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - outstandingMessageCount = 0; - } - } - - if (outstandingMessageCount > 0) - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); - - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static void HandlePublishConfirmsAsynchronously() - { - using (var connection = CreateConnection()) - using (var channel = connection.CreateModel()) - { - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - channel.ConfirmSelect(); - - var outstandingConfirms = new ConcurrentDictionary(); - - void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) - { - if (multiple) - { - var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); - foreach (var entry in confirmed) - outstandingConfirms.TryRemove(entry.Key, out _); - } - else - outstandingConfirms.TryRemove(sequenceNumber, out _); - } - - channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); - channel.BasicNacks += (sender, ea) => - { - outstandingConfirms.TryGetValue(ea.DeliveryTag, out string body); - Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); - cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); - }; - - var timer = new Stopwatch(); - timer.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) - { - var body = i.ToString(); - outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); - } - - if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) - throw new Exception("All messages could not be confirmed in 60 seconds"); - - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); - } - } - - private static bool WaitUntil(int numberOfSeconds, Func condition) - { - int waited = 0; - while(!condition() && waited < numberOfSeconds * 1000) - { - Thread.Sleep(100); - waited += 100; - } - - return condition(); - } -} \ No newline at end of file diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj deleted file mode 100644 index 3c341c57..00000000 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - netcoreapp3.1 - portable - PublisherConfirms - Exe - PublisherConfirms - - - - - - - diff --git a/dotnet/README.md b/dotnet/README.md deleted file mode 100644 index e85ddd64..00000000 --- a/dotnet/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# Dotnet C# code for RabbitMQ tutorials - -Here you can find the C# code examples for [RabbitMQ -tutorials](https://www.rabbitmq.com/getstarted.html). - -To successfully use the examples you will need a running RabbitMQ server. - -## Requirements - -### Requirements on Windows - -* [dotnet core](https://www.microsoft.com/net/core) - -We're using the command line (start->run cmd.exe) to -compile and run -p the code. Alternatively you could [use Visual Studio](https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/dotnet-visual-studio) and [NuGet package](https://www.nuget.org/packages/RabbitMQ.Client/), but this set of tutorials assumes -the command line. - -### Requirements on Linux - -* [dotnet core](https://www.microsoft.com/net/core) - -## Code - -Each command is best run in a separate console/terminal instance run from the root -of the tutorial directory. - -First run the `recompile.sh` script. This will run `dotnet restore` and build -each project which is required before they can be run. Alternatively or if you are -on windows cd into each project and run `dotnet restore` manually. - -#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) - - dotnet run -p Receive/Receive.csproj - dotnet run -p Send/Send.csproj - -#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) - - dotnet run -p Worker/Worker.csproj - dotnet run -p NewTask/NewTask.csproj - -#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) - - dotnet run -p ReceiveLogs/ReceiveLogs.csproj - dotnet run -p EmitLog/EmitLog.csproj - -#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) - - dotnet run -p ReceiveLogsDirect/ReceiveLogsDirect.csproj info - dotnet run -p EmitLogDirect/EmitLogDirect.csproj - -#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) - - dotnet run -p ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info - dotnet run -p EmitLogTopic/EmitLogTopic.csproj - -#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) - - dotnet run -p RPCServer/RPCServer.csproj - dotnet run -p RPCClient/RPCClient.csproj - -#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) - - dotnet run -p PublisherConfirms/PublisherConfirms.csproj diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs deleted file mode 100644 index adba5216..00000000 --- a/dotnet/RPCClient/RPCClient.cs +++ /dev/null @@ -1,94 +0,0 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System; -using System.Collections.Concurrent; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -public class RpcClient -{ - private const string QUEUE_NAME = "rpc_queue"; - - private readonly IConnection connection; - private readonly IModel channel; - private readonly string replyQueueName; - private readonly EventingBasicConsumer consumer; - private readonly ConcurrentDictionary> callbackMapper = - new ConcurrentDictionary>(); - - public RpcClient() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - // declare a server-named queue - replyQueueName = channel.QueueDeclare(queue: "").QueueName; - consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource tcs)) - return; - var body = ea.Body.ToArray(); - var response = Encoding.UTF8.GetString(body); - tcs.TrySetResult(response); - }; - - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); - } - - public Task CallAsync(string message, CancellationToken cancellationToken = default(CancellationToken)) - { - IBasicProperties props = channel.CreateBasicProperties(); - var correlationId = Guid.NewGuid().ToString(); - props.CorrelationId = correlationId; - props.ReplyTo = replyQueueName; - var messageBytes = Encoding.UTF8.GetBytes(message); - var tcs = new TaskCompletionSource(); - callbackMapper.TryAdd(correlationId, tcs); - - channel.BasicPublish( - exchange: "", - routingKey: QUEUE_NAME, - basicProperties: props, - body: messageBytes); - - cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); - return tcs.Task; - } - - public void Close() - { - channel.Close(); - connection.Close(); - } -} - -public class Rpc -{ - public static void Main(string[] args) - { - Console.WriteLine("RPC Client"); - string n = args.Length > 0 ? args[0] : "30"; - Task t = InvokeAsync(n); - t.Wait(); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static async Task InvokeAsync(string n) - { - var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib({0})", n); - var response = await rpcClient.CallAsync(n.ToString()); - Console.WriteLine(" [.] Got '{0}'", response); - - rpcClient.Close(); - } -} diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj deleted file mode 100755 index 58092421..00000000 --- a/dotnet/RPCClient/RPCClient.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - RPCClient - Exe - RPCClient - - - - - - diff --git a/dotnet/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs deleted file mode 100644 index 3be08afd..00000000 --- a/dotnet/RPCServer/RPCServer.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class RPCServer -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using (var connection = factory.CreateConnection()) - using (var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); - channel.BasicQos(0, 1, false); - var consumer = new EventingBasicConsumer(channel); - channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); - Console.WriteLine(" [x] Awaiting RPC requests"); - - consumer.Received += (model, ea) => - { - string response = null; - - var body = ea.Body.ToArray(); - var props = ea.BasicProperties; - var replyProps = channel.CreateBasicProperties(); - replyProps.CorrelationId = props.CorrelationId; - - try - { - var message = Encoding.UTF8.GetString(body); - int n = int.Parse(message); - Console.WriteLine(" [.] fib({0})", message); - response = fib(n).ToString(); - } - catch (Exception e) - { - Console.WriteLine(" [.] " + e.Message); - response = ""; - } - finally - { - var responseBytes = Encoding.UTF8.GetBytes(response); - channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); - } - }; - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } - - /// - /// Assumes only valid positive integer input. - /// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. - /// - private static int fib(int n) - { - if (n == 0 || n == 1) - { - return n; - } - - return fib(n - 1) + fib(n - 2); - } -} diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj deleted file mode 100755 index 205a7f34..00000000 --- a/dotnet/RPCServer/RPCServer.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netcoreapp3.1 - portable - RPCServer - Exe - RPCServer - - - - - - diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs deleted file mode 100644 index 85c44da5..00000000 --- a/dotnet/Receive/Receive.cs +++ /dev/null @@ -1,35 +0,0 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System; -using System.Text; - -class Receive -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "hello", - durable: false, - exclusive: false, - autoDelete: false, - arguments: null); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - Console.WriteLine(" [x] Received {0}", message); - }; - channel.BasicConsume(queue: "hello", - autoAck: true, - consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj deleted file mode 100755 index 0e71c3dd..00000000 --- a/dotnet/Receive/Receive.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netcoreapp3.1 - portable - Receive - Exe - Receive - - - - - - diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs deleted file mode 100644 index 9d554300..00000000 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class ReceiveLogs -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); - - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); - - Console.WriteLine(" [*] Waiting for logs."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - byte[] body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - Console.WriteLine(" [x] {0}", message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj deleted file mode 100755 index 616d42bb..00000000 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - ReceiveLogs - Exe - ReceiveLogs - - - - - - diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs deleted file mode 100644 index 02ca2ed8..00000000 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class ReceiveLogsDirect -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - - if (args.Length < 1) - { - Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - Environment.ExitCode = 1; - return; - } - - foreach(var severity in args) - { - channel.QueueBind(queue: queueName, exchange: "direct_logs", routingKey: severity); - } - - Console.WriteLine(" [*] Waiting for messages."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - var routingKey = ea.RoutingKey; - Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj deleted file mode 100755 index 34b29bcc..00000000 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - ReceiveLogsDirect - Exe - ReceiveLogsDirect - - - - - - diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs deleted file mode 100644 index 803b7809..00000000 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; - -class ReceiveLogsTopic -{ - public static void Main(string[] args) - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); - // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; - - if (args.Length < 1) - { - Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - Environment.ExitCode = 1; - return; - } - - foreach(var bindingKey in args) - { - channel.QueueBind(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); - } - - Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - var body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - var routingKey = ea.RoutingKey; - Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, message); - }; - channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj deleted file mode 100755 index 3bd17d89..00000000 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - ReceiveLogsTopic - Exe - ReceiveLogsTopic - - - - - - diff --git a/dotnet/Receiver b/dotnet/Receiver deleted file mode 100755 index a05ac538..00000000 --- a/dotnet/Receiver +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1.0.0-*", - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true - }, - "dependencies": {}, - "frameworks": { - "netcoreapp1.0": { - "dependencies": { - "Microsoft.NETCore.App": { - "type": "platform", - "version": "1.0.0" - }, - "RabbitMQ.Client": "5.0.*" - }, - "imports": "dnxcore50" - } - } -} diff --git a/dotnet/Send/Send.cs b/dotnet/Send/Send.cs deleted file mode 100644 index 5599df38..00000000 --- a/dotnet/Send/Send.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using RabbitMQ.Client; -using System.Text; - -class Send -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "hello", - durable: false, - exclusive: false, - autoDelete: false, - arguments: null); - - string message = "Hello World!"; - var body = Encoding.UTF8.GetBytes(message); - - channel.BasicPublish(exchange: "", - routingKey: "hello", - basicProperties: null, - body: body); - Console.WriteLine(" [x] Sent {0}", message); - } - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } -} diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj deleted file mode 100755 index f3259a91..00000000 --- a/dotnet/Send/Send.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - netcoreapp3.1 - portable - Send - Exe - Send - - - - - - diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs deleted file mode 100644 index ce170d99..00000000 --- a/dotnet/Worker/Worker.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; -using System.Threading; - -class Worker -{ - public static void Main() - { - var factory = new ConnectionFactory() { HostName = "localhost" }; - using(var connection = factory.CreateConnection()) - using(var channel = connection.CreateModel()) - { - channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); - - channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); - - Console.WriteLine(" [*] Waiting for messages."); - - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - byte[] body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - Console.WriteLine(" [x] Received {0}", message); - - int dots = message.Split('.').Length - 1; - Thread.Sleep(dots * 1000); - - Console.WriteLine(" [x] Done"); - - // here channel could also be accessed as ((EventingBasicConsumer)sender).Model - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); - }; - channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - } -} diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj deleted file mode 100755 index 9984d6da..00000000 --- a/dotnet/Worker/Worker.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - netcoreapp3.1 - portable - Worker - Exe - Worker - - - - - - diff --git a/dotnet/recompile.bat b/dotnet/recompile.bat deleted file mode 100644 index b2a4f9a6..00000000 --- a/dotnet/recompile.bat +++ /dev/null @@ -1 +0,0 @@ -for /D %%s in (.\*) do @dotnet build %%s diff --git a/dotnet/recompile.ps1 b/dotnet/recompile.ps1 deleted file mode 100644 index 53c42e21..00000000 --- a/dotnet/recompile.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose - -Get-Childitem -Recurse '*.csproj' | ForEach-Object { - # & dotnet build $_.FullName - & dotnet build $_ -} diff --git a/dotnet/recompile.sh b/dotnet/recompile.sh deleted file mode 100755 index d67be133..00000000 --- a/dotnet/recompile.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -for f in */; do \ - dotnet restore $f - dotnet build $f -done diff --git a/dotnet/update.ps1 b/dotnet/update.ps1 deleted file mode 100644 index 21724b99..00000000 --- a/dotnet/update.ps1 +++ /dev/null @@ -1,6 +0,0 @@ -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 'Latest' -ErrorAction 'Stop' -Verbose - -Get-Childitem -Recurse '*.csproj' | ForEach-Object { - & dotnet add $_ package --version '6.0.0' RabbitMQ.Client -} From cf9f79bd60a6398a980e57b3dbe84afaf68d1d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:36:31 +0100 Subject: [PATCH 254/659] unified formatting / usings, removed redundant parenthesis --- dotnet-7/EmitLog/EmitLog.cs | 4 +- dotnet-7/EmitLogDirect/EmitLogDirect.cs | 4 +- dotnet-7/EmitLogTopic/EmitLogTopic.cs | 4 +- dotnet-7/NewTask/NewTask.cs | 4 +- .../PublisherConfirms/PublisherConfirms.cs | 12 +-- dotnet-7/RPCClient/RPCClient.cs | 84 +++++++++---------- dotnet-7/RPCServer/RPCServer.cs | 4 +- dotnet-7/Receive/Receive.cs | 4 +- dotnet-7/ReceiveLogs/ReceiveLogs.cs | 4 +- .../ReceiveLogsDirect/ReceiveLogsDirect.cs | 6 +- dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs | 6 +- dotnet-7/Send/Send.cs | 5 +- dotnet-7/Worker/Worker.cs | 4 +- 13 files changed, 72 insertions(+), 73 deletions(-) diff --git a/dotnet-7/EmitLog/EmitLog.cs b/dotnet-7/EmitLog/EmitLog.cs index 936b9ea6..dccf7f59 100644 --- a/dotnet-7/EmitLog/EmitLog.cs +++ b/dotnet-7/EmitLog/EmitLog.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; using System.Text; +using RabbitMQ.Client; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.cs b/dotnet-7/EmitLogDirect/EmitLogDirect.cs index 2e6aac4b..effc6981 100644 --- a/dotnet-7/EmitLogDirect/EmitLogDirect.cs +++ b/dotnet-7/EmitLogDirect/EmitLogDirect.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; using System.Text; +using RabbitMQ.Client; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/EmitLogTopic/EmitLogTopic.cs b/dotnet-7/EmitLogTopic/EmitLogTopic.cs index 93f58cfb..8092b0a3 100644 --- a/dotnet-7/EmitLogTopic/EmitLogTopic.cs +++ b/dotnet-7/EmitLogTopic/EmitLogTopic.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; using System.Text; +using RabbitMQ.Client; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/NewTask/NewTask.cs b/dotnet-7/NewTask/NewTask.cs index a2d254fa..415b8e86 100644 --- a/dotnet-7/NewTask/NewTask.cs +++ b/dotnet-7/NewTask/NewTask.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; using System.Text; +using RabbitMQ.Client; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.cs b/dotnet-7/PublisherConfirms/PublisherConfirms.cs index 97f38865..2bed8a65 100644 --- a/dotnet-7/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet-7/PublisherConfirms/PublisherConfirms.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; -using System.Collections.Concurrent; +using System.Collections.Concurrent; using System.Diagnostics; using System.Text; +using RabbitMQ.Client; const int MESSAGE_COUNT = 50_000; @@ -39,9 +39,9 @@ static void PublishMessagesIndividually() static void PublishMessagesInBatch() { using var connection = CreateConnection(); - using var channel = connection.CreateModel(); - - // declare a server-named queue + using var channel = connection.CreateModel(); + + // declare a server-named queue var queueName = channel.QueueDeclare(queue: "").QueueName; channel.ConfirmSelect(); @@ -119,7 +119,7 @@ void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) static bool WaitUntil(int numberOfSeconds, Func condition) { int waited = 0; - while(!condition() && waited < numberOfSeconds * 1000) + while (!condition() && waited < numberOfSeconds * 1000) { Thread.Sleep(100); waited += 100; diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index 6155f836..84db498d 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -1,7 +1,7 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Events; using System.Collections.Concurrent; using System.Text; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; public class RpcClient { @@ -15,7 +15,7 @@ public class RpcClient public RpcClient() { - var factory = new ConnectionFactory() { HostName = "localhost" }; + var factory = new ConnectionFactory { HostName = "localhost" }; connection = factory.CreateConnection(); channel = connection.CreateModel(); @@ -38,23 +38,23 @@ public RpcClient() } public Task CallAsync(string message, CancellationToken cancellationToken = default) - { - IBasicProperties props = channel.CreateBasicProperties(); - var correlationId = Guid.NewGuid().ToString(); - props.CorrelationId = correlationId; - props.ReplyTo = replyQueueName; - var messageBytes = Encoding.UTF8.GetBytes(message); - var tcs = new TaskCompletionSource(); - callbackMapper.TryAdd(correlationId, tcs); - - channel.BasicPublish( - exchange: "", - routingKey: QUEUE_NAME, - basicProperties: props, - body: messageBytes); - - cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); - return tcs.Task; + { + IBasicProperties props = channel.CreateBasicProperties(); + var correlationId = Guid.NewGuid().ToString(); + props.CorrelationId = correlationId; + props.ReplyTo = replyQueueName; + var messageBytes = Encoding.UTF8.GetBytes(message); + var tcs = new TaskCompletionSource(); + callbackMapper.TryAdd(correlationId, tcs); + + channel.BasicPublish( + exchange: "", + routingKey: QUEUE_NAME, + basicProperties: props, + body: messageBytes); + + cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); + return tcs.Task; } public void Close() @@ -64,26 +64,26 @@ public void Close() } public class Rpc -{ - public static void Main(string[] args) - { - Console.WriteLine("RPC Client"); - string n = args.Length > 0 ? args[0] : "30"; - Task t = InvokeAsync(n); - t.Wait(); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static async Task InvokeAsync(string n) - { - var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib({0})", n); - var response = await rpcClient.CallAsync(n.ToString()); - Console.WriteLine(" [.] Got '{0}'", response); - - rpcClient.Close(); - } +{ + public static void Main(string[] args) + { + Console.WriteLine("RPC Client"); + string n = args.Length > 0 ? args[0] : "30"; + Task t = InvokeAsync(n); + t.Wait(); + + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + } + + private static async Task InvokeAsync(string n) + { + var rpcClient = new RpcClient(); + + Console.WriteLine(" [x] Requesting fib({0})", n); + var response = await rpcClient.CallAsync(n); + Console.WriteLine(" [.] Got '{0}'", response); + + rpcClient.Close(); + } } \ No newline at end of file diff --git a/dotnet-7/RPCServer/RPCServer.cs b/dotnet-7/RPCServer/RPCServer.cs index 53f3d075..fe47dcd1 100644 --- a/dotnet-7/RPCServer/RPCServer.cs +++ b/dotnet-7/RPCServer/RPCServer.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/Receive/Receive.cs b/dotnet-7/Receive/Receive.cs index a5b53048..f571310b 100644 --- a/dotnet-7/Receive/Receive.cs +++ b/dotnet-7/Receive/Receive.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.cs b/dotnet-7/ReceiveLogs/ReceiveLogs.cs index 8ede7ae5..84ebc0b2 100644 --- a/dotnet-7/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet-7/ReceiveLogs/ReceiveLogs.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs index f8721297..873e9451 100644 --- a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); @@ -20,7 +20,7 @@ return; } -foreach(var severity in args) +foreach (var severity in args) { channel.QueueBind(queue: queueName, exchange: "direct_logs", routingKey: severity); } diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs index de869149..9f760c62 100644 --- a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); @@ -20,7 +20,7 @@ return; } -foreach(var bindingKey in args) +foreach (var bindingKey in args) { channel.QueueBind(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); } diff --git a/dotnet-7/Send/Send.cs b/dotnet-7/Send/Send.cs index bde7e19c..59a4b5b7 100644 --- a/dotnet-7/Send/Send.cs +++ b/dotnet-7/Send/Send.cs @@ -1,8 +1,7 @@ -using RabbitMQ.Client; using System.Text; +using RabbitMQ.Client; - -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); diff --git a/dotnet-7/Worker/Worker.cs b/dotnet-7/Worker/Worker.cs index 8e210902..2b814284 100644 --- a/dotnet-7/Worker/Worker.cs +++ b/dotnet-7/Worker/Worker.cs @@ -1,8 +1,8 @@ +using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; -using System.Text; -var factory = new ConnectionFactory() { HostName = "localhost" }; +var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); From 6765c2369f68fd41249fbee0107c7f347b0d8749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:43:03 +0100 Subject: [PATCH 255/659] Use ExchangeType enum instead of strings --- dotnet-7/EmitLogDirect/EmitLogDirect.cs | 2 +- dotnet-7/EmitLogTopic/EmitLogTopic.cs | 2 +- dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs | 2 +- dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.cs b/dotnet-7/EmitLogDirect/EmitLogDirect.cs index effc6981..4c1c3b7c 100644 --- a/dotnet-7/EmitLogDirect/EmitLogDirect.cs +++ b/dotnet-7/EmitLogDirect/EmitLogDirect.cs @@ -5,7 +5,7 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); +channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); var severity = (args.Length > 0) ? args[0] : "info"; var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; diff --git a/dotnet-7/EmitLogTopic/EmitLogTopic.cs b/dotnet-7/EmitLogTopic/EmitLogTopic.cs index 8092b0a3..72ac5deb 100644 --- a/dotnet-7/EmitLogTopic/EmitLogTopic.cs +++ b/dotnet-7/EmitLogTopic/EmitLogTopic.cs @@ -6,7 +6,7 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); +channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs index 873e9451..7ccadab4 100644 --- a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -7,7 +7,7 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); +channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); // declare a server-named queue var queueName = channel.QueueDeclare(queue: "").QueueName; diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs index 9f760c62..673d415f 100644 --- a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -7,7 +7,7 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.ExchangeDeclare(exchange: "topic_logs", type: "topic"); +channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); // declare a server-named queue var queueName = channel.QueueDeclare(queue: "").QueueName; From 9070b77bb9afdd915132ec0882e8747931eb3921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:55:13 +0100 Subject: [PATCH 256/659] Various minor improvements to PublisherConfirms Switched out TimeSpan constructor usage with `TimeSpan.FromSeconds` Made the async example wait asynchroniously Titlecased a method Simplified server-named queue creation call --- .../PublisherConfirms/PublisherConfirms.cs | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.cs b/dotnet-7/PublisherConfirms/PublisherConfirms.cs index 2bed8a65..f8d564f5 100644 --- a/dotnet-7/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet-7/PublisherConfirms/PublisherConfirms.cs @@ -7,7 +7,7 @@ PublishMessagesIndividually(); PublishMessagesInBatch(); -HandlePublishConfirmsAsynchronously(); +await HandlePublishConfirmsAsynchronously(); static IConnection CreateConnection() { @@ -21,19 +21,21 @@ static void PublishMessagesIndividually() using var channel = connection.CreateModel(); // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; + var queueName = channel.QueueDeclare().QueueName; channel.ConfirmSelect(); - var timer = new Stopwatch(); - timer.Start(); + var startTime = Stopwatch.GetTimestamp(); + for (int i = 0; i < MESSAGE_COUNT; i++) { var body = Encoding.UTF8.GetBytes(i.ToString()); channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); } - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {timer.ElapsedMilliseconds:N0} ms"); + + var endTime = Stopwatch.GetTimestamp(); + + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); } static void PublishMessagesInBatch() @@ -42,13 +44,14 @@ static void PublishMessagesInBatch() using var channel = connection.CreateModel(); // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; + var queueName = channel.QueueDeclare().QueueName; channel.ConfirmSelect(); var batchSize = 100; - var outstandingMessageCount = 0; - var timer = new Stopwatch(); - timer.Start(); + var outstandingMessageCount = 0; + + var startTime = Stopwatch.GetTimestamp(); + for (int i = 0; i < MESSAGE_COUNT; i++) { var body = Encoding.UTF8.GetBytes(i.ToString()); @@ -57,30 +60,31 @@ static void PublishMessagesInBatch() if (outstandingMessageCount == batchSize) { - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); outstandingMessageCount = 0; } } if (outstandingMessageCount > 0) - channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 5)); + channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); + + var endTime = Stopwatch.GetTimestamp(); - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {timer.ElapsedMilliseconds:N0} ms"); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); } -static void HandlePublishConfirmsAsynchronously() +static async Task HandlePublishConfirmsAsynchronously() { using var connection = CreateConnection(); using var channel = connection.CreateModel(); // declare a server-named queue - var queueName = channel.QueueDeclare(queue: "").QueueName; + var queueName = channel.QueueDeclare().QueueName; channel.ConfirmSelect(); var outstandingConfirms = new ConcurrentDictionary(); - void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) + void CleanOutstandingConfirms(ulong sequenceNumber, bool multiple) { if (multiple) { @@ -92,16 +96,16 @@ void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) outstandingConfirms.TryRemove(sequenceNumber, out _); } - channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + channel.BasicAcks += (sender, ea) => CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); channel.BasicNacks += (sender, ea) => { outstandingConfirms.TryGetValue(ea.DeliveryTag, out string? body); Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); - cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); }; - var timer = new Stopwatch(); - timer.Start(); + var startTime = Stopwatch.GetTimestamp(); + for (int i = 0; i < MESSAGE_COUNT; i++) { var body = i.ToString(); @@ -109,19 +113,19 @@ void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple) channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); } - if (!WaitUntil(60, () => outstandingConfirms.IsEmpty)) + if (!await WaitUntil(60, () => outstandingConfirms.IsEmpty)) throw new Exception("All messages could not be confirmed in 60 seconds"); - timer.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {timer.ElapsedMilliseconds:N0} ms"); + var endTime = Stopwatch.GetTimestamp(); + Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); } -static bool WaitUntil(int numberOfSeconds, Func condition) +static async ValueTask WaitUntil(int numberOfSeconds, Func condition) { int waited = 0; while (!condition() && waited < numberOfSeconds * 1000) { - Thread.Sleep(100); + await Task.Delay(TimeSpan.FromMilliseconds(100)); waited += 100; } From 3cea1223c246a3a6bec7ea93c1e88ce1971bfcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Fri, 27 Jan 2023 22:58:17 +0100 Subject: [PATCH 257/659] simplify server-named queue declaration --- dotnet-7/RPCClient/RPCClient.cs | 2 +- dotnet-7/ReceiveLogs/ReceiveLogs.cs | 2 +- dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs | 2 +- dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index 84db498d..bd7f2378 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -20,7 +20,7 @@ public RpcClient() connection = factory.CreateConnection(); channel = connection.CreateModel(); // declare a server-named queue - replyQueueName = channel.QueueDeclare(queue: "").QueueName; + replyQueueName = channel.QueueDeclare().QueueName; consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.cs b/dotnet-7/ReceiveLogs/ReceiveLogs.cs index 84ebc0b2..f41a3298 100644 --- a/dotnet-7/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet-7/ReceiveLogs/ReceiveLogs.cs @@ -9,7 +9,7 @@ channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); // declare a server-named queue -var queueName = channel.QueueDeclare(queue: "").QueueName; +var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); Console.WriteLine(" [*] Waiting for logs."); diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs index 7ccadab4..be67af43 100644 --- a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -9,7 +9,7 @@ channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); // declare a server-named queue -var queueName = channel.QueueDeclare(queue: "").QueueName; +var queueName = channel.QueueDeclare().QueueName; if (args.Length < 1) { diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs index 673d415f..061c26e5 100644 --- a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -9,7 +9,7 @@ channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); // declare a server-named queue -var queueName = channel.QueueDeclare(queue: "").QueueName; +var queueName = channel.QueueDeclare().QueueName; if (args.Length < 1) { From 7d6439f626f6cfb69e204dd01273b0ea84297290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 18:53:49 +0100 Subject: [PATCH 258/659] Update RPCClient example - Implement `IDisposable` to close the connection - await InvokeAsync instead of calling `Wait()` - Discard unused var from callbackMapper.TryRemove - var instead of explicit type in callbackMapper.TryRemove where the tcs is used --- dotnet-7/RPCClient/RPCClient.cs | 113 ++++++++++++++++---------------- 1 file changed, 55 insertions(+), 58 deletions(-) diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index bd7f2378..d9b81da0 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -1,43 +1,43 @@ -using System.Collections.Concurrent; -using System.Text; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; - -public class RpcClient -{ - private const string QUEUE_NAME = "rpc_queue"; - - private readonly IConnection connection; - private readonly IModel channel; - private readonly string replyQueueName; - private readonly EventingBasicConsumer consumer; - private readonly ConcurrentDictionary> callbackMapper = new(); - - public RpcClient() - { - var factory = new ConnectionFactory { HostName = "localhost" }; - - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - // declare a server-named queue - replyQueueName = channel.QueueDeclare().QueueName; - consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource? tcs)) - return; - var body = ea.Body.ToArray(); - var response = Encoding.UTF8.GetString(body); - tcs.TrySetResult(response); - }; - - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); - } - - public Task CallAsync(string message, CancellationToken cancellationToken = default) +using System.Collections.Concurrent; +using System.Text; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; + +public class RpcClient : IDisposable +{ + private const string QUEUE_NAME = "rpc_queue"; + + private readonly IConnection connection; + private readonly IModel channel; + private readonly string replyQueueName; + private readonly EventingBasicConsumer consumer; + private readonly ConcurrentDictionary> callbackMapper = new(); + + public RpcClient() + { + var factory = new ConnectionFactory { HostName = "localhost" }; + + connection = factory.CreateConnection(); + channel = connection.CreateModel(); + // declare a server-named queue + replyQueueName = channel.QueueDeclare().QueueName; + consumer = new EventingBasicConsumer(channel); + consumer.Received += (model, ea) => + { + if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out var tcs)) + return; + var body = ea.Body.ToArray(); + var response = Encoding.UTF8.GetString(body); + tcs.TrySetResult(response); + }; + + channel.BasicConsume( + consumer: consumer, + queue: replyQueueName, + autoAck: true); + } + + public Task CallAsync(string message, CancellationToken cancellationToken = default) { IBasicProperties props = channel.CreateBasicProperties(); var correlationId = Guid.NewGuid().ToString(); @@ -53,24 +53,23 @@ public Task CallAsync(string message, CancellationToken cancellationToke basicProperties: props, body: messageBytes); - cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out var tmp)); - return tcs.Task; - } - - public void Close() - { - connection.Close(); - } -} - -public class Rpc + cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out _)); + return tcs.Task; + } + + public void Dispose() + { + connection.Close(); + } +} + +public class Rpc { - public static void Main(string[] args) + public static async Task Main(string[] args) { Console.WriteLine("RPC Client"); string n = args.Length > 0 ? args[0] : "30"; - Task t = InvokeAsync(n); - t.Wait(); + await InvokeAsync(n); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); @@ -78,12 +77,10 @@ public static void Main(string[] args) private static async Task InvokeAsync(string n) { - var rpcClient = new RpcClient(); + using var rpcClient = new RpcClient(); Console.WriteLine(" [x] Requesting fib({0})", n); var response = await rpcClient.CallAsync(n); Console.WriteLine(" [.] Got '{0}'", response); - - rpcClient.Close(); - } + } } \ No newline at end of file From 059e060d208975b1f284ced3d1dac6052240e78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 18:54:58 +0100 Subject: [PATCH 259/659] inline consumer declaration --- dotnet-7/RPCClient/RPCClient.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index d9b81da0..ec2f2b8a 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -10,7 +10,6 @@ public class RpcClient : IDisposable private readonly IConnection connection; private readonly IModel channel; private readonly string replyQueueName; - private readonly EventingBasicConsumer consumer; private readonly ConcurrentDictionary> callbackMapper = new(); public RpcClient() @@ -21,7 +20,7 @@ public RpcClient() channel = connection.CreateModel(); // declare a server-named queue replyQueueName = channel.QueueDeclare().QueueName; - consumer = new EventingBasicConsumer(channel); + var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out var tcs)) From 83726ff105511239535c445fc94a02f5b2d7fc37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 19:04:05 +0100 Subject: [PATCH 260/659] Update RPCServer - Uppercase function name - Replace summary with regular comment, summmaries aren't valid on local functions - Replace "" with string.Empty for consistency - Pattern matching for n in the Fib function (`n is 0 or 1`) - var instead of explicit type where type is clear --- dotnet-7/RPCServer/RPCServer.cs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/dotnet-7/RPCServer/RPCServer.cs b/dotnet-7/RPCServer/RPCServer.cs index fe47dcd1..151155dd 100644 --- a/dotnet-7/RPCServer/RPCServer.cs +++ b/dotnet-7/RPCServer/RPCServer.cs @@ -14,29 +14,29 @@ consumer.Received += (model, ea) => { - string response = string.Empty; + var response = string.Empty; var body = ea.Body.ToArray(); var props = ea.BasicProperties; var replyProps = channel.CreateBasicProperties(); - replyProps.CorrelationId = props.CorrelationId; - + replyProps.CorrelationId = props.CorrelationId; + try { var message = Encoding.UTF8.GetString(body); - int n = int.Parse(message); - Console.WriteLine($" [.] fib({message})"); - response = fib(n).ToString(); + var n = int.Parse(message); + Console.WriteLine($" [.] Fib({message})"); + response = Fib(n).ToString(); } catch (Exception e) { Console.WriteLine($" [.] {e.Message}"); - response = ""; + response = string.Empty; } finally { var responseBytes = Encoding.UTF8.GetBytes(response); - channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); + channel.BasicPublish(exchange: string.Empty, routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); } }; @@ -44,16 +44,14 @@ Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); -/// -/// Assumes only valid positive integer input. -/// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. -/// -static int fib(int n) +// Assumes only valid positive integer input. +// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. +static int Fib(int n) { - if (n == 0 || n == 1) + if (n is 0 or 1) { return n; } - return fib(n - 1) + fib(n - 2); + return Fib(n - 1) + Fib(n - 2); } \ No newline at end of file From cc1ba39ab84d230a531eeaa836337c0b0e749865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 20:26:30 +0100 Subject: [PATCH 261/659] "" -> string.Empty, const string --- dotnet-7/Send/Send.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dotnet-7/Send/Send.cs b/dotnet-7/Send/Send.cs index 59a4b5b7..94873ea9 100644 --- a/dotnet-7/Send/Send.cs +++ b/dotnet-7/Send/Send.cs @@ -7,10 +7,10 @@ channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); -string message = "Hello World!"; +const string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); +channel.BasicPublish(exchange: string.Empty, routingKey: "hello", basicProperties: null, body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); From 45a01227551ff368be661b5001740b215ca653be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 21:22:56 +0100 Subject: [PATCH 262/659] revert var changes --- dotnet-7/RPCServer/RPCServer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dotnet-7/RPCServer/RPCServer.cs b/dotnet-7/RPCServer/RPCServer.cs index 151155dd..5979f1e8 100644 --- a/dotnet-7/RPCServer/RPCServer.cs +++ b/dotnet-7/RPCServer/RPCServer.cs @@ -14,7 +14,7 @@ consumer.Received += (model, ea) => { - var response = string.Empty; + string response = string.Empty; var body = ea.Body.ToArray(); var props = ea.BasicProperties; @@ -24,7 +24,7 @@ try { var message = Encoding.UTF8.GetString(body); - var n = int.Parse(message); + int n = int.Parse(message); Console.WriteLine($" [.] Fib({message})"); response = Fib(n).ToString(); } From 63ef93f33e83d5c3c5c6f3e0175a47c8f4542d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sat, 28 Jan 2023 21:50:00 +0100 Subject: [PATCH 263/659] more "" -> `string.Empty` Note: I don't really care if "" or string.Empty is used, as long as it's consistent across the codebase --- dotnet-7/EmitLog/EmitLog.cs | 2 +- dotnet-7/NewTask/NewTask.cs | 2 +- dotnet-7/PublisherConfirms/PublisherConfirms.cs | 6 +++--- dotnet-7/RPCClient/RPCClient.cs | 2 +- dotnet-7/ReceiveLogs/ReceiveLogs.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dotnet-7/EmitLog/EmitLog.cs b/dotnet-7/EmitLog/EmitLog.cs index dccf7f59..fd97cf94 100644 --- a/dotnet-7/EmitLog/EmitLog.cs +++ b/dotnet-7/EmitLog/EmitLog.cs @@ -9,7 +9,7 @@ var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body); +channel.BasicPublish(exchange: "logs", routingKey: string.Empty, basicProperties: null, body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/NewTask/NewTask.cs b/dotnet-7/NewTask/NewTask.cs index 415b8e86..b07442cc 100644 --- a/dotnet-7/NewTask/NewTask.cs +++ b/dotnet-7/NewTask/NewTask.cs @@ -13,7 +13,7 @@ var properties = channel.CreateBasicProperties(); properties.Persistent = true; -channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); +channel.BasicPublish(exchange: string.Empty, routingKey: "task_queue", basicProperties: properties, body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.cs b/dotnet-7/PublisherConfirms/PublisherConfirms.cs index f8d564f5..a9a09ef0 100644 --- a/dotnet-7/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet-7/PublisherConfirms/PublisherConfirms.cs @@ -29,7 +29,7 @@ static void PublishMessagesIndividually() for (int i = 0; i < MESSAGE_COUNT; i++) { var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: body); channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); } @@ -55,7 +55,7 @@ static void PublishMessagesInBatch() for (int i = 0; i < MESSAGE_COUNT; i++) { var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body); + channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: body); outstandingMessageCount++; if (outstandingMessageCount == batchSize) @@ -110,7 +110,7 @@ void CleanOutstandingConfirms(ulong sequenceNumber, bool multiple) { var body = i.ToString(); outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); - channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); + channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); } if (!await WaitUntil(60, () => outstandingConfirms.IsEmpty)) diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index ec2f2b8a..3af1d79d 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -47,7 +47,7 @@ public Task CallAsync(string message, CancellationToken cancellationToke callbackMapper.TryAdd(correlationId, tcs); channel.BasicPublish( - exchange: "", + exchange: string.Empty, routingKey: QUEUE_NAME, basicProperties: props, body: messageBytes); diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.cs b/dotnet-7/ReceiveLogs/ReceiveLogs.cs index f41a3298..42ff115f 100644 --- a/dotnet-7/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet-7/ReceiveLogs/ReceiveLogs.cs @@ -10,7 +10,7 @@ // declare a server-named queue var queueName = channel.QueueDeclare().QueueName; -channel.QueueBind(queue: queueName, exchange: "logs", routingKey: ""); +channel.QueueBind(queue: queueName, exchange: "logs", routingKey: string.Empty); Console.WriteLine(" [*] Waiting for logs."); From cfdd1c9260be0ceb695c127442fc11859f387acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sun, 29 Jan 2023 18:38:55 +0100 Subject: [PATCH 264/659] formatted to match the website --- dotnet-7/EmitLog/EmitLog.cs | 5 ++++- dotnet-7/EmitLogDirect/EmitLogDirect.cs | 9 +++++++-- dotnet-7/EmitLogTopic/EmitLogTopic.cs | 9 +++++++-- dotnet-7/NewTask/NewTask.cs | 11 +++++++++-- dotnet-7/RPCClient/RPCClient.cs | 16 +++++++--------- dotnet-7/RPCServer/RPCServer.cs | 17 +++++++++++++---- dotnet-7/Receive/Receive.cs | 10 ++++++++-- dotnet-7/ReceiveLogs/ReceiveLogs.cs | 8 ++++++-- dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs | 11 ++++++++--- dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs | 11 ++++++++--- dotnet-7/Send/Send.cs | 13 ++++++++++--- dotnet-7/Worker/Worker.cs | 10 ++++++++-- 12 files changed, 95 insertions(+), 35 deletions(-) diff --git a/dotnet-7/EmitLog/EmitLog.cs b/dotnet-7/EmitLog/EmitLog.cs index fd97cf94..a70f5e9e 100644 --- a/dotnet-7/EmitLog/EmitLog.cs +++ b/dotnet-7/EmitLog/EmitLog.cs @@ -9,7 +9,10 @@ var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "logs", routingKey: string.Empty, basicProperties: null, body: body); +channel.BasicPublish(exchange: "logs", + routingKey: string.Empty, + basicProperties: null, + body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.cs b/dotnet-7/EmitLogDirect/EmitLogDirect.cs index 4c1c3b7c..80145a3f 100644 --- a/dotnet-7/EmitLogDirect/EmitLogDirect.cs +++ b/dotnet-7/EmitLogDirect/EmitLogDirect.cs @@ -8,9 +8,14 @@ channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); var severity = (args.Length > 0) ? args[0] : "info"; -var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; +var message = (args.Length > 1) + ? string.Join(" ", args.Skip(1).ToArray()) + : "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "direct_logs", routingKey: severity, basicProperties: null, body: body); +channel.BasicPublish(exchange: "direct_logs", + routingKey: severity, + basicProperties: null, + body: body); Console.WriteLine($" [x] Sent '{severity}':'{message}'"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/EmitLogTopic/EmitLogTopic.cs b/dotnet-7/EmitLogTopic/EmitLogTopic.cs index 72ac5deb..9f54903c 100644 --- a/dotnet-7/EmitLogTopic/EmitLogTopic.cs +++ b/dotnet-7/EmitLogTopic/EmitLogTopic.cs @@ -9,7 +9,12 @@ channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; -var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; +var message = (args.Length > 1) + ? string.Join(" ", args.Skip(1).ToArray()) + : "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "topic_logs", routingKey: routingKey, basicProperties: null, body: body); +channel.BasicPublish(exchange: "topic_logs", + routingKey: routingKey, + basicProperties: null, + body: body); Console.WriteLine($" [x] Sent '{routingKey}':'{message}'"); \ No newline at end of file diff --git a/dotnet-7/NewTask/NewTask.cs b/dotnet-7/NewTask/NewTask.cs index b07442cc..96730ee5 100644 --- a/dotnet-7/NewTask/NewTask.cs +++ b/dotnet-7/NewTask/NewTask.cs @@ -5,7 +5,11 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); +channel.QueueDeclare(queue: "task_queue", + durable: true, + exclusive: false, + autoDelete: false, + arguments: null); var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); @@ -13,7 +17,10 @@ var properties = channel.CreateBasicProperties(); properties.Persistent = true; -channel.BasicPublish(exchange: string.Empty, routingKey: "task_queue", basicProperties: properties, body: body); +channel.BasicPublish(exchange: string.Empty, + routingKey: "task_queue", + basicProperties: properties, + body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet-7/RPCClient/RPCClient.cs index 3af1d79d..30828c1e 100644 --- a/dotnet-7/RPCClient/RPCClient.cs +++ b/dotnet-7/RPCClient/RPCClient.cs @@ -30,10 +30,9 @@ public RpcClient() tcs.TrySetResult(response); }; - channel.BasicConsume( - consumer: consumer, - queue: replyQueueName, - autoAck: true); + channel.BasicConsume(consumer: consumer, + queue: replyQueueName, + autoAck: true); } public Task CallAsync(string message, CancellationToken cancellationToken = default) @@ -46,11 +45,10 @@ public Task CallAsync(string message, CancellationToken cancellationToke var tcs = new TaskCompletionSource(); callbackMapper.TryAdd(correlationId, tcs); - channel.BasicPublish( - exchange: string.Empty, - routingKey: QUEUE_NAME, - basicProperties: props, - body: messageBytes); + channel.BasicPublish(exchange: string.Empty, + routingKey: QUEUE_NAME, + basicProperties: props, + body: messageBytes); cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out _)); return tcs.Task; diff --git a/dotnet-7/RPCServer/RPCServer.cs b/dotnet-7/RPCServer/RPCServer.cs index 5979f1e8..350031aa 100644 --- a/dotnet-7/RPCServer/RPCServer.cs +++ b/dotnet-7/RPCServer/RPCServer.cs @@ -6,10 +6,16 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.QueueDeclare(queue: "rpc_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); -channel.BasicQos(0, 1, false); +channel.QueueDeclare(queue: "rpc_queue", + durable: false, + exclusive: false, + autoDelete: false, + arguments: null); +channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); var consumer = new EventingBasicConsumer(channel); -channel.BasicConsume(queue: "rpc_queue", autoAck: false, consumer: consumer); +channel.BasicConsume(queue: "rpc_queue", + autoAck: false, + consumer: consumer); Console.WriteLine(" [x] Awaiting RPC requests"); consumer.Received += (model, ea) => @@ -36,7 +42,10 @@ finally { var responseBytes = Encoding.UTF8.GetBytes(response); - channel.BasicPublish(exchange: string.Empty, routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); + channel.BasicPublish(exchange: string.Empty, + routingKey: props.ReplyTo, + basicProperties: replyProps, + body: responseBytes); channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); } }; diff --git a/dotnet-7/Receive/Receive.cs b/dotnet-7/Receive/Receive.cs index f571310b..30295e5c 100644 --- a/dotnet-7/Receive/Receive.cs +++ b/dotnet-7/Receive/Receive.cs @@ -6,7 +6,11 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); +channel.QueueDeclare(queue: "hello", + durable: false, + exclusive: false, + autoDelete: false, + arguments: null); Console.WriteLine(" [*] Waiting for messages."); @@ -17,7 +21,9 @@ var message = Encoding.UTF8.GetString(body); Console.WriteLine($" [x] Received {message}"); }; -channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); +channel.BasicConsume(queue: "hello", + autoAck: true, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.cs b/dotnet-7/ReceiveLogs/ReceiveLogs.cs index 42ff115f..61d3fbec 100644 --- a/dotnet-7/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet-7/ReceiveLogs/ReceiveLogs.cs @@ -10,7 +10,9 @@ // declare a server-named queue var queueName = channel.QueueDeclare().QueueName; -channel.QueueBind(queue: queueName, exchange: "logs", routingKey: string.Empty); +channel.QueueBind(queue: queueName, + exchange: "logs", + routingKey: string.Empty); Console.WriteLine(" [*] Waiting for logs."); @@ -21,7 +23,9 @@ var message = Encoding.UTF8.GetString(body); Console.WriteLine($" [x] {message}"); }; -channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); +channel.BasicConsume(queue: queueName, + autoAck: true, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs index be67af43..e3e6039b 100644 --- a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -13,7 +13,8 @@ if (args.Length < 1) { - Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); + Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", + Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); Environment.ExitCode = 1; @@ -22,7 +23,9 @@ foreach (var severity in args) { - channel.QueueBind(queue: queueName, exchange: "direct_logs", routingKey: severity); + channel.QueueBind(queue: queueName, + exchange: "direct_logs", + routingKey: severity); } Console.WriteLine(" [*] Waiting for messages."); @@ -35,7 +38,9 @@ var routingKey = ea.RoutingKey; Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); }; -channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); +channel.BasicConsume(queue: queueName, + autoAck: true, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs index 061c26e5..f4bec78b 100644 --- a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -13,7 +13,8 @@ if (args.Length < 1) { - Console.Error.WriteLine("Usage: {0} [binding_key...]", Environment.GetCommandLineArgs()[0]); + Console.Error.WriteLine("Usage: {0} [binding_key...]", + Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); Environment.ExitCode = 1; @@ -22,7 +23,9 @@ foreach (var bindingKey in args) { - channel.QueueBind(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); + channel.QueueBind(queue: queueName, + exchange: "topic_logs", + routingKey: bindingKey); } Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); @@ -35,7 +38,9 @@ var routingKey = ea.RoutingKey; Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); }; -channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); +channel.BasicConsume(queue: queueName, + autoAck: true, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); \ No newline at end of file diff --git a/dotnet-7/Send/Send.cs b/dotnet-7/Send/Send.cs index 94873ea9..71b5e299 100644 --- a/dotnet-7/Send/Send.cs +++ b/dotnet-7/Send/Send.cs @@ -5,12 +5,19 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); +channel.QueueDeclare(queue: "hello", + durable: false, + exclusive: false, + autoDelete: false, + arguments: null); -const string message = "Hello World!"; +var message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: string.Empty, routingKey: "hello", basicProperties: null, body: body); +channel.BasicPublish(exchange: string.Empty, + routingKey: "hello", + basicProperties: null, + body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); diff --git a/dotnet-7/Worker/Worker.cs b/dotnet-7/Worker/Worker.cs index 2b814284..9c33c61c 100644 --- a/dotnet-7/Worker/Worker.cs +++ b/dotnet-7/Worker/Worker.cs @@ -6,7 +6,11 @@ using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); -channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); +channel.QueueDeclare(queue: "task_queue", + durable: true, + exclusive: false, + autoDelete: false, + arguments: null); channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); @@ -27,7 +31,9 @@ // here channel could also be accessed as ((EventingBasicConsumer)sender).Model channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; -channel.BasicConsume(queue: "task_queue", autoAck: false, consumer: consumer); +channel.BasicConsume(queue: "task_queue", + autoAck: false, + consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); \ No newline at end of file From ff3057ca885b527447d95cc31249c7d96fbf37dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Pilgaard=20Gr=C3=B8ndahl?= Date: Sun, 29 Jan 2023 19:16:23 +0100 Subject: [PATCH 265/659] `dotnet-7` -> `dotnet` --- {dotnet-7 => dotnet}/.gitignore | 0 {dotnet-7 => dotnet}/EmitLog/EmitLog.cs | 0 {dotnet-7 => dotnet}/EmitLog/EmitLog.csproj | 0 {dotnet-7 => dotnet}/EmitLogDirect/EmitLogDirect.cs | 0 {dotnet-7 => dotnet}/EmitLogDirect/EmitLogDirect.csproj | 0 {dotnet-7 => dotnet}/EmitLogTopic/EmitLogTopic.cs | 0 {dotnet-7 => dotnet}/EmitLogTopic/EmitLogTopic.csproj | 0 {dotnet-7 => dotnet}/NewTask/NewTask.cs | 0 {dotnet-7 => dotnet}/NewTask/NewTask.csproj | 0 {dotnet-7 => dotnet}/PublisherConfirms/PublisherConfirms.cs | 0 {dotnet-7 => dotnet}/PublisherConfirms/PublisherConfirms.csproj | 0 {dotnet-7 => dotnet}/README.md | 0 {dotnet-7 => dotnet}/RPCClient/RPCClient.cs | 0 {dotnet-7 => dotnet}/RPCClient/RPCClient.csproj | 0 {dotnet-7 => dotnet}/RPCServer/RPCServer.cs | 0 {dotnet-7 => dotnet}/RPCServer/RPCServer.csproj | 0 {dotnet-7 => dotnet}/Receive/Receive.cs | 0 {dotnet-7 => dotnet}/Receive/Receive.csproj | 0 {dotnet-7 => dotnet}/ReceiveLogs/ReceiveLogs.cs | 0 {dotnet-7 => dotnet}/ReceiveLogs/ReceiveLogs.csproj | 0 {dotnet-7 => dotnet}/ReceiveLogsDirect/ReceiveLogsDirect.cs | 0 {dotnet-7 => dotnet}/ReceiveLogsDirect/ReceiveLogsDirect.csproj | 0 {dotnet-7 => dotnet}/ReceiveLogsTopic/ReceiveLogsTopic.cs | 0 {dotnet-7 => dotnet}/ReceiveLogsTopic/ReceiveLogsTopic.csproj | 0 {dotnet-7 => dotnet}/Send/Send.cs | 0 {dotnet-7 => dotnet}/Send/Send.csproj | 0 {dotnet-7 => dotnet}/Worker/Worker.cs | 0 {dotnet-7 => dotnet}/Worker/Worker.csproj | 0 dotnet-7/dotnet-7.sln => dotnet/dotnet.sln | 0 29 files changed, 0 insertions(+), 0 deletions(-) rename {dotnet-7 => dotnet}/.gitignore (100%) rename {dotnet-7 => dotnet}/EmitLog/EmitLog.cs (100%) rename {dotnet-7 => dotnet}/EmitLog/EmitLog.csproj (100%) rename {dotnet-7 => dotnet}/EmitLogDirect/EmitLogDirect.cs (100%) rename {dotnet-7 => dotnet}/EmitLogDirect/EmitLogDirect.csproj (100%) rename {dotnet-7 => dotnet}/EmitLogTopic/EmitLogTopic.cs (100%) rename {dotnet-7 => dotnet}/EmitLogTopic/EmitLogTopic.csproj (100%) rename {dotnet-7 => dotnet}/NewTask/NewTask.cs (100%) rename {dotnet-7 => dotnet}/NewTask/NewTask.csproj (100%) rename {dotnet-7 => dotnet}/PublisherConfirms/PublisherConfirms.cs (100%) rename {dotnet-7 => dotnet}/PublisherConfirms/PublisherConfirms.csproj (100%) rename {dotnet-7 => dotnet}/README.md (100%) rename {dotnet-7 => dotnet}/RPCClient/RPCClient.cs (100%) rename {dotnet-7 => dotnet}/RPCClient/RPCClient.csproj (100%) rename {dotnet-7 => dotnet}/RPCServer/RPCServer.cs (100%) rename {dotnet-7 => dotnet}/RPCServer/RPCServer.csproj (100%) rename {dotnet-7 => dotnet}/Receive/Receive.cs (100%) rename {dotnet-7 => dotnet}/Receive/Receive.csproj (100%) rename {dotnet-7 => dotnet}/ReceiveLogs/ReceiveLogs.cs (100%) rename {dotnet-7 => dotnet}/ReceiveLogs/ReceiveLogs.csproj (100%) rename {dotnet-7 => dotnet}/ReceiveLogsDirect/ReceiveLogsDirect.cs (100%) rename {dotnet-7 => dotnet}/ReceiveLogsDirect/ReceiveLogsDirect.csproj (100%) rename {dotnet-7 => dotnet}/ReceiveLogsTopic/ReceiveLogsTopic.cs (100%) rename {dotnet-7 => dotnet}/ReceiveLogsTopic/ReceiveLogsTopic.csproj (100%) rename {dotnet-7 => dotnet}/Send/Send.cs (100%) rename {dotnet-7 => dotnet}/Send/Send.csproj (100%) rename {dotnet-7 => dotnet}/Worker/Worker.cs (100%) rename {dotnet-7 => dotnet}/Worker/Worker.csproj (100%) rename dotnet-7/dotnet-7.sln => dotnet/dotnet.sln (100%) diff --git a/dotnet-7/.gitignore b/dotnet/.gitignore similarity index 100% rename from dotnet-7/.gitignore rename to dotnet/.gitignore diff --git a/dotnet-7/EmitLog/EmitLog.cs b/dotnet/EmitLog/EmitLog.cs similarity index 100% rename from dotnet-7/EmitLog/EmitLog.cs rename to dotnet/EmitLog/EmitLog.cs diff --git a/dotnet-7/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj similarity index 100% rename from dotnet-7/EmitLog/EmitLog.csproj rename to dotnet/EmitLog/EmitLog.csproj diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.cs b/dotnet/EmitLogDirect/EmitLogDirect.cs similarity index 100% rename from dotnet-7/EmitLogDirect/EmitLogDirect.cs rename to dotnet/EmitLogDirect/EmitLogDirect.cs diff --git a/dotnet-7/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj similarity index 100% rename from dotnet-7/EmitLogDirect/EmitLogDirect.csproj rename to dotnet/EmitLogDirect/EmitLogDirect.csproj diff --git a/dotnet-7/EmitLogTopic/EmitLogTopic.cs b/dotnet/EmitLogTopic/EmitLogTopic.cs similarity index 100% rename from dotnet-7/EmitLogTopic/EmitLogTopic.cs rename to dotnet/EmitLogTopic/EmitLogTopic.cs diff --git a/dotnet-7/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj similarity index 100% rename from dotnet-7/EmitLogTopic/EmitLogTopic.csproj rename to dotnet/EmitLogTopic/EmitLogTopic.csproj diff --git a/dotnet-7/NewTask/NewTask.cs b/dotnet/NewTask/NewTask.cs similarity index 100% rename from dotnet-7/NewTask/NewTask.cs rename to dotnet/NewTask/NewTask.cs diff --git a/dotnet-7/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj similarity index 100% rename from dotnet-7/NewTask/NewTask.csproj rename to dotnet/NewTask/NewTask.csproj diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs similarity index 100% rename from dotnet-7/PublisherConfirms/PublisherConfirms.cs rename to dotnet/PublisherConfirms/PublisherConfirms.cs diff --git a/dotnet-7/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj similarity index 100% rename from dotnet-7/PublisherConfirms/PublisherConfirms.csproj rename to dotnet/PublisherConfirms/PublisherConfirms.csproj diff --git a/dotnet-7/README.md b/dotnet/README.md similarity index 100% rename from dotnet-7/README.md rename to dotnet/README.md diff --git a/dotnet-7/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs similarity index 100% rename from dotnet-7/RPCClient/RPCClient.cs rename to dotnet/RPCClient/RPCClient.cs diff --git a/dotnet-7/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj similarity index 100% rename from dotnet-7/RPCClient/RPCClient.csproj rename to dotnet/RPCClient/RPCClient.csproj diff --git a/dotnet-7/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs similarity index 100% rename from dotnet-7/RPCServer/RPCServer.cs rename to dotnet/RPCServer/RPCServer.cs diff --git a/dotnet-7/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj similarity index 100% rename from dotnet-7/RPCServer/RPCServer.csproj rename to dotnet/RPCServer/RPCServer.csproj diff --git a/dotnet-7/Receive/Receive.cs b/dotnet/Receive/Receive.cs similarity index 100% rename from dotnet-7/Receive/Receive.cs rename to dotnet/Receive/Receive.cs diff --git a/dotnet-7/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj similarity index 100% rename from dotnet-7/Receive/Receive.csproj rename to dotnet/Receive/Receive.csproj diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs similarity index 100% rename from dotnet-7/ReceiveLogs/ReceiveLogs.cs rename to dotnet/ReceiveLogs/ReceiveLogs.cs diff --git a/dotnet-7/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj similarity index 100% rename from dotnet-7/ReceiveLogs/ReceiveLogs.csproj rename to dotnet/ReceiveLogs/ReceiveLogs.csproj diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs similarity index 100% rename from dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.cs rename to dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs diff --git a/dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj similarity index 100% rename from dotnet-7/ReceiveLogsDirect/ReceiveLogsDirect.csproj rename to dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs similarity index 100% rename from dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.cs rename to dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs diff --git a/dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj similarity index 100% rename from dotnet-7/ReceiveLogsTopic/ReceiveLogsTopic.csproj rename to dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj diff --git a/dotnet-7/Send/Send.cs b/dotnet/Send/Send.cs similarity index 100% rename from dotnet-7/Send/Send.cs rename to dotnet/Send/Send.cs diff --git a/dotnet-7/Send/Send.csproj b/dotnet/Send/Send.csproj similarity index 100% rename from dotnet-7/Send/Send.csproj rename to dotnet/Send/Send.csproj diff --git a/dotnet-7/Worker/Worker.cs b/dotnet/Worker/Worker.cs similarity index 100% rename from dotnet-7/Worker/Worker.cs rename to dotnet/Worker/Worker.cs diff --git a/dotnet-7/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj similarity index 100% rename from dotnet-7/Worker/Worker.csproj rename to dotnet/Worker/Worker.csproj diff --git a/dotnet-7/dotnet-7.sln b/dotnet/dotnet.sln similarity index 100% rename from dotnet-7/dotnet-7.sln rename to dotnet/dotnet.sln From 37531c554ca047786244623924c18cf9cfba18d9 Mon Sep 17 00:00:00 2001 From: hogimn Date: Wed, 1 Feb 2023 22:18:29 +0900 Subject: [PATCH 266/659] Add Java Gradle project --- java-gradle/.gitignore | 39 +++ java-gradle/README.md | 106 ++++++++ java-gradle/build.gradle | 29 +++ java-gradle/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + java-gradle/gradlew | 240 ++++++++++++++++++ java-gradle/gradlew.bat | 91 +++++++ java-gradle/pull-source-files.bat | 1 + java-gradle/settings.gradle | 2 + java-gradle/src/main/java/EmitLog.java | 1 + java-gradle/src/main/java/EmitLogDirect.java | 1 + java-gradle/src/main/java/EmitLogHeader.java | 1 + java-gradle/src/main/java/EmitLogTopic.java | 1 + java-gradle/src/main/java/NewTask.java | 1 + .../src/main/java/PublisherConfirms.java | 1 + java-gradle/src/main/java/RPCClient.java | 1 + java-gradle/src/main/java/RPCServer.java | 1 + .../src/main/java/ReceiveLogHeader.java | 1 + java-gradle/src/main/java/ReceiveLogs.java | 1 + .../src/main/java/ReceiveLogsDirect.java | 1 + .../src/main/java/ReceiveLogsTopic.java | 1 + java-gradle/src/main/java/Recv.java | 1 + java-gradle/src/main/java/Send.java | 1 + java-gradle/src/main/java/Worker.java | 1 + 24 files changed, 528 insertions(+) create mode 100644 java-gradle/.gitignore create mode 100644 java-gradle/README.md create mode 100644 java-gradle/build.gradle create mode 100644 java-gradle/gradle/wrapper/gradle-wrapper.jar create mode 100644 java-gradle/gradle/wrapper/gradle-wrapper.properties create mode 100755 java-gradle/gradlew create mode 100644 java-gradle/gradlew.bat create mode 100644 java-gradle/pull-source-files.bat create mode 100644 java-gradle/settings.gradle create mode 120000 java-gradle/src/main/java/EmitLog.java create mode 120000 java-gradle/src/main/java/EmitLogDirect.java create mode 120000 java-gradle/src/main/java/EmitLogHeader.java create mode 120000 java-gradle/src/main/java/EmitLogTopic.java create mode 120000 java-gradle/src/main/java/NewTask.java create mode 120000 java-gradle/src/main/java/PublisherConfirms.java create mode 120000 java-gradle/src/main/java/RPCClient.java create mode 120000 java-gradle/src/main/java/RPCServer.java create mode 120000 java-gradle/src/main/java/ReceiveLogHeader.java create mode 120000 java-gradle/src/main/java/ReceiveLogs.java create mode 120000 java-gradle/src/main/java/ReceiveLogsDirect.java create mode 120000 java-gradle/src/main/java/ReceiveLogsTopic.java create mode 120000 java-gradle/src/main/java/Recv.java create mode 120000 java-gradle/src/main/java/Send.java create mode 120000 java-gradle/src/main/java/Worker.java diff --git a/java-gradle/.gitignore b/java-gradle/.gitignore new file mode 100644 index 00000000..581bf51f --- /dev/null +++ b/java-gradle/.gitignore @@ -0,0 +1,39 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/java-gradle/README.md b/java-gradle/README.md new file mode 100644 index 00000000..0bed78b6 --- /dev/null +++ b/java-gradle/README.md @@ -0,0 +1,106 @@ +# Java code for RabbitMQ tutorials + +Here you can find the Java code examples from [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +To successfully use the examples you will need a RabbitMQ node running locally. + +## Requirements + +### Linux + +- Note the source files are symbolic links to the [java](https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/java) directory. + +### Windows + +- Run pull-source-files.bat to replace symbolic link to the actual source file. + +```shell +.\pull-source-files.bat +``` + +## Code + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java.html): + +```shell +# terminal tab 1 +gradle -Pmain=Recv run + +# terminal tab 2 +gradle -Pmain=Send run +``` + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): + +```shell +# terminal tab 1 +gradle -Pmain=Worker run +gradle -Pmain=Worker run + +# terminal tab 2 +gradle -Pmain=NewTask run --args "First Message" +gradle -Pmain=NewTask run --args "Second Message" +gradle -Pmain=NewTask run --args "Third Message" +gradle -Pmain=NewTask run --args "Fourth Message" +gradle -Pmain=NewTask run --args "Fifth Message" +``` + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) + +```shell +# terminal tab 1 +gradle -Pmain=ReceiveLogs run + +# terminal tab 2 +gradle -Pmain=EmitLog run +``` + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-java.html) + +```shell +# terminal tab 1 +gradle -Pmain=ReceiveLogsDirect run --args "warning error" + +# terminal tab 2 +gradle -Pmain=ReceiveLogsDirect run --args "info warning error" + +# terminal tab 3 +gradle -Pmain=EmitLogDirect run --args "error Run. Run. Or it will explode" +``` + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-java.html) + +```shell +# To receive all the logs: +gradle -Pmain=ReceiveLogsTopic run --args "#" + +# To receive all logs from the facility "kern": +gradle -Pmain=ReceiveLogsTopic run --args "kern.*" + +# Or if you want to hear only about "critical" logs: +gradle -Pmain=ReceiveLogsTopic run --args "*.critical" + +# You can create multiple bindings: +gradle -Pmain=ReceiveLogsTopic run --args "kern.* *.critical" + +# And to emit a log with a routing key "kern.critical" type: +gradle -Pmain=EmitLogTopic run --args "kern.critical A critical kernel error" +``` + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-java.html) + +```shell +# Our RPC service is now ready. We can start the server: +gradle -Pmain=RPCServer run + +# To request a fibonacci number run the client: +gradle -Pmain=RPCClient run +``` + +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-java.html) + +```shell +# +gradle -Pmain=PublisherConfirms run +``` diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle new file mode 100644 index 00000000..14a60dff --- /dev/null +++ b/java-gradle/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'application' +} + +group 'com.rabbitmq.client' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'com.rabbitmq:amqp-client:5.16.0' + implementation 'org.slf4j:slf4j-simple:2.0.5' + testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.mockito:mockito-core:4.3.1' + testImplementation 'io.dropwizard.metrics:metrics-core:3.1.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} + +application { + mainClassName = project.hasProperty("main") ? + project.getProperty("main") : "NULL" +} \ No newline at end of file diff --git a/java-gradle/gradle/wrapper/gradle-wrapper.jar b/java-gradle/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/java-gradle/gradlew.bat b/java-gradle/gradlew.bat new file mode 100644 index 00000000..53a6b238 --- /dev/null +++ b/java-gradle/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java-gradle/pull-source-files.bat b/java-gradle/pull-source-files.bat new file mode 100644 index 00000000..f414b47a --- /dev/null +++ b/java-gradle/pull-source-files.bat @@ -0,0 +1 @@ +copy ..\java\*.java src\main\java\ \ No newline at end of file diff --git a/java-gradle/settings.gradle b/java-gradle/settings.gradle new file mode 100644 index 00000000..7e47a7e9 --- /dev/null +++ b/java-gradle/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'rabbitmq-tutorials' + diff --git a/java-gradle/src/main/java/EmitLog.java b/java-gradle/src/main/java/EmitLog.java new file mode 120000 index 00000000..f65914c3 --- /dev/null +++ b/java-gradle/src/main/java/EmitLog.java @@ -0,0 +1 @@ +../../../../java/EmitLog.java \ No newline at end of file diff --git a/java-gradle/src/main/java/EmitLogDirect.java b/java-gradle/src/main/java/EmitLogDirect.java new file mode 120000 index 00000000..ab4bd7ba --- /dev/null +++ b/java-gradle/src/main/java/EmitLogDirect.java @@ -0,0 +1 @@ +../../../../java/EmitLogDirect.java \ No newline at end of file diff --git a/java-gradle/src/main/java/EmitLogHeader.java b/java-gradle/src/main/java/EmitLogHeader.java new file mode 120000 index 00000000..0c818354 --- /dev/null +++ b/java-gradle/src/main/java/EmitLogHeader.java @@ -0,0 +1 @@ +../../../../java/EmitLogHeader.java \ No newline at end of file diff --git a/java-gradle/src/main/java/EmitLogTopic.java b/java-gradle/src/main/java/EmitLogTopic.java new file mode 120000 index 00000000..b4662bb9 --- /dev/null +++ b/java-gradle/src/main/java/EmitLogTopic.java @@ -0,0 +1 @@ +../../../../java/EmitLogTopic.java \ No newline at end of file diff --git a/java-gradle/src/main/java/NewTask.java b/java-gradle/src/main/java/NewTask.java new file mode 120000 index 00000000..160b6504 --- /dev/null +++ b/java-gradle/src/main/java/NewTask.java @@ -0,0 +1 @@ +../../../../java/NewTask.java \ No newline at end of file diff --git a/java-gradle/src/main/java/PublisherConfirms.java b/java-gradle/src/main/java/PublisherConfirms.java new file mode 120000 index 00000000..543c9ceb --- /dev/null +++ b/java-gradle/src/main/java/PublisherConfirms.java @@ -0,0 +1 @@ +../../../../java/PublisherConfirms.java \ No newline at end of file diff --git a/java-gradle/src/main/java/RPCClient.java b/java-gradle/src/main/java/RPCClient.java new file mode 120000 index 00000000..41a0d676 --- /dev/null +++ b/java-gradle/src/main/java/RPCClient.java @@ -0,0 +1 @@ +../../../../java/RPCClient.java \ No newline at end of file diff --git a/java-gradle/src/main/java/RPCServer.java b/java-gradle/src/main/java/RPCServer.java new file mode 120000 index 00000000..40dd9654 --- /dev/null +++ b/java-gradle/src/main/java/RPCServer.java @@ -0,0 +1 @@ +../../../../java/RPCServer.java \ No newline at end of file diff --git a/java-gradle/src/main/java/ReceiveLogHeader.java b/java-gradle/src/main/java/ReceiveLogHeader.java new file mode 120000 index 00000000..96653bbc --- /dev/null +++ b/java-gradle/src/main/java/ReceiveLogHeader.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java-gradle/src/main/java/ReceiveLogs.java b/java-gradle/src/main/java/ReceiveLogs.java new file mode 120000 index 00000000..c37ec06b --- /dev/null +++ b/java-gradle/src/main/java/ReceiveLogs.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogs.java \ No newline at end of file diff --git a/java-gradle/src/main/java/ReceiveLogsDirect.java b/java-gradle/src/main/java/ReceiveLogsDirect.java new file mode 120000 index 00000000..00a7cf55 --- /dev/null +++ b/java-gradle/src/main/java/ReceiveLogsDirect.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogsDirect.java \ No newline at end of file diff --git a/java-gradle/src/main/java/ReceiveLogsTopic.java b/java-gradle/src/main/java/ReceiveLogsTopic.java new file mode 120000 index 00000000..b1dbe53a --- /dev/null +++ b/java-gradle/src/main/java/ReceiveLogsTopic.java @@ -0,0 +1 @@ +../../../../java/ReceiveLogsTopic.java \ No newline at end of file diff --git a/java-gradle/src/main/java/Recv.java b/java-gradle/src/main/java/Recv.java new file mode 120000 index 00000000..8e871235 --- /dev/null +++ b/java-gradle/src/main/java/Recv.java @@ -0,0 +1 @@ +../../../../java/Recv.java \ No newline at end of file diff --git a/java-gradle/src/main/java/Send.java b/java-gradle/src/main/java/Send.java new file mode 120000 index 00000000..16b12d58 --- /dev/null +++ b/java-gradle/src/main/java/Send.java @@ -0,0 +1 @@ +../../../../java/Send.java \ No newline at end of file diff --git a/java-gradle/src/main/java/Worker.java b/java-gradle/src/main/java/Worker.java new file mode 120000 index 00000000..39830cc6 --- /dev/null +++ b/java-gradle/src/main/java/Worker.java @@ -0,0 +1 @@ +../../../../java/Worker.java \ No newline at end of file From bf84b3409e3f73618d27057a40434f14ce2a9c05 Mon Sep 17 00:00:00 2001 From: hogimn Date: Wed, 1 Feb 2023 22:54:49 +0900 Subject: [PATCH 267/659] Link to Java with Gradle --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 53a797db..db5216b9 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ The following ports are available: * [Haskell](./haskell) * [JavaScript (with Node and amqplib)](./javascript-nodejs) (using callbacks) * [JavaScript (with Node and amqplib)](https://github.com/amqp-node/amqplib) (using promises/futures) + * [Java with Gradle](./java-gradle) * [Java with Maven](./java-mvn) * [Java (with IntelliJ IDEA)](./java-idea) * [Java](./java) (with manual dependency management) From d3e4e3997a4b8126c4b236a31bff0df9f476cc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 2 Feb 2023 09:51:13 +0100 Subject: [PATCH 268/659] Add Maven wrapper --- java-mvn/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 58727 bytes .../.mvn/wrapper/maven-wrapper.properties | 18 + java-mvn/mvnw | 316 ++++++++++++++++++ java-mvn/mvnw.cmd | 188 +++++++++++ 4 files changed, 522 insertions(+) create mode 100644 java-mvn/.mvn/wrapper/maven-wrapper.jar create mode 100644 java-mvn/.mvn/wrapper/maven-wrapper.properties create mode 100755 java-mvn/mvnw create mode 100644 java-mvn/mvnw.cmd diff --git a/java-mvn/.mvn/wrapper/maven-wrapper.jar b/java-mvn/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1dd12f17644411d6e840bd5a10c6ecda0175f18 GIT binary patch literal 58727 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%0ANsA|A3-jj|r`KAo%oTajX3>^E` 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 YM{}PByk10KD_nuQ4E7Du?}+~TKh4V)`~Uy| literal 0 HcmV?d00001 diff --git a/java-mvn/.mvn/wrapper/maven-wrapper.properties b/java-mvn/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..864c7fcb --- /dev/null +++ b/java-mvn/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/java-mvn/mvnw b/java-mvn/mvnw new file mode 100755 index 00000000..5643201c --- /dev/null +++ b/java-mvn/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/java-mvn/mvnw.cmd b/java-mvn/mvnw.cmd new file mode 100644 index 00000000..23b7079a --- /dev/null +++ b/java-mvn/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% From ce9762b331c176030f047fd649f0040f0d8fadb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 2 Feb 2023 10:01:43 +0100 Subject: [PATCH 269/659] Bump Java dependencies --- java-mvn/pom.xml | 14 +++++++------- java/README.md | 26 +++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 1714f2ff..c9377c48 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,39 +20,39 @@ com.rabbitmq amqp-client - 5.7.1 + 5.16.0 org.slf4j slf4j-simple - 1.7.26 + 1.7.36 org.junit.jupiter junit-jupiter - 5.5.1 + 5.9.2 test io.dropwizard.metrics metrics-core - 4.1.0 + 4.2.15 test org.assertj assertj-core - 3.13.2 + 3.24.2 test org.mockito mockito-core - 3.0.0 + 4.11.0 test @@ -62,7 +62,7 @@ maven-compiler-plugin - 3.8.1 + 3.10.1 maven-surefire-plugin diff --git a/java/README.md b/java/README.md index 524add14..5d9f1761 100644 --- a/java/README.md +++ b/java/README.md @@ -10,16 +10,16 @@ To successfully use the examples you will need a RabbitMQ node running locally. You'll need to download the following JAR files from Maven Central: - * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0/amqp-client-5.6.0.jar) - * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar) - * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar) + * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0/amqp-client-5.16.0.jar) + * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar) + * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.36/slf4j-simple-1.7.36.jar) For example, with `wget`: ``` shell -wget https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.6.0/amqp-client-5.6.0.jar -wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar -wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar +wget https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0/amqp-client-5.16.0.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.36/slf4j-simple-1.7.36.jar ``` Copy those files in your working directory, along the tutorials Java files. @@ -30,14 +30,14 @@ To run them you'll need all the dependencies, see examples below. You can set an environment variable for the jar files on the classpath e.g. ``` -export CP=.:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar +export CP=.:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar java -cp $CP Send ``` On Windows, use a semicolon instead of a colon to separate items in the classpath: ``` -set CP=.;amqp-client-5.6.0.jar;slf4j-api-1.7.25.jar;slf4j-simple-1.7.25.jar +set CP=.;amqp-client-5.16.0.jar;slf4j-api-1.7.36.jar;slf4j-simple-1.7.36.jar java -cp %CP% Send ``` @@ -46,19 +46,19 @@ java -cp %CP% Send #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java.html): ``` -javac -cp amqp-client-5.6.0.jar Send.java Recv.java +javac -cp amqp-client-5.16.0.jar Send.java Recv.java # terminal tab 1 -java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Recv +java -cp .:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar Recv # terminal tab 2 -java -cp .:amqp-client-5.6.0.jar:slf4j-api-1.7.25.jar:slf4j-simple-1.7.25.jar Send +java -cp .:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar Send ``` #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): ``` -javac -cp amqp-client-5.6.0.jar NewTask.java Worker.java +javac -cp amqp-client-5.16.0.jar NewTask.java Worker.java # terminal tab 1 java -cp $CP NewTask @@ -70,7 +70,7 @@ java -cp $CP Worker #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) ``` shell -javac -cp amqp-client-5.6.0.jar EmitLog.java ReceiveLogs.java +javac -cp amqp-client-5.16.0.jar EmitLog.java ReceiveLogs.java # terminal tab 1 java -cp $CP ReceiveLogs From f58231257c0da7545117b0bfb0fad5ab74a7b18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 2 Feb 2023 10:03:24 +0100 Subject: [PATCH 270/659] Remove Java IDEA directory No need to maintain it, the Java project can be imported in IDEA using Gradle or Maven. --- README.md | 3 +- java-idea/.idea/.name | 1 - java-idea/.idea/libraries/lib.xml | 11 ------- java-idea/.idea/misc.xml | 6 ---- java-idea/.idea/modules.xml | 8 ----- java-idea/.idea/vcs.xml | 6 ---- java-idea/.idea/workspace.xml | 41 -------------------------- java-idea/lib/amqp-client-5.7.1.jar | Bin 608566 -> 0 bytes java-idea/lib/slf4j-api-1.7.26.jar | Bin 41139 -> 0 bytes java-idea/lib/slf4j-simple-1.7.26.jar | Bin 15206 -> 0 bytes java-idea/src/EmitLog.java | 1 - java-idea/src/EmitLogDirect.java | 1 - java-idea/src/EmitLogHeader.java | 1 - java-idea/src/EmitLogTopic.java | 1 - java-idea/src/NewTask.java | 1 - java-idea/src/PublisherConfirms.java | 1 - java-idea/src/RPCClient.java | 1 - java-idea/src/RPCServer.java | 1 - java-idea/src/ReceiveLogHeader.java | 1 - java-idea/src/ReceiveLogs.java | 1 - java-idea/src/ReceiveLogsDirect.java | 1 - java-idea/src/ReceiveLogsTopic.java | 1 - java-idea/src/Recv.java | 1 - java-idea/src/Send.java | 1 - java-idea/src/Worker.java | 1 - 25 files changed, 1 insertion(+), 90 deletions(-) delete mode 100644 java-idea/.idea/.name delete mode 100644 java-idea/.idea/libraries/lib.xml delete mode 100644 java-idea/.idea/misc.xml delete mode 100644 java-idea/.idea/modules.xml delete mode 100644 java-idea/.idea/vcs.xml delete mode 100644 java-idea/.idea/workspace.xml delete mode 100644 java-idea/lib/amqp-client-5.7.1.jar delete mode 100644 java-idea/lib/slf4j-api-1.7.26.jar delete mode 100644 java-idea/lib/slf4j-simple-1.7.26.jar delete mode 120000 java-idea/src/EmitLog.java delete mode 120000 java-idea/src/EmitLogDirect.java delete mode 120000 java-idea/src/EmitLogHeader.java delete mode 120000 java-idea/src/EmitLogTopic.java delete mode 120000 java-idea/src/NewTask.java delete mode 120000 java-idea/src/PublisherConfirms.java delete mode 120000 java-idea/src/RPCClient.java delete mode 120000 java-idea/src/RPCServer.java delete mode 120000 java-idea/src/ReceiveLogHeader.java delete mode 120000 java-idea/src/ReceiveLogs.java delete mode 120000 java-idea/src/ReceiveLogsDirect.java delete mode 120000 java-idea/src/ReceiveLogsTopic.java delete mode 120000 java-idea/src/Recv.java delete mode 120000 java-idea/src/Send.java delete mode 120000 java-idea/src/Worker.java diff --git a/README.md b/README.md index db5216b9..c34340b8 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,9 @@ The following ports are available: * [Haskell](./haskell) * [JavaScript (with Node and amqplib)](./javascript-nodejs) (using callbacks) * [JavaScript (with Node and amqplib)](https://github.com/amqp-node/amqplib) (using promises/futures) + * [Java](./java) (with manual dependency management) * [Java with Gradle](./java-gradle) * [Java with Maven](./java-mvn) - * [Java (with IntelliJ IDEA)](./java-idea) - * [Java](./java) (with manual dependency management) * [Kotlin](./kotlin) * [PHP (with php-amqplib)](./php) * [PHP (with php-amqp)](./php-amqp) diff --git a/java-idea/.idea/.name b/java-idea/.idea/.name deleted file mode 100644 index 7e8d4c0c..00000000 --- a/java-idea/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -rabbitmq-tutorials \ No newline at end of file diff --git a/java-idea/.idea/libraries/lib.xml b/java-idea/.idea/libraries/lib.xml deleted file mode 100644 index 23e162b2..00000000 --- a/java-idea/.idea/libraries/lib.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/misc.xml b/java-idea/.idea/misc.xml deleted file mode 100644 index e208459b..00000000 --- a/java-idea/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/modules.xml b/java-idea/.idea/modules.xml deleted file mode 100644 index d45e0804..00000000 --- a/java-idea/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/vcs.xml b/java-idea/.idea/vcs.xml deleted file mode 100644 index 6c0b8635..00000000 --- a/java-idea/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/java-idea/.idea/workspace.xml b/java-idea/.idea/workspace.xml deleted file mode 100644 index 20f34f20..00000000 --- a/java-idea/.idea/workspace.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - 1.8 - - - - - - - - \ No newline at end of file diff --git a/java-idea/lib/amqp-client-5.7.1.jar b/java-idea/lib/amqp-client-5.7.1.jar deleted file mode 100644 index d08756acf3ade00b7861e449b30e4afd978b4321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608566 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%0AMjV(Ylb$&)?c5xjEjM};5u|qZ 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≻Nu%82R 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 U4g_GH{miV%Zl0qIaJ(&+xX)KIom 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

    N$ahG2eg8P4$1lTyv2srsXIP?t3E{$erJct@ zuB8*~M;!&NRIfcmUJ+9W&H~EytamUEqlkOI%h68I!EaoUo+~B8WE>`!C$V^W1 zgLb+gHS}&dsVx!ad$bt5$D=r_`@9?siGX7#2nvm7!B@@%oh;!4}pXC<%kcC1D=>GTKn?=^bh?5?;k&XIvu*1c3{~bMi}Za z`>!R3gjZ`$2$at;1}Q!w2~{(hHMsqm!$s|8ZtkJd!VoLA)khnR5KG}(BMND*jjsvn z!gs?u(%q0#doZosfQKyIuwYl}R`+Xz89^)wBhTbVP}2H~%=)~e63Jo>GIs0;(ocPX zV_|E0P&EFJDC6c&l>RW*kg!JRn8O~?3A+QX&B_2SXAZt&aj7sXRF#20Ir>pEe^9eN z?wPDVwl8BsK98=?%?Od?2?a6FX_@Wv{twRfUx%#!9>4x@wmI{R!<#^9X6mpUW77jWm@KrPS`XuD7nQq8}wV z(cLfW>BPg9s^eR4-Va?DFWwuS7ak8@@gpBzr(C{sj|R~5gt>H@-$Da%Piz%+;+Q)M zZZisL&Aix)XooCpfk^Mx7RWpJx1@ub$vULAupuwxU1g{-?0yG7%x%84l%q(o6<&S~ zf}P6)DK?)f8^V=q(bz(S%vOAC=rch+mwWW@OGY|Zcr5Ef4|+kyk$r6I3xI?r=c>4b z4yuQYrr@f&qzLU)qCDT-X%$)gT3hj5<=w@?zu|c;^h`=1# zf_#iAt^tNPwBvkeDs6>$r#Q`)#v-58bL!v432i}U7Xw(2G+u3BflzdEJV(B~C4ylX ze8x6jZDGd7q>Fpo@*^|Ba3LbtI$XD%o;7fpHh@kg_uH2|?(C1v5?W>0IjR{K!mHuN zVU6RSvZXMZyaf2Srqphk9u{SKxC8ncqMDFHe;S%Z$ZYT0lEjYD64$KjcADI9h+8GD zXL5jYpfS56)S`v*iRwjHR2i7Gmx=u>?IghUGmBb$ET*dIs4=e9pIlx~IBCC4(^R_- z0L)oHiOMjfM~!0#_Yd{unzHerEi>CLhNw1_45t+%c~i-*O%1OhrL5O>=5*GLro@WX z(+oNXWz(@@EaNB;Y&}xnhiMIpv%2tlRT{EoaU_WS)ZDm3ent_eSIw=?yyIe=vnT+x zdTJr}SCG!{@XTNwk9GK9iYqG(hwc0}Cxpt3I$E%m?G9}9e5oLkP~$BqNdIzDKLIHk zbqWQ$QXSMM^F$)!P6}&z+UR;wKyu! zQG`h63%!WeGh%D-MGp%2l93C!XW}aSi+5<}bDhqX%2%#P6CgHlnpak!@869kES;OJ zV2Ve@R>cgU zi*btM9$}2tM2%=Th<%d4E;U}Izfe_w$r?n?GTrM7+<^}mie?r3T{%%ZQ`dz>-Q1;3 z7{^xBJx($5`8(!@h2%ZR2?$4&J422ikl7^o;@%ZV=<8PJ1NU2!?Hme z$?DTt4YA`MmUH(lirza|4f0n46Db_g`L13ED@P&Wzg0O_w53_==k`t+Ry1h3SJzQ^ zTd+pfjtZ(?%uz?Ix~z(JD3Zy!bdK@Pc&FxvIzK6piEpH;c&Tz%9d$I$X1k_8;NRp} zsl5bR3k*Gnez9lOH57>25MW?$7N_E{t9#a8b2%QSt@3RJ$wx;A-{Lc(k65SKlZs=T z?szo}C^=Kp=4PXqrYuT;S3L8kg%T8-#(F32*^C@p6AUzw$4Qekx^>Uk?JqG)p5{HO z$^(p=vD=(7S0RsRIQZf_@Ti}R-voyT?A9EXlE#ic=i3NF25!rTfR(!1?_KAJ91`Bp zi_V)r@ku2 zew_(8!1Iq5T=#}iGTDL%t1s~mVJ)i(S`cylaz(|pjs9t*kV2BxuRIQhWwIJ^Hjo^h z?gkLZIyy(?d6GT;gYR%vP+f6fsJe6SGBLanJ+^S zkM%&!dbIhbe$-e;9z4`^kRJg{kJ{X{@39Ybp7A(`6^s|HNUf*v z6y~r`Kt3qyd{wsQKu~KY?h_I?HzB(K4;MWaYg#8xAm5NG_N(T2!g^96(muv#pbVM6 z#b=54Ox=RNX;5g~!teKGOGjm`j;B)m)I{wdng^!Mvj*;}3Qw^Iba(@g?LrsJ38ruW z?X|*YQFxWx0iUohIAY9U>G18KNg!~x)9N|9?A*$YvPBl1SA93d5Ul?)^fXRQs48|a zAK@^9W_qkf@f`ivg!KPrSw<; z%*Axa%9aGP&i-Z0{s?xLz)d2IPT`YzaP^dDWq&p2&M5)FzuaOA#JM-_MgPT~)^i zQZj;W>{+s69BkFb2NmqUW+i>M6Q=1?S^{+ca(>mK`N_M7&_Tu-7?asY8IULK94fLz zt-dEuuR?=(#z5q6->QnQ64GcNsU>)m`l3wLho2?*oTzz#6PyOU1Qt5X&uPpeS>6`g zef1GA2pRlC2l%*nA?jsFR@zS(zMeix1I_fy8kbM@084Z>>190I_TA3iBlG$%h6+Lt z#36+c8tAn`A zeOH_-g@LDm2{=?ZUQtc4S1vpFtMCDq?al$`?c`7$y^L!5aeW4C69~DXBfMj_Od)Ji zv01ye5DsZpxgj<2S-T{7Tzo)C{(wUS=g*drVVoUTkgN28#DSXurGf7Qa|0J}3vk_{ zp8nn&#T)7jXD-;W-XGuo+)@2?6#DNW=?^)|(emap=ySJ{{nL$uK3Kbx;su>x>1&39*IQu~YqSM!I2^n8Wz8G>f|~Y7 zGSw{JjC1Bbbo`dpNqi#FXpmmo|3!DLJl|vd>D*=9h4|y`qPqJVTaZn^X@5tcHC0Fp zdLK0e&uUUl2ytlEDg^!tz@de53+FuCwPz^!^_nbjg2*$9_HoY+ye<$63EmA}1`R0n z=_u6$imHE-#|XnngXOfMLPZg`@XQEY&Ae5}IT4?wJY}$f_`p6*OY;Y1TM>q{`#ck5 zcvB&IP&kwo$XwSMJ62fq>G^gx!%ahzgEHgnlQ?~`x`e$nsf6Raq9He>21d6_q_>9} zWw@$w40vTOMUycGR4mk3CAk(&@*IPowqjyfAq|%S+YFMQGS$&hXsZS~MlkC)=!I8s z6d?EoKj97$3Mb^R(pf0VmkR zi_#8?Vy7jtf=>S*Blf9e_2i9+S6`i`%9Q6V;Rjqim<5tBC6|BR!a&VJ)(r0Hdrb$e zDwIJHBdb_^jc&w<7B8(*G|YU?V}19wjLJ^!SW7D?bdEPm#$Ud+ZA`FN}H&B{y^pvEJ zBvsGVA71swcW!WQz=}ksG~!HBFaVepM1)mEUu_D*ivW{=K8?v8iw+_lt1iKt|Mo=b zRZ9@65YqLd@I3w~;r5qk!RjT7nkm|0R!kOJgjcNjP5XHy5fSPL*(45TX!xE?(4~)N z)fA$;Y6;*USb!QvnPkLTd{X`N;tj)1@degw#num1dh@ zlzwjQ*>g2{>S^sR=E%G()_N;oAH}P0Fk-ilHf%D%frLuCmFL5tD|3gMYc@H0~gWqs3N&fQxLnWG5RAXOt8oVGxjreFTh*z z{2eoGXGn+rinDWK+X0BfPQa{qU00V9uU|R&Tczjsz&+Ue(1gSMBd1nn2#dGSqS{}? zTMHiB3K~Jhr5EJ3Z^+oE1{#~E?j#i!;%}E0H!+}@QMN4=7G~IX+M?R3{Hy7Yo;YNB zZ@9w0(**C(1m_xVqXvR78RJyv)9y~8_6c9FisNRE)1={=GJnu@#))}H`}$BnpAZYUUD2O;;hby36Y zlI;P|4qXxbPM@m1-Yro+_Q_$z{zaI#&`o=~6b|uuFA9Dwv11+Qq45$2I5*CB?v^kM z>0nLKB00`s^GnlwXPh`^9IO0H%tuFwE09r+bq66vv7)aWA&`np?>2{c05dMphl2pU zlE>-Vhe=B|w10YW{I#V2z1YJ_GFSfiBt?pTk|L@9UyA)dy*U2K#7mTwkO0y{;#LtQ zwUVqaR+h(0pvLfb7RFPi(-ns;IAfg=^;l3U$Jz!;67M)(9zkr z!2J?6Nk$OPjLnSgB+zxn#t;S$*n43(Z6OFVEHDU=ZAr=(60!UEF+{?jEg&#{oSC@+ z|BE1j!w+|`FB+^*$}owPspTm2TFF!V*Lfo-a3$iZgg|S#=aK}M2B5jmIknXJn`p~7 z_%bA!AJpE89Wv!7z**>!E6TO34A?3^cv%u3PSegtD8s!R>YnLyT@i_L327C}Sc{GV za$Vs;QDo<9g%>kxv2)`frBohajW=+_gK2p(Rl%pvIP`mdVeAPQ~!c9*JvpjNpiz!ID5FPmrf zys+PcAbEfJ(~$p)#NROrF`^&f`&<*U`MkOKzxj{-qapv-YNn8pf#s(d)_?V5#TDfl zKBTpoq=E+FnjGI8U!W#D;8s^kvSfed?J6~ zNm84c<`xyKv`*g)2iRvR8IsWRPO=*W=eTkV2~5&fwHar{gH+I#>opk_(`|4Wsdkym z3l`0Db2tlO!;BAC9g#W}SrQV*SlPq!nX{(8BgFsIXbIFHHHvSxmNWtgG zc`L*MMvEeQ7TknpWQZ;&X=D`&c;s5(uE)Y;K_5*r^T@uj46~O>QOe-Z#tm@$YI*`w zU8@3oFnG{KTeB_|H{y^w^`e_L9HrFA+?D&?fz%VbNO%}Rlb=+O_2G-Lo02%D4+ zzzmS3pe9W3;b1}AfA2ql5K|EraP0V;dpo1hLQM#N+=JLL20 zR5dRB06EEFJf=W!Iw9v&eK>;y68d0M=!LG%8llP&dOkRLLZCdyEX6IZ;dqpEE?2N3bVQZJXa$f0$_wfh&?XYrS99=D({cRuiAGWW@=H8yDsf zVUE$Qfg)K245V@iTh_p(0NqS{J5sqWbjN}hPm{7OSJP1(hGcwE_L(9xb1?9UlQo3kFfaIEb zl3}>608~nWFaEDZP$Jjq_9uAR64$LN;-!}q8~DvbC%sHpm;@Ft~pI4;q}yLGfS<@ z%oWORr_f%ixg1o`ejm`4cRT-*?QZtW{HN(&?M&G(S>x^AI$Cql#h@6xQgwt*eFCj_vlUy1=lGW1(om0G z1N>WY+pYL0Dbk_nP>@>eJjGV69}bk+6D50wE}{YOX{<8zfDTg;q*z0hU#1c0J^^kw zM5kS&;y6-K@H?v0P&vJd=5a`&zY>Bmql^_(yUeh_atNm}J&BnlqPuDv48uF50)V?! z0>Cv8s2QF*Puf=%W@!Z6Jcfp`GQA@45)N3pkjd(pr}PU$-~5uln|X)hD&0Q7@b=RQ z+f!jev@e|>Bqir>O=x9WPC(o)h$g z6B=E>O2&}+egqJ$RE5Y1GCP0=HJu+p{{gXl85AQqz2uOsTm*9q z1_H81j;;~m`*zefUya)A{#HY-4ZbfZ0278c1gS;crE0;IdeXu*Vo2%eAvgE}6#y$l zDtOEvlnZhhhzj~k3{F1-w`?IDJs=LBg-3g-e( zA%^+W@B9P9-Y}53!Wq%{!#9iluzI{cKmo6GfTxy@mk=A?77ba!IuU;arBE^PSz-!u zIdqWtI`LBlb$tqH24opVl*f0dBk&EA;kwE55kr+JVHy7{?Cn;tvwS*u2>gL;AzEGv z?Bz4cAeg(Y8#ZBp3}WS^Hz2DN4k@4CIiLIJepR|+#ENP3Yzd~U^Q>%$qb%$D6jB+9 zOOwHotLU7GAloj`+%FP5sj8WXz_bH9{9gw|X9UbwmirTn$owy36BQCVT#`CijEbR= zNBPwTn`1s=>a&e$!|(9)d(!uar@t%m(#vMwzy|VM>OS};Dok6jxGx~1Omk!=DOt9K zm9Ktj9KL@E&DebblH(B4n1;kga*Mfq*mA>a|FuUx@TgYuisgJ`Qk$GT^o160tT=WH zRd$oHrN=~W*P-P%ZQdwt?`E=53i-wv-6#dk76S;g@8_7_5fW$$+cv9p+U*)h*A~nu zMdZQ*+|wNpC@o6r0du<`l(3+I6jaAZ*e~Jzg&5;H-$p=*#WsOi`a|6_T28JfJmeC@ z^pyhe$c(iY&NiW=s#0{+^8udt6lTe}bw__Ga|8z;2_hl|@QtE#HX9*Ccf}dR>tOZ2 zB&iz~RWa&aqGpG$z+M(umW#q8&2l5gI{Sa&RP zO<(bfBa#u5dlkQfig3`TvfZAp!yb-y^E;+4ZZB$KA?;QT6gfc96{A zaRL6LvSB)Y@R@JR9-3cP-tY--A4)gfH!}Q-0T`yku5V();`iyQSY^<-7`SN`uw0k4 zKpe9flG_|B(;B}?z^y+^=gY$_W#)r(W0K+0;>N;7{dzhpCnM*LhXa-8^F}leXbsLs zRUbme-Uy?oTN3TW)gG2k7Hl3mEnNoe<{%zW3tW%HS5LpKaDK%d3I2`<6@ORc>Z?5h z9qogWLcAkycHinzK?EJ>ZHq^aepdfSlJ%5en=NSR&f!wlZ?2Rf&337@8!(%kUp-lU zFF-C~OgwpgaWCK2zIdYzL|@|QtRIXZcfF=;kwWptZ-!r-thtE#P`t&7*OGiFPfBlxQ^ z%GC9HG}I3;kIs}yqZAM#l+B*n^5ml{OAAzfdSQJsn4A)z6rm6MZvmc3mX>5*%RF~M z!Wmry5Y%Q?XS*x_W{b(IB}}t|mR%ag!mEWNKof2D57Q-n=Gb{xIAeJ!*iyC3Z0sV- z$U}BOwgmVoS3DN}$$;WEAlImU+MK31_Tc@ShybfR!u+{ZTB@qD6p`r$pS8Wg)%! z*g4afsTs|RgpUWwca9;kR)9=`#MNGAp=f*InMLm`W1Y&b>A8zFpccT@HB3VoC9i8e z0GE*Dnt64Nb`kewX|2oor_<7Vb4Z`Q! zmhWAgZ8MkT=cjE6tX2|V_unhQ#x)kklB3rURu`|mD8&DOxSRPs$(=ENoV1UE)y)1P z$^OgfjP)rfvy~`3UsA=AH5ex|Ibz#)<+qk{4GKNT|Hs!m2S*lf>)$i6C+gU?ZM$RJ zwllGvOl;e>ZJQHgVmtHZ;J$TE)$iV_uCDI?y1MpW`&sMztj}{+tJ??BZGA97##64( z+)Uw)(-U9o#nkHl<=wBaDCd%PVwUe8Ze=Vkeo*GHz#4hj^-{gBpxs>(Ezo!2NSM*s z4MJm+DH!_l$yRNChA#G&EM(`4`?stDOL8n%zaRke=DFg0tgqvBx^20*cWgqj{d4%du@%Fo;T5ehJ zE4m~p;sIW8-~JqcSHus%JGigPHM@2Rtgk=-VLT%EIzQ{UuatQvE1NRo;gHBw zX(6SwyF{i7Gujok)WC8ZD=H&m=y-bg!T~2gY8gWWnrwZ$OnFG*Nnawi2eDD{{l1|P zH2#3nV#(xMGG~)_`zj3*D6whsdh*^pXCxk@&t_jqC!*t#(F{$x>x-NCP_vHObb)r! z6%?b*371s2^cVLSO>P0TEM<*0=k6>V%n!H+bJ3_1 z)_bHYL2Mx}0z}+BX2EmpOz(n*1$#v9DaiQ^s{3`uoD&4+`Sxgz&3us#`k%P-DulNf zRX)?kjMn6ub>Ow2IVC#%bc56so_rKax=IQjZlWf3ZH`)^hrEEKL&w7=K+;owOF(@M z&yma5$Gq6W@uZJKJ6%1&uN15tca}73;&}q&b_D`J*Y{XO!ZG{>ADN zN8_^gFdqV;rSpwg+`s~}weE>OlDROrH?*&`NCXTksBWrRx02>vjtlXSVX2i1Lw5 zO?wq#*oiv_H&K>rzkY1htcI}K3Db#c06u% zes+U*GP$2jmNf*cG|$a`D`?lqGg>q|v{0kXelk35>H>67&nG+7oio1Zk_h^%QO_B#~lJn`+fW4T_yAHdZfhZi3JG28G5-2moS|^qiX2yGyjt!NHHQpX9Rbpqyy?)IQnjpJofV2ad5H`pl+r&et zsr~{!4qT)(R58$Jch$s)u=R{(P#BU zt2*bbG&-&g=8d&E2fweqOBAEekJX_FDE$pg^2roZRrW+kRvI|Yq*zZs|3(CCzKaGn z?;ECMW#PoItxdB5+g}*)q0ddQ$ZK+Ax}?@Vu=>x5OrFlv2j~E8^GEITAw0uU>3)zU z!9&celAeiTqUhE6*zbR}J7$GFQmbw)$_?)t_aJ?D%y& z=neP(u&^6hTbS57)Bl(1`WL1{*ud7v#QJ|Gkx6PcN+@cmK9@%(35P=FA|is46)F;b zr4LmBP$10;+o)i_&rBOalBR4|t>ynp^|X8lnf;N8TyQPEAm?8Ay;#QU)}SE_2ZLY# zbon)t^tg1Ic5=I$@$LEezJsGXJQtz?E;%`t8fzdZ2o(uqyW1=zhi0U1IRH-c^{4<~ zR=`~DWw&m|?)nFW{$p$j{(C1JP94E%VLyV2fYABF)js${-BHEHTb9<- zFARt&hdGUKo^2)TwsPKIs6;|W^VD38<~#xmaD+h+cFoC#8=r&)(sw|_Q3r+r6LB}1 zSU2t^MgbJJy#y-N4YoByNI&Aafp?bSsmjZXFe>9kIN4|3L~aYE7}Zg%>-ILM5e%zA zZm*zPRbSyZCXIFHurFrqNAqL{Q$Kqb-lD}-=Gn{3H7v^G@wIl$9;d6}<`w^zHcnvJ zcvLOBD|~g(!1{;s!+KkAXSuT%%R1F(lZfRfAAao$EK_-Dl>%L!&NHm?VW$!MhoAQm zVQo*<8i4L583p=jAFL6#Vj=o974d}{Y$3@_ayJoyqmw>^m>C0x`<@NqX_kk4OT~$f zpR>+z=#I<9mRP~4Ss-%JhD!>;AC7;N2g>ZJRLWI1m38Gbnpv$?fKDQV{FM8cBV0er zZ0>}-h||ft4Lq~&EQMmx%gnpYi;T;mDst(%19alrRw7$p)s6(6C1F)^fObz?CxKuFjP6 zT zJJsU~((AmP&`E!t0LFh}o|D_1Dzu9Q$K?z${`N=9#V0p67V_!7gYYJlV0kRm6CQt$ ze*BHpo&wh+b}-|7gkGz5PjfJIM&^6%1a)^8b^|MM8_6+9?{U*%#rXbgNah!BXrBGe zQ+kvX6O;+!Wl$R!Y9B1dMd31`y>+le(0K%j(tu%v^e%iT$8r@nruGp3JKcI zWILC*3qH8K&?{8Joca!Z{YYe>OE3i^wWCi+Sb^Ss`4w??!L~z}c;USAKXwB#B=yBo~frMW5GF z%s(-elFownrDOcQk5%l2F~JvAEmLoV9j^H)QlCIqah1*^xf#gs*N;!shrj#Hck^2w zwSFG#Lh23I0av%>vTQNhdxGhOd0|#R-TDhw8}3kw{lHzfWH87WvrsU_tO3cVLSfh| z$A=xojv-47PkHvox2YKM{eQL6|5>{KyQsGTvH3*4=&@(8|2xe1pGDpAU$i9;`hP6} zn;8E$F(pgoOm#yH@pGAdtXWEv{1+QZpFjqdk-Stc%b_a4tTt3)>in?e`gpx1n2>AG zBsBe;nZ*p{w4|pjKEaQqg|#I4C|dS1-}B3JlkOK&7UrKHM>W3RWcCSysnsR-P%3Xv z5ptHF8>dU`UYyy3JzHmrAT6wS@`9#N=U3xzaP?YDc;Xcf_F|&0OwJu|ATjyJ-DwI2 z-Q-AklCGl&KRXRr;6f&cyIm{Gl1mLPfK5rk#V^}iO}u{JGM7!lTf0OW0G}}*V5NP? zQ$7AE+F)sAJ3!c#cGq&31*aw3JpLAPIZcZ!X1Lu5bc-`!MweRPsnjYrI%zT*;8aKn zPwgQbUE-Z;hPSF-SYD+Qwr)~o3;fQbeSzFE87DZ zE>6M$D40hUlzb{>*t}eW4e4k@l>14H%D+sLP078h0I&N9#h*d_P)hld0+-@wWMGl0 z>6wS^vO)rY=4Y%tT)(Xr9{@e>d6oP)pTIx(DYb=XF{(1K^;oXX2Q&CtOE1T{DPE&C zlhmYjS4}BDq&YAb?UKMf_uJMoexLFgho2f_Pz8MD*%?r%Nn<%xU^DfNOc1P~Mpa}fy0PLf;5-+|S2{oW6ftDr|FKQ0(QVWHq zyfu#*A{5>fG94-g?1>z$gb4fJjh>>fpxPhYT^!-`7)@v6vj(>1~XUcoe64e1j0;!kd zqJG;6mEk*7I7~us>manKM0ZFA-#hXJaii4BjgrV+59BPRLniSF<9F^IURZrnFF}1} zk%J{=4E0J->wsRejsSS*S{hpyKlp5-?eA=&`Yr7N@UXRU_O&9At2F-J4+ymule4&x zo)Lv%$Hshr$qUJhHHlb|S@IRq_gLat3~PSH_w7reU$7lRTM4cz^RWCrN?|c{W|B5a zR2L0kffC9IO&;@4sz$gzZ^y;hBWDlrdP^_lbexJzpwbS$Cb&&@5W=Z$sf~Vv zDD{p*&%Vu{VeI2OJsqPaK(lEaUYN#!UYpZZtNm5T z_HSaHn*Xx!|7Sh=?@CqXE61kvWma(dlA!$mmto=muT+9A&UXL)@@3=yA6q};zovg# z%3HE1f~cRxI_=Fmc>xjm5=r?*?=%$Qj94i1`az41gu4M9YZt2s)0fE?&2#7sx+lTi z;o;G9u=u^9OxYSRmX*NMq3kqHr|GAxo;7^_9&gB6|7aFP3iG<$p$j;f&9VG2Q4~@X zX|iNYGA?aE>s$R~lB2nadTFb_S?H#N@d55yb$oy9x#LdHuRJ%y$6tgcydOQj?-Ax}Qm{9lf{8X4iBBg^7zZ-;Mk$1g7!v39_yQFW zECZxe;<`(ldBuY~Hx&xgD#7T~-gpvUHWoZw>Hq(gsOBxDx_>x0pjuT(&7^CNgOWtb;7F2S0d&$_RxHR zb@WeA{A&))pO_z1{rIuhty7~58SH{e{>F4A8(_2P7gdYguaYFE*dt&XhvrYH&=`%n zG_)>#QWH8PQq(#m(t7${MBX6i62+rf?vax5DU#xksr{q`+ZNhb{OxJQ+|in(GSQYv ze8i0GZvZ0*p8^xZAUD*NHw;Gn5#uZ(&DMYl#)4o>?ShT7Ms^8i>EF@aG-H2jy$F(H z%}gZ?>4wMlO)EQsJ;s%c6swHv-v3FN{LicOzpr1_<2~Q$FVvOi7lQ2nG~E0@6U@{t z1hiLNJ}((219u4#;~69*uq0^)VoWsZe+AJHlMsVC!o^4EjCjNSz_4%+G~1RSs#jvS z*j!#~ZL5vyspmO>Tcls`jkj)7o2(%Ro4Bj(CsT|NK`fs^rYqay zY|rGYOwUWNo7WOOuv+PRv^@;nUpaCwjKLQCp3GR)&vCIDoX?H;!Kq6Odbnt0bAFr3+Db_Rk2$L|y)_~U6a6EhRHci=BC#Qfc1{B-@) z&nWP|<-0TQs}cMu`}C5q5k^$ z(hTzN=0sl8KdZt2RrT|IGJ^dqfchK$H$LGnZRlU(HE*5AZbD9PrGb|B)j+$6kKdHN ze_wBW-Irpo_B<80ucXuQCH|}&T!$)_udu%Re&4>{r|YClshJo9pNCrC2M|h7@T8C4 z!PbnT&vwvGM7fAXxo<|nKL3ot=UsQn5zvrhVOz(FjXLMrT1UafWi@&OYrH81G#4;4iZYP?n+RTx9YCq<2Au?BQb-=(CKXD z4A*Sb13h%*D7dzNwqeA$fWc=N#KB7`pXI$Tz@?II^R|@$*}refA}A_70^~+R7~(F73&V6Y88dC) zhU21~D7A1aK21iiEOFhQKB=Xo#b}lpNdg^~A5@lr!;DK1qoEnOEL_2ZMX7#ZACjms zz(jEOej5O@3+5ww^ode_e2;IZWp~og@ngJ&%DUF0> zcOj@a90W^$&g$N!_U)+ns$h;cug=836~y8up2L(Vr=H9ZtgnHPc8vxZrgB201Bsuwma`)|mc*E7zgmmQbt|Qo2D0#M zVOnx}oCZrOeGc8t#Zos(Dr%yLk&!blDpDuyl&l2@t2Hj>4V&xHqQ54b2zZiCu{?;i ztp|d=pU3FLAvn|OxQ!hdGU?7^9bKMVyt_i8lpHu(^c2E8vT(OQK;?-xvR^WvP&dP7 zSYSygBDEpYSMvm6;8^-Z8-*H~tGYb{{qs}aGE`u?Q$x(&YMj;qm7I_> zzltR@B)pSQ4>@TsVpobxloqFdb$%zoTNEjyTaIADMG`4P#vXlH<_+EQU zHB~v~j5E>&VucR0Z$ZL0%3ira+ibD+?<+Mze1csx=Jr7XmO19LeSv;3`U62WY&BC9 zkm_VdpfeX8VEFU)O9Zfk87jjc+E)q2Ssfzjs6Y%&)m`QN$VXe1R4o_dP-w}4rZ4!Xzik93aQNQ7((1VfRLs~t?8P0G;FL7ny!)D~E4 zpeH8cd4X7vN`y^u+97VqWN)g&G8{&;O^n>?k$rCrL?$<}eqodoopr2(dD%H??Fbw< zVhm(dSZ6R9r~&n_unb!N?`X-WYFJ$QX=aj~rZO_As?s~UN&6s-PDEG@p!MJ2G2ZzZ z5;1JzAUG=b2cE;|+6R$1dCDU@M2qO!Z!!gRVu}|B8Fe;^e}bi}CX|3T|L#OAv~ny1 zOYw_^%RkPX&vyWj!qilex6!ln^GM>J^ zbF1d;-5lB^mnFbTl{|XZK1m5p9k`~p_<<#x*69TuT1aiI!eu)6HhI@fwUzqXm5f#S z!!+q6?O-CJIP!vIpJEu!niD zCiA{Z_F?ZKUq=t$Mqn9>lWce1vwA)Oc!-kl*l!7SB19O?$tWd@1xj6ud!lh;Y%j4* zBU#hdVP2Ks)u2kZtI@qyoP=c~{%Ur~%O105!y|WP3qEA#q73GJQWqpt*5q z52ki{Y5!Ooju4@5qN@}YZja-}X;qr4ONb|CzXQL=XpEM7EZ3KtIAm%1`Wc~pmd~uq zS2b*^>=Ux~=&E*GuQKFtvx5IXpMdOAVQw{n0l-Hqm0Fu;_Ya3i zU7@l`I@~3;b|_3^t4+k1Jj&QR^dc#wMkW<8}U>!WFgp49iWyL%UX-sqZA+$+{NM?A607H#TnzU7cjD+lbZ9>Iw3X@5+7-HqL&Zss>&@Q?PW4CSn>T$toi2evHgn0Y zcQ5v}h5O%(Rbd|U=OJ+G;AG9C2A6#x-Vkq9*m(zfEE89f3_Gb!GmY=Jt zkJAP-`ocyFaF-_upC3F%necISE5aEzJNiaW8XZqCk4>IMEsqnauA6l_gjdi>1eF%Jf8`nrUy(9MMeAyAdLEqn0-qV?MO02lD#9myI`d64Fd;=LT2xGa3?i{eL zpxN)Zlz+6wDS*tlG*VXWD{CCxmRx6SQZ&7zwY(ho+cMOar4IXVZNux%g!Y!az88fI z!*63cw;IIF)QZX3YQ=9E4A}e1-{6kHkxl=#aJDJNu`%>{@OhvNcIp!clXF z=22NBfkog}HN5ea4OMhY(FvX^!%es3(V~yPCKuawdYt&;Bp$;B(hcavXd)ejKQyI`2OG!Md)WofH1m%ol2g^yr&t4pq^W8;_x_ z{N`Vi@QNMu$sS&B$DH<+{;eyD(mkPg?z#B_iZf(I1MibMuRg+8q=V!1#F`>Zr+SJYm46w#^wG>*haR}JC=!-rkkK|ROffxR9r6o2HZErVNv*5)!n zMZsI_a2WU^M1gRKpdw|MQ?7T|m(%Ms;cjF2ku)YvUb6>qA6r*TL}Re?oEopr(4Ho!Idq6&n4wlnu4{pu_H~iHBmT$M!+*BJ z|J^9tbSz)per-J%emT4-|F1#MzZ+#)683+Mbc$4Ll(1D$eQYJ_NoYt#VH%fRH;P$; zgv|4nu|x=pA|Ps^6@Qm+ThkdB=*@4zFFCwJe}4BB&5B!p?Zf2fRMPW_-*3wR&LInN znUZ-@xC*m2A)M9&J$DI`HH^ec(!~_NX&ZeTW%Sn7)t2 zI&fr4sBFfewuno8d@D6{T?NUx#S(OJta@|YlT?Ad$5j3DSNhOW z2lz;RtIkv`z8cn2(xcErOz&Tlq`aPUCvUf;l>wH`KWNi}g3Hw0LQi9=`PPfpm+ad0 z%=N}xuXKQNSHuJENlAE1Et-x31cU9(3f38o1kEXN&Pl#S~-; z23NuqDz1TW_VVbBJ{`Tt!BrU8U5Hl+-Qy8%YrHN8w5M#W+>s8cyNr(@<|taC3JbybkRRnbA$+OWT-_M{ag8&kuH{oL$=|R=Gh- zU)WUR$h{YCqg~V2FM|sfr00@rN=L z32i`m(_b6&7O5{Ocsm)>{eYgsKOqTVzK=@aGwj(_*=y<@W|-c?LA0M|f^EHX#v;sy z;Jd%ZwGa=Zli?9NR~zgZ86%g6@H{+IBKi621L+((UW7<)4!y6dSb%h%I5>8Weog%Q zBeOrc5RPYv@wr>n@Mo|4x!i$~FZgOmMt8Q6RxfEG^w{AJ8#a&@xv>s$orO~R!9BS* z(|wUmofV1(4=ZXt3jAEL-ijEERh&8kMRt_NuvYkM&4yD*3Z z0)Aj1gNX5n2^0|6I8dQ|{$L;^D(`+&r2$l>dyvXEpyi64?A#se7am=@cfvJlTOZyZ zuR0$`^ApE(-+JM%6>*&h5}Ilek|lUV_h`beem&ELJCRH$JmZC5CA13cSs?Qh+z2Dj z4DOD&%z~kx=H$dZbB0TkWRu>&BKMHo;DjGbzDEq!NOlVBu{%85;P{jXMxI6_jy@+F zcp6nV=obZ5^gV(WGp9I5pIS`haL2LOz_yT7wRv!JqHgi$3Z|SIcb;e3$8ucWK=0D2 z7h~{|PF7wK=*;*V4F|+cz9wf4Mw>3XgwyvBZpN}ym>hKvnk4ZE9;H2e6qIO2wZV+YYAmX{&BWxEqr6M=No! zr4SW|rzSmBOislZIqa}c>xk39NiGd+8`8=BRvx-ek0?RLHjdbC3qbW*Ybdk0_5?a4 z4U3)_SY2V%nE`|!6??qsFwO`a&Tl%aj+uIIq8<%kc8iW<{Lmg}216q=24Ql-SPigU zm5Y|**Q_XIWHO7o8mcq%n#?ze7z0_&;$5X{e3}k}Uq1pFoC9{6L*>#8v-JfVtCMQD z>Ac+5{&G{bIx`033mp8QsJ*YH8JOoATz+e)W>9>CLm2=aFeBE(A&Yd2L-$@uO{<$c zlvo|i=Fn(|k7Er~9lmw5l22M?DiVD7m4K{_Q5nUNn3aKcS;%MuOGO!Dv8oheHTQSd zxQXA&0JE)HhLzUcd$QMXXE*%9VwYJI4Vbm+SY+aX>yT7234Ksm%f?QyqU->$nKF_- zGl$K>q%5kCLKp`uU>~+cNSjkv~|(Q1-4-Xss^%jK^{uJ?2q1aC9c>BUFJG-_QqKLCN$2ZmS}kP>VW! z`q?M;^D3f#4-Zc~|`l#9A+z*DDPfg;3H4>PNbo-E5(XH+lB1wRU}IBPBgC#S#&TW;@?W)V zB(sVUQ_YT&amLu0I@4Hblo}Rb^d>J(fjLWF%QcM1ZQ652r-YQXDwu|a7+5;GO0i;5enTQZ@!WQYT#~OzyIllE zNV#5KOFSjMw~VHpb~fD#m?EORjZW@l5^I2LKtr??5$Eawtd8PRE{AITj{hurHT)!M4_i?$MpSC*0sb+?|?jdi5sBJGCoD=8!( z8}9hslgZR}T^*PsDXza))b>8(A2TkurZ~D1TY89Aq`i4X?+Z80$lc)&#WEK2cVc(g zsae8Z|G1#YF0+CU;}`p6Y^vLlubkLJA)M7hHlNkvv7Ok%YgY`IN}SY!|8!XugOx<) zmbi~QA$Q>2%pHJ=`csRdn>P?`uQYpeUUg5p)~Ys%p`mp{;*zAZBz{A7`OC&V`}zdJ z?etozRU`Dfq7Q$kSg7E<1Nzj%?55ai;ec(cXsB9W6&GBeF79Jrg$u_w$eWL{XCtuR z_-)hzp{hU4R==I)Vt?Zz6k8tFV`Oq?$dBk-Mfr^7gA#KF-GNlP_N4yI6A$=3X1|FP zPQH%=F`F6V@;6|*ASu8>jw2QVR;*D&FxKE*_zt{>5h4I- z3NOlB0mp4mH;N|F==nFnv=ztlLpFF7dox%abKmxcJevSuTq_sr%ghYu0F)mTi@*rS;F{<;-VU`I@7@QNCQjMYx@GMOs*Bsc%}l*jIVKNR)dtG zwxc_Y8arC7p#LNn6w{?!bJ9fwb-_K%dv|aFR^<+YNN)H_3vr>jtSD=bgIlal%%}3TKi@W|b2S zx1ch*hD0HJ4iPT1p@w>BbNG*l(J#|v+~Zc-;$_6p)~jsK1bB}!?WkhD6QXtYiV0;@ zK5o&tqkA5^VtW06<%2FEy7AgVRvx?YqBrC#2s8Uhf3hQbk2s)0>$DZBoug(ymm#ce z7u@2YO>JEL7I*d?9KB0v@WJ)ot$H;Y;Ix!UIj9zMCV21~5kUR4yroe~Fl9~K$#pfT zceO_?tiAk9$aC1ZmuO>P;?6$fk~I0i;OMQ?mju_gJ>ax7t{qFb(t@hZEmZw&!bYSc{N>y-uFWSx8y%nxYT&vB zkH6pg$D~?%^r12!vYmSGmBTAw-!iE!Te$idpuL!fw8Co*e)%i%1lF4Jjl?b&K_dz{9rs;>Z-3pmnxAkb2cR8j zFzg)@JM5ZvMnC$X2EJ0wfORzhGrj2$J^8?X@Y)d&`RcLv3gQ*V_=vT(`d2^No8K-s zwQ`gn>5e{_$WsWEx0i2#@rCq*y<#+FXChOS%S7}uF!e7LY92in*R!BkXnutAIGRVA z%0b07>t)+nd^R^N1a%`-Fj1Ra`QEWD6o1w2%$D%;8H*Qgz8<1Ze1vB7E$kjP#}h-h zZq(GW6x+fd`K2Tnl~b!&RCh2u6YFMG)l&baHKXTy#t3a%>iMXMMheut8ELL(2aW*> z$EHdN?g9xoJ=u6UeLxBEO#$BT;2eRAzyI8#|4*^^-!f3$+Idv~=G!-4-2Xk^@1HWz z*20cn*23;THDHsvr#p@c;4koQ)tFiG&U`(QPr_o|ntj#=mg1LYdLedutK|B5GpQ&R zS%xIj#idL;^9ETJk5_J~JfJ)vVjV^lwJ6wB39G1EVURo^;_B%weB9S3o0+*|?R?r6 zng8YXqRs4bKl3;5)27q(6!Txszo>rH*Y(&dJMKvK+~W?c+XDw(GTS2ud}L1@H$Gl| zZ9kUh(@`d~oOcUs!#Jk#e=vE3jZw14g{FB$jS|&#n4!qb8+04ek zir*(Zgz7^C0r`V40{An9RVEJ!qUj!lehQMD?)3gg5V@puz<`v@3Ys|AbxysC)0FDZ zFR`L9!>Bt)(Yx5OxS+ft@XD!G8xbYqaQ96AVzQuvXF^gUlu@aH#Z^kt(u_eCPI@@A z>3kDu7g|RFHZCy|m81gWOhOY5q!gJgK5^{eTUr8(hjzS&ih&5KnZ(6CnlTF|$+ocT z@_LW#ytp97Qe4#%ctz%4Y;Hemuwn2`Js)A_6_{;a8&l_}BFZtez)(GwFVN&S^Wf(l z=-`n1FGZ{cVnU1jDIOLfn!-@GXomow&D@dENWn3S%oTbUzxEVm$f0PRvM0>Pmlnw} zB~&#|U4iV%lw?=Q`{Tcm<5u-SI3P=6vEEcy#KWeS-x!k!mNP0)kc-Hrz zCxwp<=j%pJ_h^>y;FRYgE+?f`ip*SSxehKqd)tv!?IB_C5ZIoTzvL?6hQ(H^!Wj<(g{*D%0qju zpA=~p1Ye?froW3>BjHafRm}F$vFrZeaV1Gp&vAh~-Eu4SP5Y3j9qJM?hHwt~@LdPA`;j4-pgxl#;9e?koLA z%ON9dWgiX6ZWx!St7?0vKUVY|Oc33NYR~Ms%}-ipC0goFEj?oN_<&*~EnjBXT=D$0 zKtg2~%O7QJmSN=fISvAL1f@&n(uG{(*;ap>57=_h%Jv!sY|F-RE8Z(FelAh%&iNo= z@LPGm%=J(bz-u;u^6?AaNM*I6m$48g{w1Bu4$LsNodwoFpX38OL zp4eAd26$Cu8Z0Ak_H!gblNC-M%U4|k`&M0H?~nQD!R_$k3n@D^YSSDZ=$ zU*xDLYW+G9>^sLzQ)&T;T+kTzjZ>!gk|SKfiw4nAUoVRlhqp zbLwx4ptQ+u)0v|YSi9XfCn|P9otB>wVKVtrPK= z{)3J4<}F+9bJvV5#c#}75eBBx7K7H5z*L(QUfH}~SgVD24b){jG=Z;OtH3VdAab!c&M+Mot;S!oqj;8>hwx}p2F!Wd z0^TKm=_$HsB^OB)IzrRhNzl?{ypbb;rjp3;WDP9gkus(l$P++QQDkc1(H;p_n@-Xo z>1MTT{uqvW!k}h?g=~L=**e}^ZBQwnxF?3QD|CH7;bzo8qUQ+W2*=?vaiV!y5P%ldGS#7kOB=2mnt67jK+F z!h4yq|8Ne!JW+5*OM>A?nmvvX=dBhSH%dNI(+>*h8dNKKvh26 zc-lztF+&~9FsX$wDM~OsJE~&#FJ5|tH32t{|Ln#nw1g&=uoIuI$j<$>JF36f{xWkq8^*_7BYYR#YdA|@&~p~~&4 zpmi7{*JMMOgWoq%h%=-01p)@;&NL-CKXew8cehUW?2|Y_5_3u{!R5XlHYkfMtE|R5 zo-*K1iX5iGu+P|^;XOu_D&)y|{31?#QL(eJZFWjx9+y4;7*PJF{`_xcdY+sD5B;@G z<^QEj|4%CQKa{D`7meD)`QK+AVqarQlYeK^Dmfec4@0I&1KM4A3GjJk9G{Zb`72mJ zLI6sPAPp)oOmz*lAB+ezjs!7K#Y;xFzt`9_GkB;_~NH_gb3q-tkJT-KEdWV~*3M$L`$UZEt$NV8c8Vo9B8^YWoCG zy}l_&=LVcDBJmdU)+K0oJr_g%?jwCCEzB=Aj5!BEi(SeTyNOe1r(+2YZsHUnXP0yg z!i1^BKy3&TxuwHk_!tKj`qi@iWO!MtxNJ8m=B8H2n|+UUH*E%_@m+36Xr}q#09N<@ zAPtV&4wBc(7Od?>!m-qi z7p6}XdZs%P{n!z?evhiCH-61%&j_3yFMFrlnr_)Ye~+UK)6$&o#8wGu~17}PJT^F5t}+2 zpG#WZi$@90KT6YrX%4Hl)9y3Sr_kI$e$<(Otgr(H+X$++lLQm31$fL9nC4^rlfFA6Hdia{v|b8d<_)W+EN$$qM@l9gVnLnlUlpv?UOc%<0_er)n}CUz=-K`^VuXe_(wU z?|wN-SFV2?$sS26;!B*;%&so-#N^T)CuK*q+S*dls8H1xnAX~{7D)ayR!A6}KV3Uy z9$*TvNHGLdE5^@BQduWrqf-AsH>Yq`&sAhnRdh>F8J?oB;jH-vl~w}arX?9zJU3dU zE*@9@PRy}mTQWr)=gwjJSkxGY)XE%b;14yqH=^eMl;%TRC!0Qjk5dcxJ3S6l#|V>; zojqB+fxab*yGCk>+I=Gph<~A)21eAy z!s*?rWU_uB296()%8$XW#75wf=GekuC3Z-Z)r$@#>e1{Bty1fl+(3;Q`#j0k6ZJV< z2kMzEq7WL+%e8EX3o0W1gYD1iw{mu~%w00*_k_5jeZA+Fn3bE55O$Y$$iIM8*6N+v zIsZEs>;7OaI)R#)7W=puw+T~b?C+fI>TD@HME;Zoq(1%&BL^uyc1(5(K7__b3kLeI zfj>86gF96U2SWLDRz>T`q@44@6?Hg__Y;9>6aaN5*GFJ?UcrPoHVp=TwD!$7E2AJf zpjB}s^ae@H$Ka4DP$9rGn2t&`srR1eMF9X2mB@Nz3sgQc%rBiAB4N}(X=+a;`U6Hr zHfMPyaR}MowYR7bF-9tTWqZPYQs=F>_exTtun-xeqE2hC`lPCn$@07)j`g~SBuN`s zy|@2^t<-CgAO#4NSsG$ds0mMSX4ILS6%B;*e>hp33$_JLE)I?5E1;Kzi2*0)hpZXJ z(SfTa;ikCkQ0RInI*s}{bg}>^aI~Jl5fzj>=UucrNpw#Zhjco$u!S_rd9;(&`e-(^ zRD~T6LtRho*!te{8{UCQvw}oo5bBYSHEMgsybU93<`%47dq2fV+uI|< zy4IILQh%mH1J!q?AJQu_veRQ~5>nA7E<^=jI^Jep7@kSm4f*bJ40WTVlc&DX zDEV8{ny$A@`#3fS1#-g7q+Q&yH&iU`O!iqA&D0Qd4M;g(H(3;Cu>ki-P#<=f%}s$e z!XvuEByG|=sM2WxF9Nq|%3be)x4b4%wDnXYt|Ggr^^{)rJ_GsVJHObZ;Zy^np@zs7 z`NIl)#Fz_*;)h6JFa;-Am8(sb7f4Y=xQ=7UE=P1&$WA3S zUpN!?Wk@%^iUVgCL!g6NmKOxFb_nAxM<-o;MeJXy5cvZn;nL)UFyYd;1j%Zn)C~`q zrY>3@Jyw58;!^{l2x_Oh7z!9r%ct-0}k2pX{1oK9dtI30hGWU z@)Q#^ik09CUo1&-L<?fzhg#vhot#T-!EHIzV56#uqzr9w|~p;U-KByF+5l^CJD z*6pO9KDgZ&=f2hL#_@2I(&bC&+MssE?aM@D!Ij>0l~R%yi&88GB$AnT=J0c?9o{|t z(2mPJ+)eLPksZkJ2y38*A03yph#}%!<;ooJFZd>)k))E@B;eaZ?!_P@zMunQzS%+) znpWyu*7RLx3{u)_42KT-{E@%=?VirXUl=E@s`#uypfA^B(wjnRYhNP^IOfHU+?E-p zxJnz-V&-3_9fZ&ae}YmJK%g3P2Su9g8}T@@PJ04F+mmJ;QB@AGO1Ytn(i9kZCd!)c z+mKFsYg7J}r2M+2Wck!QnM~Wh(R?N2}ZjAv1B>dkdtp01?A!cCoyT%VfIAGhN+PFnJ&H30ps7QKx--8RSkP8%UWkScI#Pt@g2CpqOunUa@`BS;tT9p zc-+ML?$AK46*dYUFBh*FJ+=GEYxVMcn0)1S=aF(|8K83(?eO_Zf~PAQ-hR3P!IvKh zLwy>+g3nY)Jigd7_un@)?k56(h{3iYon?w1t^kh+xwblmy#XYU4oHM64UJa%BnA&QssAL zKqc~JCQRpLREHQ{xz8d4jaEHC4$(zp@S#gnO>z4fjZ_UodN7y zt+eurey74xBlO8h7FV$e&yJ=-lAD;MS7t{RfY60oa;U0NA=)_cGg2pzgh5##G*n)8 z(kwJPKseAOIVWo0C^H#x@HSJ{o~G^}7-5+~yaXo|9%^Ne6=o&@)8-w!(RNs8vQ_e` z_0AhNDb0kdQyJNuo>(wnpcT+sw@1rjoH)XA7cITW#O={b(U^HqRV-ku=a2 zYVveN=ci#uN_(s|f@g6sGVVktE2jV+W(bR5pzBx3I%h$6vZO-Kn_i7H^c3?q6f6yitbW}cOH;NXrL%VIRpsCx(gGEz2 zAuVzTTR|=4kZ>x-i%o?C&pWy(zy3vldPGfS;Nb^B%aZS87I$p?jbe>wf%ENS$@7-` zjQTL7vnjZv4h+9!cAqy}k)xlLha1mZGE0i}2wc0V9YiO7hGlAiSwzM2_oU$3w1I`; zOTMe`kynl*O-sEewge0~($pxEUZ_^i#g6gm$&t0()0Z%{i7fA_#$+)p7b*8GMkWbI zBr$NM-!QAzD}?W$B{;5+aFk}83ptL_A9)(^7Zwz*}9PmG2XSsk(Z9uBbid&=~4gIICX+D`hk)o&_G=+BlXPQXz|DqpFL+0ErnYn^(@~2fA$LH z?Hj%;4Ch?u59Bz1hh!C5I=z3lRX6bOO5fobUwu7kvp)%O4;W}FQ479ivba7YQk*;e z)tukqYb0?<>6oP<6!Ie!&y)HJplhyA%m*xj9e&a9nK9rUIbk@Ncc3Vudn+WHaq=ud z{h(*iAcRMW=b^*C0&9^dB*bMD;Ch_NW;g6X!o=QS z4s4!9i5oG0GgeBAQ>_{`@T|bDD}!n=Tzbn1%1NY86*rfP1{cp}JCEmDkP9g|uYH$o zjBjDcNG5J(VhV1<4A#QJ)sctIvc+=3v|5OgqwIHE7=OkCbPjw|#ur)Vt!fy#BePj< zI`fX%iq7}s>%@!`qlN0W^eGX^Lo6b6%;&|0O!ZREqJjg}86Rhf-ob6U$0|=U6Ie5} zMcLao^U43ddUJtBpjS`l<>mF2y4k9rWJ+5M!%k3h$LT4?Yvdu4sv*hJmRDMMRM{k` zIOzV#E!a40BV!%5YigI?JcpbG8I+%7=@%%PBY3Se-jy1?f>kpcl_>iEoMm? z?v_ZiEVicZDnS`%r7E8##V(7ABl&s}^$kby}W{wI*fHDBd()lPxDs(k~Wc#`XNEj1GAQ3?LmjXUy)9_6%Q31;m)D1GP&(OqrCK z{8StBGD$JNxS^`=EyY{tYAe9am=!1VJC13QjY(hU+LmZ;2zm<5h&9VO zKZx_7rVQT_SsP;_NDnXTSd?x1-Q^x*6pfo)$ab+(i_?lZb{rs7xC8^+UEG+*bpG6< z&VXKF#|DINTKX8@AhoD-r&WYy^)&9X^--_j+H+n;SQ~eTWaXc7XKHo$UgZm6cd;+2 zwkfT!39jG@L0aWS!3zXmqATkKPQdxlLU%5_`or8=aQX*GYeCBrFH9Bsfmf;>5NgqQ zr&8xjmIp&dL%49MRh82Btno@rIg(Y^5cMOz*W(W+nnAQ^=NS&VkO4)gc9=zVKg~*! zR0}r6*-0GkXBnkY4nj4>6;_Bm&?9-f@F>SRR6DaHd%0F-lUO9zAu}M(vNWb>aNB)P zE~#jwUUK{H*jC>j=&(no!+oM`cZmYOo(O}#(#r0jzh!gFTxgF6Ni3LO2#PCF5Mx3q zoXNNS8lE9(&W9I}L_7uY{}ih{8M+T3-@CaZPOKUaAxck7`)7Mk(EK5suy8hblgGWm z9iT+Co%t2Gs^w_s2*z*-()E$5<)6!bd^U*Pe7GVO0Fph-J1v;mE-f49YPc3qTEeI9e+qXs+!(414joXB9`Rb&iX!-1-Qb%%e4pFGGM!*Zi->?Y%1OAL>Uy}9 zW%ioHUh-OVHk=`K%|S)17^mqDVb&PmC2!hIgii$O^-Ex3y zcc{}GMQf(_0qtp>h{j;vt8K>}xWrK#{=v9PpH7((+<(FsYv>Cpcqz@vmY6UDQv{ts zehmYUGBbuoO^pet`e=%eWMp$-6QIlh8%AYj%RSj6AP0kAj=I7E?XRa zJG0}NXM@)191+>Rj05!wrKwesW>6&`Z#h)Vd-;02g}ta-ws8l{p3nw`%myi|RYScs zNb?*S&c-?5(?v?JUl~w9!zYC#!d;Z~S5I`5i^C%bi;OZYr}I!gMArPTs^rTYgnUK{ zg?(@<{q=+pJIU`U;!D}2H$yeTFph?@E;}@>hyesY#_rY9<|Q2(9p~pt790jtyUMiMz7PzV2`ixvJXSNJ%3% z%9lh*9TD<3`#L|B58KHFG*mtWD?K4t!$a-Do;L~xacUeP^}c-m$9Ml{mHVIdZ(tFO zDAjkAM8o%%!G8rE{j2_Uv=X&31K61S%X1fU23Q%JIFS51MIuSbS`Jwd!MmBZOA%fR z@jz4|v7s?PlkFHiNX2Vse7Hqv7e|EyW0^q7=OZM9{c{!Xx;DA>A#-uMc3 z<4c}%Z_G3HIC>qb=$ON%>il*}_X?UqzTtS(?@SSxv@Y1-J|j6vy&*Y_`bEtY!exk8 z|Gb6#z$)VvmOM`EXe8;~#Z zm86OfqOJMZB+Sn2JkfE8A#%+IN~i$Nt8p#=%`#l27Z4~e=(?S zVsTHU)FF%ygox5uT_Id}3H|}*%7m$WY0sC$rf6sq=0-Arj+nu6uV|wWdLmhPGpU4I*=_9eboY@C&;P1esMOpBED^6(>Ixf2|ukIP4*eK=fC!o&U)&1KBb(oE= zDT&?6#Qbf;_i($)#!y$u;X`vmkF634uTP9?-Y*kl%!O5W5)PNUth^}Y>eVDD1lb9*ENNKlCuX56OS&Hvg1h;YXOn=LRr#kww2tQhrc=Xi$E{ zdXvn@3~tE{jLDh2I)>?{oWPP#maq@b=}FutOWXdsPm!f6>7gp>Dej3ou^s$tmjA+S z|8kYJAoWEsJDt_&ubXg!FZw0N^wDtaLm2%Lk?@)HDUbA z$d#xw+(_)9^HIQ^dJ>&Oquw_0zpExDnOa6VWe*>iY-8J04x^ZC9d1px_Wo9N%Isap zV)?hGZV=o>A+>M)D6_`fN0phbJ*rybDHITY<{~Z^ z5NkE>hj&Md`xA)H@s{%*C@&z(-R7-A$V z85OSWs9_&*TE@|1f`=h5AQX-f{kV9IUa&j+<8me-1Wmf%&bSK?u~=o+mfr0o{R4L2`#7qT$U!CD^VX;L?j zJe}Ds7ocD}jHwV7ZfA7q;76HlD&1Wk9wPqajT_Kq$nO0WK~xv#4O>2Kw}^`y&8YHQ z<}mv0J11I>gy>VB0bv0N5~4-)dVuS*!vJW%t>xx+Ea1g>IvHE-kNNN9XPsf;wN?Q* z55+$BkTOFTyxhgyyx?dd?&1xk%?ODzx|ngv@%15^b|# zWVC4u9>7I%?XxsYOK}AZb0-+>x9;<o-dmB*B4z}fxVa|c zis22*!E!ur0*tZL*D;^S=Hc_xgjJ`%`)$z;n4EbkVq>6@B|jQAXfgd{Vu6KOCucbQ zmQN>1#yDMJsnX`$nxL!kNFg|td*IdhccbHBkMa)gSz0iWWbYBwIVrwvA^C0+?R z;@CCfe0MlPTzjvEqp1$m%e<7qfG+99rn>7BTF>vZifUqgaIkTQZYs?#| zcTC^Ud#1>0!CitU>dufSs(TdPs%yS(%xhUS4-dtdz@P~FDKT(5#N{R(3cOn`ki=$bEgN-BBv3x~3JxXkq4r5ks*fhSiVi z69|lePH|xzDDp#8$CW`Uu1QgJRJ=pPFmcpGh}z5oC~-IGT?%6O4rT}Ep8|+UsCY-~ zs7&S?gZ8l!t@^(S3?wp@cM@aUPRpB;IdG=^)}q_srrCBJ!0}Vugm#~9vmm~pwg+uHRnpg7}2x2&z0f30Gj`BNhl{DBgc`tL?sF{PxHm#*Pxjo?o}S1cMjyvR1nD z4!cr&4tOV|aA*(`r_8?&c_B`H*^R)p&Twr6^)EHX#UPp}F%9wnd(5X6Yh3QnK>eif zfidLY$%mG<^zL%2kdKT_Rn={nOL!Ix!ru$|p`?yK3(Fd>QkWvx{ll6Eb4g|V=aFAi zwYda7{^FidIt8${!J@ol3JQ(|c9`XNZvCLL9n~=rAQ%jINn%#9jjOS)7s z%VgQ=6MV7OQgW`QyuT7^$}7$*m0NK`DHE#weLuum3Vg&qI>)rwL!jCzXtsn4Pifff&w-KG0m3Q`lf5EarjD9NXz#`)z5vDOd5DKWR`0};$e5J2_! zmaa$U`Ddp-3`Mdb^7&QDY=X2ft1xOYMgWw$QF21gJUQ#taq-1({H&Nt{E1O@?G@Mz zU7kxv1ZI;*VTH;AOONU`rUyo7IUncD+RK0jFtIOX#E6#2)0ep`FgTY33F_R`Nb+PV zGH*k(HTz%#O=WP$=dvW{HBoQ#*Z2O)-I)zsAwhVH_DVe;hG*WLNLUW9Hg=oE2b9H> z?Wd)Cp#e8E{4_PQDq@Hl9E3*_o46f3crljBK{;?ANzZkA(7iC$J%)-IaB4k>T9tQ= zEWgQh@j$YtIl>;F(tEkEHNvx=l=KlImt(4$*4jE;lp{k9kJ-!IrloPcjBvH+w_pO6 zPS#(G8#C5%shV5fq~z0dh=sKfqhqD%<-B)#*GhEUh>kdXicdcl#RXw0Fip`KEUwFj zSDm9dS0a{_L73dH+#8?C3+|s6%7P^%I%i@o6){7sq;V|q5(05MNp-8T#kg6{xDzF7 z9wa{vjcwXk&q}!hW!vV=(P)dCcvnV9f2Z*@bmc`3u`X!*2O>Yxs$cl*@5fo<-sG&ttVfF?zR?JTSmJM*uKDXR! z>1YQyhRIR9qvR+bgQ7&<^T<%$J1YRGn1Rd`3>%8G`t-h&2p5&Xt@kEHo0uZ;Q+wA$ z4n~vRTtC$tNF&yUFX&jX;LIYiE{*c=Cr`L2yn9}Mtv6LcnET+8(&p67T zX8x@kPuG~9m0J515mp*XHGqyQhMKQWTFe*;O%cu+K6?M|;t(Dqe3u#5lwC-QvEPqy zVPE+?+mL(aku5cqE>1RsmJzXduiF^z?0Z?*F_SX0dEdQokdyG!N2Dc__y{G5iC0i? z8--HZ?^VrQ_@k%%fE#+75Sk6mw+7&t&|(IS1e!PXa94KT+o$bfe8Mt-dw#) z7@sECpBq3X(mO4Xa_DF56)Dw~J-q{Jk3k7&7&tUT zd-dPFroD-syiICh`3?y!|GY<>Dh!_--qRSgGHhMNX2pzlZaTADW#}4V0_}@K{7kgI zN(rd^7Z*k^EQYH4Y}0JI8OJCzmM}6==u1* zz}HnNioHj5WGJ;KIIM4;5A-`6*?LF44QFTA#pVGRO~rK&km~IDoZ`_its*ME3t+B@ zzJvlQaH-`p^x)Lgy^*k|P@(z(?P1w0UcVywevwOSW&kz9Qf(ZmLJyW410qZw{k!#F z>QLN&Ff;+euT55e2Dd;Q0siPyLr-~}DP^+1V$sjAZIf7|6K&`-@{6*g%}kcmbV4Cn z_mG7>0!TJ+A1HZI(;1W#Xi`PqI2M6FbOgNEA!3C7f)kwgBP<6OCab0iaMW7H3~YkS z;En;^P%?{n(V>b~CQ*n17Y_CfZy;qQ9;b~r-r!QzfeBn_xYHFK2M8$Vp55rg%g!3+ z6o_(3(&@z=OOZg3X4$9GPN}=oFsHc%qxnmLW{p7^;3=sk2XKc{U(Zmg$3M()J}1jh z2Pe9_Q#GrF38-xDT+%dlc9fgMw+BvZ?rdHO47ksC6%c~+k4JWcX!J`$c#BtV7NQgOc!%jfeGaysXCK^yGU(<2=Vd@1xaSX=zQhxUQ4EO)C z?p9-B;%HWTA?SzFQyE8Y%-zMgs7%k-0ZkUjy@gf=Q$ibu0%O3Eut%K)M_FIoO1NgG67HUwAHVepqPg@d}| zXGz(}X2R_&pxKb}414D|144S+-$J(-_g*S_5~SYB6cTj`JK?ycCNz_B_DcQ-8AQ7O zJ~JR%TnUHWe=t0uag1qIDx*o)ZjTDh>aW=-)Am*V7hhE|zH!}Ls%3Y@&8dd@u=|5J zS(V>03MHOwr0-J6ly zh+M3*PdIW7F;Dl893SMR7cSYJAfR`bH3H3RAAA^5iMjMW%}5b#eR)mzp$6*>&C&WB zS93m?J+`p!Lx=D_Cept{D2*mZ@@CJ9H{GlWMwR6UQ8W`{l>)F-r3y;QeUznCCFJ1q zpy&6ozwYuHty)vyK9f#%^dODpQcd*$rVQY^A^@I(k#+%(;sm~AC1aT%7!ITN9e_z2 zHkE*RzFKm*9-XWto`{n{l!ZYjNdeez#~!?uB@1eOzDDdQnW&KKw4B zE{JjU&w=e>mo`hw__owCA*Te2?k|7wIi$adh`G-m*A5X`Qg>u7(&z&5Q^g?(JvneS zoVMuNXBRcn!dFS1K-V}x0vMkz?dm=&jr{orPg{~}uGyK@@#tmFGrQfGK_wpiRI*P5 zl{-RveYQV1DA1&wi1` zdE?&mKYx+x6n~)-)9o1!C^$xWY5%Xc`A;9?{~V6HZ-_esr&qtvw~Iva?QL@WKO7E0 z83lQgf3RZz2SO=lN%C)R^M8NnC&lah0v1FG-fk$XFaThZKCdXDYWx4 zGP=4ZxEmewd}Xp;rXn;iOOziu{QRMBbYHr4Z&gRV_=ng+BhNxNgE27oER~$*D>$L) zmpEfYC4U{Rw2z*DtUNY0oNH9Q3Tkr=v5bVPDB^9GZHbXz?AeQKV3@2`pC>y^GQ!Sw zQ81XI+!*5ob3l@Mz>D~da0TuzhN9>Nn!=P3KJ-is3AF(RvGtt;G+1CxUKU^e)n~@n zWd#4mqa}v*AR|ouVH$Qn3)l+k5e;JawctL65EOE%r~$OpQoH(AdZX zgev(n<;D+g|0?NtyKK3-_&7lAg=`1r2JQg1_VW_* zQY=?QOz)>rIwVRG&4ZGS`ISK7_tT$)-kD1&c!zv!>-1Sr!+#zh1`>A46VChzT+Q)? zq+i)olA}q?Z1g0&Z7Qcom(ew_380&_{f(7=>!qtBS(hwG0gR>DRR`}5+hK0WAC;cJ)Sej z)w?zzR+O=_Ck0z|x)nUUwr_*(QQB`d7j*5(!f`wM@h_|JpGy9x#>T%#*6+TxP5joF z?!RgLZ_J6Ujia;m|4&?wlJAiH$%v2%o5BoE2m*mrnA=XolIkBFE+QmE1V!=gJ6#6{ zo+G!y#~1Anzf*u98z}TM)DVAeV(R?zZTJk^7aE7j3DX7B9p)|YQNoQDG7H->2^)L2 z>o(9zTWed{;&s4IK)*mNqs<}ErmPSB5Klz%7+%g6eNWVm*lN`54?s&7soB(dzp#Bt zOth(D^kZ{1UKC@jeNPr82yT%%MT{Ez8EINA*S`hZVv4|ds7A!z$?YW=XEGLtLTe{=AKGqNc#frYn&;!TWOm z^JM=i+W*OU|NULsR|PgA__kaX9e{wS{~vPxUk=NE%oYuLLV7AMK76%3b&qC9>k2VR z#u~sP5lH(IT>kJw@CRv#1Bn&2mk2gCWy)bTm$e7ZfH%y<(L_{!nWk-NOT>^kziYWq$;zGU*eN+8b$_AMAtQ|8+S z?>T~2=^hzByA`}1)YX-{L4v}fP?!1>hC+i3dc=usDsP}#f}hE*|vX78I@qBb|JyR!B1r~ zXx3G!GHa^s>RV=*<7MYiP}TRh702U?iEY7D+7-8F$K&5P)va;c>s#!yYiM2XgczT=?aEs%8rZ;_q~^8pu68@xRDG$yCzMY(2wnLZh(FMUp-`bvVg*|$}=J_G*5{#*zC zHXpr~m4JU%GKr`Gn7JiS_qUyrze$ zE&}5(Sm>dAh6nvB+VO(=6z_WXRm4}kMg+xIx`qVJF(mK>7W+{mAfGG0lScp#36Z3z zD|MhWCSC?C1xTbSR7M0XP*#YX5rs6ETZCu5!rOfcQ&b4nP>9Y#D^Rh=7&P*{4u>c; ztc2G^-M2H0xG7KFK}H_@j(wy^mHxAfB7GAsMa0OeCyhKmNeRw}e^{=}D2yrywiX{; zBx#a?-CZf>??%f;JBs*DUf=x)KK7$#9^h8NKH>PC|WHKlD10XM7rl06xrydPUDZ{wUmmkLTX#Z#LOv+kgql00vAVel_b5@+L(8k! z=~f=_OZez?=`n$=k$nNVlNB3Fiwk>AZILx^BY7R+IB88&D}#wetfh&a#@gK0R=qy2 zq0C5F%fr&l(u$j_d@@Bw1gZ@ zB9=rh9A1_V7r&aVwVoz>c68|>ErE{gPzPIx(l241GB-o+aMhaTDl#aB+G=`C zDKUj7c2Rc>WftebHw&b^C~V@gZe|OZPF7r1*h;;?P3gc6?B<{juvm})09!0YdbOX3 zKNhUYF$8(DNPAx()nW!jNIR`^(rs|oqvlGbn?x*TGHI7^f82{Iammu`BK9R-s40-y z^)n2m!Ze2RsE5sB=sgUH&`KsyP>XZW8{j=`Amqzx36Y%y5EHmXWb&PylRFRXqjyKbHkNvB&z zG847fG+9Z0{G=NPl4k31z8?b5H}~w*$*61P%{(72BHw81!Y}dE;D`$)*EFg?j#F-> z^lv6dTWVTIbqy%|0gNF^yp9$lPWxDpm0rt&B!hUP>AENEEC}uAO2wy}y1u3%NW`tBR=+XV2XE|nLwwPq!got)^X~BJ< zDHwMYn*n%0BLS!o*BUA3k}#9Y6p6A{7i&$n-X&<_HGRW%SdCEWL>_J~88E*jXf~K; zS{O5rVXPyAN14N1gYqkc!XOSNW2DO2 z-3vvXuqy&{M1C0mnCVKOB;X`8N>XmqqClH)_oy{Gt4>fC0TYd3>OKxbDM&4pU2#4o zq%e0w7_&o0#8Dz+Fw4|l-=$z%T|k~_UcEGGObb>DP;mLxpkrjEl(`WvU#^C_NW~3{ zPWme>p**!LT%$ZSiVP+U110JnX+eH27f`>Okf*QSwm~7lyu6a0My38u1jLd;1)Zh4 zictyrZgljlb6!W-gikNGtv8aZt6dYdGR2@ zA5U;d9H`lV#0q$IAFU2c;4cD9-+q zgeb$ujpOmc7thdusbdxeeVb}t>n&aUVhLaB5kup z7<{7Tz9gm}=IzZmKn{T?j^wib z!5Mz@iiqX(7-p|hdaz?pL9?;)FCvnX^}MRK+N>>xL~*)soqUX>&ac((Tz7ai{0leq z%Ntx3gv^t4!yrhN%c9r!VV%@M~OKC7fb z1?Au8KEz8fxutL5iU#xZ#|vs^O2+dQB-G_jzo{kR?h}TQE~gqFk35BmIoaYX9c{9( zoGOpiB88pp=vB&>;$wm13g^+A%OgpxU8r%Ei76XRb(7X3M>kud6YNLRucmO5DrAqW zx`K;U=s;Tlq^n(^b_o%59medzHZ9O;29LHub=ON1uhaU7vw z@!1GVqRy!tJfvXcV+W?Hy;WK~?LlN`ej3qGCN1{sJRFkD=KKOaCf~?ryZ7Xug4K4e z5tlw@X+CS+k%5YJ4Kj}!FkbPtTfx@}XAOO$F9I@RKvt5nws4Y)I^fV3v8`5EyQiON zDn9E+eaEq{ZnqE``2I*XyexA$0m%*%5EbEANngUKj>`6d zREOoBaa7UDg9=n%1!G@BxkiOr`2jm&pQwsbaQ8vT75ib6WMPp$Ng+ZrF$3YS^uw2F z8{bjN2??_h!ybX&>m$xW4LRi1_96RWkm`ZRCSKa)j0E(Ftx13+|b zBCWILO}JeG;S{TpQ*7IPjJZ_3_@-p(kmb}^@Sqb~d~*3rJI?@YKNgkllHJOU%#RY& zCd*TO9|^JGcV$ht2+f6q4blLjCs2gaW~xIQ0GD-qe4>obPZ2jIW9)z+7l0Yu1f2hZ zIp>d%Wee&Tn%1lmXYkqk-0Fx)`oEqz?(*P)s{L_4wJy)+%@F0k^71~usS$h8t%DcU z%F2`KHdY@x6%;Dt03)wdZ(zC(^{f*n1D$GB_+Raa>7;sog--X#Wd2!gc+Q;di5oGe zQ6BYJ9k|(2wrY1^@dh8Ir3lE6KM6m$2%avLdq846i{~ddJl1l@5v`^~X`Kt0`t4gY zRw?8DLRieo^jjQFQg5>S^(+)j+}u1}zYgfQSez~*DG?Gz?<9v2z7}Bb6zQNk3pZV{ z+!}pcrEEJQb+GPV=3J@JCE}Evdpm#IA{HkKsD#$rcfvd2vh}L?TbQ}ry}r+rCS}E&;&H%hW=DTPv?dLip96tAf+O;s3 z3cfX~j@Mbim;_7@`hxOIL6IxaFM!iOwX9A^J*N(NSFxuqgF_y@tWHU-Bw9swShvpV zf`MHS{*un&r&CjR1GAaRSskvQEyNx3%E}feBZSH&&wWzVSQ0{qtUzVxH$=5!9ECeo zY+f1f51`;yoh;79W@8#Jt6QaDcn&0CNbx5Qn_#@Irb4qYMARy+14Y>wznou@tdvA` z#yZmCd!ib0a`n?BH{8Cc--_lW=(me(OVxQwJ@R9~^reT7#0IK_#~^ z#1zyTNVYr|kz!RWPig|>$L%oT^dIbzY{b*TIjhY?aU!jvxXK$UES1#BTC`*RoE7P^ zAS0s9M{VhuXG;bxsyd*r9w2*VXM7@#G2wf}Ph4MpEmxD)QeM{;Zk~JtH%D2$I zE}7D)41=2ubJRB(u56Ef9THQiTo|CLOBXEr8;?sG7pL$h5Lw+^B{UbAFl%;IX{eF~*O&>aWx?=WfFx%^H=|FpC8(&yXC|FKOMSRly*KdtL>W zub@0hy{ZC3c8HNw*`cgbIXj?PCyRVGNLkLIf{Z-?!19RXmDLRJuZYtc_A@T`tF$Ud zcOLL|6`gbe5RtH@`^W3q1M+`4DQ$+>-*s`|$&o6B$@AL;dF*eFD*PtWreQN|ltkvu zNADma!sy!^j(jS zBQ_ja5E0Ha-5hH~$&eaM=?g|p8aJ@S8NRW&U}L6n4*=0M^iLVweJ^Mhx_3;fZN{Q8yZmnJMh|H`soNHluWPBtDN}BrV zqDejGXH?bQjjYfaqBCJ6&CbI%j+E}v$Yjz^&91OF+q#`Ezg%6_w(sTzpa~wf}=p z6#hBjoZ{$^GAZ5hxqd ze`rz83wKn(khvTyjZxZE3hkIwCkXk3P+I_dF7_d0mneEdZ+lK_!7v_RAvdkXD{aqt zs%y(p(HC{f<{2_2#V19h3>G>hO}ONS!vboyI*sJft6O|pgJb96FD^$HJW<*a*jy>3a0obf-|Hz=ZZYQz6vu%jd6hTF_%js4yyai)?v8vpz| zGQXs}yt3y~nmwj1jK?n&MX;u5uamR3;mAlqO<^bQfpA?I1ja6Ai>sY)OZf7!FJ@q#Kyy<>C()m zv@xWEFGNe$7pFnpNjDrTT4j>1Zk;5mjf$t~La?9q%;z(vU6k9~Xc?|SFsobh(TpwB zS6UioH&C1^#;IBn6<1)rxChAW<(!ww(&jfdh(<4x2!Idv?q zAPeKqGnmW`Us}SR1#q8F;OdQ!WD`WcH#Rhs+ZQG+;|+`+L`f`N{5g{#ZF*$hC?8iq zHG^0pMasL7)Fh4%Zee6SliZ%6`bOfEGMt6tKW%(C8M|j1LpqSAc7WN7ESS9M;e1ks`*h8*-WyG>nC0vhD)}>qT2`q@-hH@g8Z{L+K@q<&b#H<4%t7 zl88@=&LZsAQE4Cz^X*U1y;1e3IPXpDmcDv^J*%+bv^gyJ04rri4mb)!$7lf&~KczCKTYExT#eh5X(+A_tye*wo*vFwxh zSWgzVr6X@W-hnvWfF}-1fb$C+{~%N3{zNEKScj|@N27L55wo_j(pX)c@ykwqbHp#V z;MkgsGf(tZ7GqBsSFx`lyF~6_@n+#CJDXugT1VQ(sRqp1Qp;}(FVRy#y)tpC@C1@| zQ{rv&_!hsuxqz}kVuUyiSxKp4v3`g3R|Y#ZxtIrmjqk2cjnG!Xix%LT8y%JHjSCNp zf}c*$;LSDRNrV090SEggw-5r^_H(Cx5(C+#`o8dU-ug5jpiX>&ZZ+Lr8GP0>zi%^q zxoUmlr+$@GdEp&?nNWYRAAT8)f1%%9t>1q2zk@e-2EV{tzr-+n)e(O|9{$*u!&Kjf z4*@dL@Em5c>360(45IbnvulURXW9I5VxKLWGA|R0=P}8#9qDDNtv{5GiC#~nZS zohM7>ay4(=LBh8iV;PsV}j01My`QVBINQ*_Lf+*u z_rtA4q6>Pk!@Tc3SUHudbVjvUf_;84mA)9bwrNGi3-ln2+8wuobeMzrT?f{j_?ZLO z9?fJ7$*L}7lD)$&;I#mpTH@omxU^!#YGXV;IRq_V#<>WmT5!+2d3U0>Jz((KCTq~B zFkUD?8N)|=dxA7w*fdnA!j;?ZydzHqf?w>Ws zc3!xL$<>Re+I1i26PIioT8vGN^u}nWgDYX4gvUNan9P7{d~B?opyGL~K$pMbo?>Sf zn$|OE?VI*n?k))h>eO&W)Pku}Qg_ z&xi(X(0vIqftD+pX;`ujk>G3W@S5x|Zn2BRnrDS~fA-IholZQ}>2u)m$YZgrn1?|_ z4P8!AT&S7_HF@BZ*x|KM-(o6d`xO8jT(HCEft@-tJN!$ZCejEcl33Bgy~91eL*%ec z9s0L?sV%1X6XFq0{yu_OXjrsp#RjuBr5;$05gBHe!fF+_rYWNPSkq zRY>xW!b$=+^fLWn{~u-V6eVbYB@Je!ZQHhO+qP}H(zb2enU%I}v(mOVyQgQTd(PS2 zf1f@)U&OgLZbWmA|1rgk5B->|3q}GIIYvgGzu4p!P_%`*Z1c6C64nj*aB5VDZ37UTAOf?58*Fb9HJsyJ5mtS%)6#Y(5sfE`H_Y}Ucf!?!5p&XMxrk1sj@_?U9lQK9vbyVei6 zAy1#8N1i{9)cM}|IRDyhvQ${Z7^O4NFn@=hbW1aJjdlhlJu2bYp@^b0%*@m=&9lt- zn}i%T192!z5%-G&J{M^eXw@_o3ceP?I1*X>H_|APBEA+4erZ~uI_s4yd6CCoK9yV* z@Jf27)Q>W$-ub+`Ep~S=2Lzvf(AvoWwc!>7Zl4?A6W$Y7ifKWzX|rPXnIu+PN7k>J zrdy2xXU73~vdFCL4+hselZ!*Sx*-tOQV-%G~2434^E@pta=wPUv; zA6_-sqF#u@+||E&wETB6_{a74GD?PEiu>x1vwGvd3^~ux@Z)hV1QW$GeIBXC!gRm} zeRlUiX#HvDO}y)eg1eEmHhxRdyHNa*CTwIRTU0Ecq%~6;MLl5*oqTZ*V($YXysQ*A zRcoju=KqkzS1RJKF2E&4MuGs7p5!5@MRiDO#(6+ZEuegfF{=lEt4izPK!r^ z>NKiq2hQq^)k{Q!SXW3de##53)oe!m!fgI&0sP|*fP5S7U$2ONqyUYxkVZ)q@!cA| zvYr~=Ko)deF=|k+TydTf^nf6HP$OO*<;U&p>rec|aUS!VCCWdVDz)K9A z%8qTr4SoE=+CxmVkCjc!%vt(GoT>1{vlgvo&IsWpoAb%Lwd-(Kg;UQ-&iD-KPv}Y z69OL%9Jn)iLP4%U8XovN+5~&q7PutG52z0xL#D@-9+G4vH|z()`-OFLzhipY7MhmY zP)kUJnJE@BZLXigaq-H20rb*3Bys0gri$mE>SvCX>YZ357>j9BA!&l7U{#^pD-(Q~ z70g>~Kt-A@`3_O`p>zWUiUi#1kY=t#Q52bcdRjDQ**F&QG;5?gD;LmGY~Y1CEj^%N zj^mbJR%Q;D)rB^_r;jO(rMLG><*-kEFF5aJ?L~FtrNB0tB=m*hscq~<(Wf)));A5; zy2AGixL&{i#YCq-{^%`r+NVLbMi(1hk}oFDoou5hzjg zT46s+nY|M$wnxb7-givK{=NJhbUS%092HR#~c(qy&_ruv(Gb_eG1jfpd?vbk?n zK8gXGHZM3DVzAhAABxbBZ-%{Ta-72Dc+{2L;3a!lGyCbXK)iaaryt}bDpsCCP@ahM z+U$rm(kzhSle$Q2BqVB$kc4+8kD04Qy~TT^c|~pr>Ki5Vgc=tJlYXLIJjo8>6Zb|g z!-u#>s_Z+6RUe}{8hTUw4U24l>MA&zdJxpA+o~H$P>&g+tzbVP)Ppp{$%e~1il_{k zInN^@j`pGbE3af`Th-`qKNnMSXjHgAy?!~L_!9%AbaWDjrBS-kL9ekcf9Wz6ZJN^5W}N2&)wI*FWXt+2dxVQ>)2KP)f)flFr26+~ zT0s2JQB~zcU>kGO`nlIGV$ssaK(CFo%sNrYYKO)uCl+ZXYH1~C;}7LrrfV~{v@@pG z${)wefE-CbXHX8TOlMfr4HpBJoC`cIsS`u1-Nv0Wu~{NRO>bwTwofU9V$yvrYd$~H zV-8&IXP*eDmu}wQjiq7CjyRoFYs9FcSua8~gR!fytauuq29kVkf?1rWJr-Nl^z*jCRDvX>3p=uH%Bn2bi{W3-rF-qkf;M|pslpsy z2Gbd=W8GW@|3SY9LY3T_+Qn!qW#!8QzKeh90<`oIAQr`aiDBMU(}E`#ANWjyLcRzF zV+V%Bt$qaYZa$+OWkbs4MU;OYDDr=!uG)Zj{q=~U{>*&jn%=G>cOB?r^#OMk5}G5r zrVS*w+fgSQn>*m3_`tCGyAWzz@Zk;Zw_bTD!#HAE5p^)dc({E~1N2|2X!%;^KF4C1 zWvWYfMb11e4G0Ajl)>aB`{)KxTb1Shz;Vu(iU!;#^3q=3BV~8RHGmmPtUZn+=GEGu zT`x(r5B}4T)MWb3eCvSLBwTl~)8OZ%skfIMz`|Ydn?^SK%mlD=g~n}TzLCXh`t;9$ zPsG$&u(@2H#7{`bU5P>2(iGm+*z#6%&%V{l*9*3b);KtYCh#H#5BSiDwd>Vu3z~pu znkmnn`Ko7_%O5vG(>`?f$j{$Xf;w5iwT-P9IN*BLn6f}R4D&4Pok0_<)tXbg_kPe$ z%1>g+pXK{Vs%CVYq5)@2-B# zge6;8A3M$=o?T~LszspndL=YUi2qvkX})CEZbLdGHA8kK>#XaB5$K4v4BzcV75pMl zZCN?8>jp_yHHY^qB)8!DgHmU@Qe2{uI=mhTgESc&EFr9AKY|TKj z00{MhiR!GIdWZ5#i${({r)dQXc8e$4ARKt#_4cNXtY#3_l-T6M{;| zOS^56VEOa)?@xm;;_>89G9vvx$)*`0IGox8*k)u>5z8|45zqlB8Fw+so{A9(}N z9;#AaD7!``VvvEd_@xB!t@o~;2%`MMx3`R%DzciH@v4i#s9m^3nn*9g5~USc*^-i6 zEMuIrT;tfs+@94eOAv>Oz>ewBf;l4jf`S6#=X(wIMa6fiVk0GqUpB zt%C8#uH=uKdyb2|D-JAUaH+avpg3SAIqyXc8U0iyfv%m6r6-RbpgN$@Id5}$GRb%y zDqI#k(M>rH`7T8cC&Q%@a^Dr%*>5dPN()DBMNHZJx+3_s?EoCZSrsaZr_;`W9zu}D zpm5_w?=)m_tq7xBwEQQ1#J|e_GMO~xIL*Id&AzHN4wO+rrjy1cd_KNH;z%!kI_Z#`mJ_D4~$&E()0G$N?Gm#xPpK_h26w*ARZ91W# zpsFd{(K*)kD&3?A8n?-BXRd= zL?gsBqZ>M}@rnJT1KKw+WJl-8B~4(;Qo8|)v%yML$G{U`Cxc>(eX=*ILIur)Y1a zWa8**;`m=A(Q0)IcV#sUUpdqEu|v||b>exzGwiTk?LT+d~|Day?d09E2ZIex0 zr&i;|t$|rN;P4XbU8gjAF?+KIfqDz8@>1^bmh2r6cmw7p?dh&L>4E3=e-dQ%0X3Wp zz`%`-4-i1_B4FSy-Kc|4vC|A3I36xAaue+E5;e|@x6h1SRAqg1PIluDpdAgS8oSDd zkg<4c45%Svwx+dWw7a*kp`1&SGPWZyRp(uc6Hhv;ZH^jGMupr%HY0Vb!3~DM*oIS4 zM-3+s#Wyjqo12Kmh!{FdNE;LByv|^u2m*~bnoe(;M5QUC@)$;8#<#_@W1mixR1X?l zr7_SOs)xHXrk_obAZjbggCSdj8rF2TG)RJ%&q&8+oSNX;BcpfrNvf|+K}Kp(23T!X z?p{m6BB%>3N~ZmBBnmX`*g=olkWXYF>Ru7oy1Sx&YaCD&HBc~N56Wx*2x`HNO)sw! zamUP2RM){+SOSI^$Ak-Y@zEf1ZQ2lDOS5LJ>adFCXr91+CQ4HRipD*?#yUv%Gd=`CpG?O zOoR$~MkcfTC4B4DcwE|yhG`+aabL((a{wKvVqsLhexD6-&)XC{31w@p%j~%!L1`k3 ziMbD5_r7t0$ zF>Ov$+s2~aohS{yM9sek# znc%f1#N+VPY(YX%4z2(vzv?Ttl_=6$zH|vrD7PQ51egqjIWd-!Xj*O!t8U9X|Dm#D zFmfQ868!)pjlj98YMC~iQ3!sLxEoZpyw>}BwXF`JKc@S1Bz|(fnGF5R4+l~)POS03>w_~_E6O49_(JTF0Hdd5Yx7WG7nP(aAKM1_jtLFVSXM~GNPs3B#LQjss0#*B@`nJAU+flH+IWCIPf~nO> z7$%WhXJI}Wa(KC!1852;PkR1zo36jUo+f5Duz-xfbNV{%Uoc)q@+nwbEQ6uSI3myN zxpMbz&;`-tsm#4uGprP*ZapnEBQP@*JMT)E;2&n{BZi<2M3XL(zdmFK>oqCA}k7q@-nUOv%M&~9XL}^ z|E@8KJCIcu`^D{bB)8YXFo{C%-E9kf?|oo?cW{xMy7)>ipfdN7e&~rhWJB2b3d?aW zKXQxSWBU3D>~=^GRtW6P_34(im?aFgEo+xs5PH3vzQBAayOG91>`Hp{P!L;pJiF`L z8Jv+aKl!m9?Y$AHWu3sqO+52=j2GtpE7%j}{X5(P2Q&OGp*Ip~M5ZOBb0)B*xR}F% zjb!V;1D&bRAFi#H+)s7$W*}X9ld64$Y2ljJ7QvW`>-c!TFQLe4xiE2^1q<}IjlSBMX041M1V6GNXnhtuel8)1#E zv}W%PTU>d{d>XG9zntO{hg`wMK3c2Y_&G;pi*Xscp6X~lH? zse`0Iy7v*#?Lk1b&w)CxVb=kfl#pJ|kU=QhIk*5@Ia$i5T~^W8B@+*4q+@#A&*ZYH zI;Rn637uj_GqYR~pplHd%By-1hj+O718b`C&WrL6h~qiW#C5DDez#U0Reyzor8x#u zjL=26oU{=U8ulcDjrA$seO*!j{%Qr!(tquEvzHk&Kp}T(i%^jpR=Tk2wY;*{*NTk` zIe*c{sp+}m z{x_y_`O%HBaQ2`RwEl5yu&^~#HL!Luk#qdtYCXz3N(=n(Uo}af^Z1(Nd_k1>`dUHc z1?F0nqsk%aF_Yq@c8rO`nTX;@(nv`?V`x6VM!-hQzR5?rn3oNes)P!)MGhSbyUb+cQC4FEyFkytYhLWY>MiG=)iE*Xd4YT2<5 znQJh(P1P+N&i+w6lt?7s=rC1f8G%3M$8dp*CJoeFz6?1tZ_e0b-LA;7N(=ES;bpV= zT&+7(nROpd7odt0! zQ-M#q<24_1%YL99aBM$t2bRL+x||(ZNUsApas`)xh$UZi4%z3rQAj-9n&nEcVs5)^ zM_#K58i77PMBn5z*MUD$aoL#X8QDvzRMlkT)H@T(&o~#QI}${i3hvqFZOtH@vRP|-(@Shz$&2+vcPjKI707*v;a&5PH8j7vf3ya zWtDLRUXjS?vqm>z4suK(SK=X8YMV=B49>I}=ScWl&)*i{NJg&7?G@8!7nUvb_9Axr zms1k$no@^5uU$khi8=DuRDxV1_G~94qf!IYF*@Y2#)Y`F1zE{1>%4#=jc9QogXnhT zC~%g>o8~;^)yw=T+;c zTfC4WVO^xIBsd-c_{%KL7eZfaATUtSEAKf+QH8D{CCffAAqe?Z6%od$9#Sy z+_)w#mQ$3~s^e8`uE9#PL@Ru|Hl`48>;A9hIE&+i#mMNKEpeJQBQBQ0L>*dzmb#db zOfg{g)nCCpKeTMvcFPp)1zr5CP#4aPkztzj)RszTn|4JZ$2Nv4Ne8B;WoOM_&y%H5 z1!N`-;G`zBt07vd+Oos*shRujn_2NmO;RP}5h`^iQDjlkF(4d4odceC!wprX6is|G z6e|Xk%va->ZWFYr^P^B%RTXK$C+X7gz=z zyYuY1HA*oaCk&Lha>dq2f`pterEh?WG@Cx%iz;jdWZ(T3m7wO~$e4DAPX#tLN|fm} zc>>bDCToh!vMz-*AtSR(t6+azU+Tzfa>*K`FW>3eccvadWM3>Qb3QbH(%w8L%w21) zBnJn<5y>(-wegZuPtm5QPHCb#sN~Rao(iZwKzMQN9d>Yz^{VJwQW!SEp;AX-?=};# z16@+@g;W(8QG3xGVMAZOrRiR{6|Q$N&orA!uYfE5O5&)g#q`pc-eQ!Dlnz<{(%oIv zMXs-KBh7s7sE1xt!AzKRDd&{}Gz-jMIl-%lrxADSCr>qJg5Rw6g1wp-S-s>^xvu44 zr?=Bo?XS7!+j7?H!G#TZvZ{93E2Sh+V`Rz>A#7X6>+e&e6DkNN&!3G?`MJ6SdFItw z!-lYRY4~yNsAToB;<4K}(yy~PP#U+nS8X5so`-FfxA6e<=_{#jr7=T64itK9^(^S! zpD7P`?gY_2<-o}5SMbFv)58kt81&BFryN%xw{XYVHm@jTGwbP$jXLdY zUeA^icE>NrANS;OaW{nI+%VxTijA1Lhs^{!{L;Z4w(XqCMt`nxc!vBvh%hX3wb@TX zY>(1Pk^Zm?t42T&7H7sKJ_XLB*Z(WZemUS?OMs#pDhD+$KX`}L?zb2P>NY``+pCUB z^n)1Sodfru-`nXfU)k2XyV6B2IKL@^KjCw`M={^7?Hyk}8fkFlW@+s4a7OX{EqwWS z^a)MD9aDaDKLCVQ=2-c2ncwr$BI^1R==Fm=Fi(1WhfP3RFG?AZmA5GhJtZlk*z38I zz8-^uA|D0Dr_PiR(usZL#lZ1=1Oesxv#Ew(-ddx!Gg9bOOgP~U-yn?K!z5I)BmlyH z&*g~>u)rL^W0G2W>paU3Wfo#8mc?|ER-n|VQdBeNb@Umt6m;|*UJEC${yt;Pm9R@8 zuJzAtxt#2EaQ^tG%l*Gs(*LZnUVbzZi`~{O=m;{38|UL}%$_XX|KhL?`+4 z{2BGg7}(qYNLc>sOVPx^#l*?^zshg6(uVC1D&cX>VrRGtZUPzalE-(T`>RM^T#S$M z8JJ#^(Nt!q~FXS5Rwz7b9ZsR_QoSDck2g#O* z=)J#4K&XISJFXb_YKde1)P8ncuj)u7H>Z4SNPMh@axe+*jk|_W^}OB{+4YQZohlY) zRI+`f1$xD;f7g~Bo5sVoRZChH`$L!NKx7*?nFP`H9`pXL6#^(0j$h#AB@=>Gom!y3 z2o;SSxaebW242h7s1>Wn=C;!Ty)}eeD!syp8`4F_%4wZ>LuxqclwG5HGBZZCa-(xy z*(SScbL+A23gTlG$vmw5$5m2?QL<%8w+QW7uJGhKrepFM7|g&(IGXeeg5CU+D$i!D z_frCukLOcbauTcP&1^{YFRVcH1_tUWjiggK_z0`zK_aYscj*YS^y;APVZfZUJcYmC zO57P7U1^#nb4u)r;VB69XhVjHBV3BfzBt9;AcjwxgiH1x@A5)NdS*kwhXa7nNyUQ5 z$;IO1aAY|}gmwYAzeLAk=1!TM56ASJefgbAI%cy^X&tAf(L$JPo#VenRd9}t;UJCC zPGd-tZjxS7!%s1WZ?TV;&Q+z`{H6RO4v8}&4yijL4w*Sn#yp@a^oEm-F;hD)X1I3p z{dn5j@)D@d5Z}uP+Jy&Hv?l{(D&e zPr&~};eZGtW%}snC_57v06^@22fUHBg^8^*-9P<&e`F5+WtT>*^p77V|Bc9ha^UCG z*xAC?#lYFZ&i21Tzc_Kn5=j7gxM$6}fpoY;)aG*m(+b5BswNMdgd~BMT(DwQ{MwAo zh|$H3)Rr{Bu9ywA^X8W~`R$~sjFiQM;Pbw>S;+Or->mE{K0m)t&>O&WmZW;a0ZSO# zD=+t5gXsJQqGV>Akon<6AW*hhpuX7?36gD@MEN2-5A+4u#!@0&yc^|pm+sSy_$>OW zClkh)A=|3L8AX`q5rw?uc+2tV#fbbbRf>2}hFodjwLsk>B)%g9a+$lKSVM}WTblms zD<5#ttj*g(sC1i<<>B-+9s^O&*_KA-1Zp$&_R+CAeZ?BmT<467NQaN;d^c9l?R;6p znv*C&T2Q)-V(3^XRckbx-8jD^-^ry}KRn!sQF)tYy3mMB3(4n3@2g~J$gMt(Bd*|% zb9tub?wpc%cbdzUd3I91=I9lL-)2IEF{HNc?xV9^52byx-Gk=P=O7jJqCN5$PY!(- z=*YFRXB-qnGRendCH?rWTW`EKxCV8YOCL-_3fXf^xxy>e5GuJi+8zq5(!2&%vl6o8Wpmf`^FTU51XRRt_H zd%=(wyElW9sY(ABGzwTY!@c|ZoSqBqe9CW3-{fbPvtNeFnsF|`eP(iI=Xkkk2!cc6 zIbOGuJ-bb}_uS)u-0xib0l0&+oy*5E8FEmiI3X|_Q3p71)1-uhpOX%->%|ha!S{)9 z7w)dn=S1#$bmFH-8JHUs4U7uYgXmDFqDWKGgR_*+^(7udBoSI;)=d@^rcVc@P@M`q zbw$FD8M7=bIuWgN6L_yJ-*q6LH*}bCS?D;SvsZHgnXClV)3Tyr)|EK-|1}s`6q9;w zvW>Mm#kMN=nLSU)n70s2=P(``M;8Q8UBnO2KSmj;lM2YxTf-eT87k1-Ro^CzrNY6Q zRe8@Z&sz+P&5$y22(e`s#nT-ojEGH_xbOV2Hm>b`Kse(VC*bo+CpL596fCK58jaGH6iB$cM)9 z=p;I4k9^4SyCxVSzwYH%pqs}#VjmU0&ylQLsacwbYsDlD26vr;R~EQWOVJVgv6fM# zP2|fMVzKfNO=?2bID^=PHpU!eLw_4tn{Rq>l~zh~i!Sxii)N-O`AJD`f&hOUHjK~2D18!Qgu^f{Qg~U);mL`vDpKG z&_nv!?G}}wYCX_~a#MJ*4z)uXBsB`ig(3r03Ok~93`S3;C(acqN~i%9d4;|F{)KH5 z76%7|UCqN`^J^jGUuEr~PIcWw^gmpOdGR}Ag?!d8;yREuSGfvhr-X+=B_vREgI+(nyf31>Z1cG z95U#dVo+++qZKln>g7gkhTD;SgK~NdwnYgH8_OqPv_`EPFX@$7m3EJZnpcHS>Swlk zwW-Y#wULAk+1%@b3>>%TMY6M{yDa@VF3QmP2fEZqEwv`#&$qc(rZ-_i;ML}RtSPPc zJ6iy`1qEyxF%eHmUVk>RUZ!O)_FdR=6FQNuS#I?Npb*#ltg7V``d|T;y8LA?j^mEDj;E118S8)?x}BkIl6K7yEuHo^4&LVsLc@m4t@;Jy&}!(*NBL11YB|~!KeAHr2M)pq5Y~m%i%+Vixs?;+j^~BekHFnO4dNX>mK_ce z8&bk|#5s48hXH63R{b!98TLS{3HI4ysav8VVhc1ur(m{ScpO}O$?X=8TTO=OL{w*F z{t6aH%vY(2`Ji6(fnD(5G?#t6+p#yV@#~z%w+)MSCKh@&Ti^cxAOGG6{6VHkZ=M3r2m*>y+}q&Expd)xzwBtre2eI^k%V74$nj_dDU6 zRq`}*ZEi3j8RRqnJH52Ywexu;^c4E-b*=-zb?c7BX`iTWi#o9~=olGc>#frl5A2NM zFj+<~j~rP(ztT!7uNlabred&H7OplZZ6t2fOF4Jt zzD1YfsFZu9B1sejd0@G6Nid#3fwfDclw7#l*b@v>mhjZqlj;nQ^GOrMNw1pQr~~W~ zV*}Y2N2s;bWd-qPGWlp)T@hf%R2Eckh?#SwJnHn@*iF0BLX{%LVWWKh62}XsG|TNV z9bJ@O1@<4@VP)u{(v#MnfGLc z`nCyl=6rB+NwDBIvjX?g>99@WTNZRwLdh-{w9qLN(bMO(t5h@NDQueOoU>SPWtf&T z#$9Do5%?1}+aw19C&QbLWM9^~d(7UdfqJ%!3{lIW;}UO|GBZ|h*dtPq&pHx>+Y+Ygr&DaTlWZhG( zU9;)CaoF5q$VG~A;9&0aRNGCKN|sFLt+&lA4T$g@dNWHBzEiNVjg*H7&9(;9H3L+a z0sU3)VXma;4V?+5^XnnEBpOLxIAeZ$@{ zy6evJ`Mb*ZFtsZU_}<8Gng&_)<=@;W-1!G$Z;a|cf+BcQ?|L41l@mlbwa zMtE-k(U$o|f8-09g7I7fgb(25w?9pW2`NUvw9LjbX zLZD{yC(#vi#aKQebH)&&qhQ}ALI8!KGwV^%;yR2+ zy3l=^N=}nXv*&OpI$>QEJ5EYjXp=q&jK!Bfphou**Dav+%YqrcT@r5xXrkSkygBAS z?udTgT9{*4vG~^K(?qrPKNty%z~<8z!j8Ven(c^ug%mlW2kjWQp!Cx>0o_f{0SVJ< zP5=u^Pi%$Xc4B~E{je3jfDu2A#qY@Kkt zs4AIfEM{1p7N?Y`8FJH4fs}ZQ5M-+xjtNabXye>)i2lhVji2faZ^oXY`?iGe36JXr z?hX({@_ArF%X@{}LiM0AY3LEA_GEnjwayf2UP|5E6Qq7<{M34qh76NhIMXOdgn0r~ zg@$$dLdcmbJOWY1QT|LPd;(v-6Ejah3D@xPd50~)CEyFfU@01$+YkCh$$Gm|m)sM> ztj8aMjrL-pJ+afv?1vQkszv{@LI29dIGF^;1>G3brEDJsI?1vs#z`yHgk&Sh^-eck zh`EJsmVxi)rw%{|926rw%-QNP6G0xkNCIhMBO2ni4IxaF-%TJA8|A{b&ykw|@P*6% zjl=xq^>D|hAJ-FW;J7G0A?}}QguXJyibVdWkFT)ipdh}ttQ>wcD_pZ37Ywi$4%9!i zaqN(A8KO5*J@?|yq`!ldY;G4+#KDIvl zJD7Ap58{n%wU2M8_`^DS4U12oVC+3n2YZ+81W3SsT0sJ zD1-OQjs^cGQ1(Zz@~>~fh;Og4M4r7w9`>Mt3CQ#V(9=^<=l{XX@xKv`3a5Sc3Pj8oA$2qCgcuArTv<(XE(*4@B;s&Il%WxPC3ZELhhF|Bs27HlWe zrf{Gl!-Uf!i4?ekAA{FhRrOe!6UT&TbiS`J;ViK{yJEQ`QA0 zausll4y{4X^%9iSa_NW4zGKKzu28WB4w$+(tiI4On=)okUUQoG!y*G$l3zwCq_=@N zfB&;N@0_-Un*N;mEbsLs6Vb_$6}=9$Agwf=QhY5St;)J_8I4FmVhW=IB9m&m!1J zM?g1y+8fGlZ7qiL+F123IZlrkR_zGt1^zG@FoLQxL3v9YzLhk8Qx0H3Uw79URZKkkH;=AwL#;p&&Q>@rqS2*TfB1I>y>JTv?8D z=1rj+nw0DOeSnZ5k!?+t&G7Bg__gvhWtX(reK^=8WRgv1#q5&rPII=53p{Les$Fwe zJ^ui@|DJ&VnVQJKw}akzkw#FyhFNvBbn(Kt{5cGJL8HJ|S={!Iz$Gnc+jKOrZU;ZC2XJcRl6sG*$vw` zUeVw_=nMB<;!^i%p>%dZFSQLwDZ8Zc@ls@h9VN(7uvhO!^$LF1T;|K;ub#uXI)i9>3E^yY zadCPIRs&81f;AIm&{<$8?EE&Sw#G1>Trs=|KSv;{((p{=w@97CTc|SDMx&pu@8m#d z1@m#JuAQj^g?sN;5Q^2{HL@o^i##{D55vWKa!Cjidl1Jr#aOmaBx0x-dh_{hWZ)wn zVZA==L&XL3731@JS{JP=U-`ApTj%}6}f$}!)69X0aQ!B1I=_#vn_1{5AfmY`SaU;=%j@|G*b~qK^3Ofsy%OmO zxXWWxqJ1ju#Fs%57tOd-?73%o05viZFx;%IZ>Sf`17QzBFK4PZ#C^Ct-8*C}wJCPwqY2YJUjxmY(V zABAc6KvVU|tA+g#>_3Sj%l>`tYphDl0*yQ16XemBfj$V;qy}@Gdl@u<)y*6vzf4}H z(u(mKGtNpfl=&gJ^gvkuQpxouN)`tN%*YC?klLP!v z874Wi786@a8_)|nC+7P@*P978oFI8ick?MQS-_KK^}`SIaM8?1fr59A5>yL=(r{fN zrD%(-z2+IWe$~GzZ6ZFlSv+x8=p=vhih$ zuGx^Q4Q@6Ls8}*fUSo-CBK$j-=Hn?$#-85VL8Gp(^ra6B`CvqyuOV=oXM)bG6r+U3 ztz*iFyX=O}xR)xEJB(FCk7Bc0y?aktGlZt>jbNrSctcV!$(N$cO}+MhV*;Y5a0}jD zv1>)y9b-rSQW9aew-IH461&eu*&TV!zL;kE?Yv>2A zgYYTbDt$=zrj}}>@THD_0rn^}`0G);G)Md}3?Y3>_n#F9_;zC{zk>LFXnaKS%0G^w zDmQMpG;3`wt=C&h2Y9n-j&qoPi%GxB+KfU-vBx_5UUNR$l928<+Q=HXe4YI-)_b2wD&qtruAuE=UWm8T`G{G8>g#!Gu^weQWFgOnaNpny?|} z!nY7lFY!HwY``a)>;T*UtKgxLRIA2i+Y|)daArZhiwz|cQMMoWq8$oDG=R#1jN^)n z9rer_n?}r^B2X}w-(aPto>SB1GJKLhe>tL7h#}WQuMMN+i9;(IhIea z1gJ2s(2JjReyV*?5Z3n(|5fgAj0IYR)>o|m%*eV$9F`fdy8fQ?qYwgGxnX^os)PJC z2aLzqMe5YAwTE%jT1AbXnOM6bBtu*YhlJ zCGTdv*t=lc0ka5?ccmBEsWKa~EEecp;owf0-cPJwCp%q~dfqe&JKS&eHFOE;D9L78#E;y%@Q-e(=(Mm^rRR43;x24yZ)YR(ePOU0S)Asdy?oEs>0= zL|L6mx%Spni$|hu=?3WpS=PTP|0zVSC%1Ti1|`P82lH&n2`zj`P$IdXE+t$URtT$R zgj3Te`jq)PpZc=mI3T&Wt7#s@gf_vBN1CNl#t+O%f+(9o8VsMwG>a#mzjM~nl4OrI zn`YSGiu*KA2zj92-&3sdvB8(kK#6TcJxVWXQZw9^1z(d_uu*OZm3+T|Ud=4(KWtvi zu+A98z&|iGiY^NInS46PH zz5+XT6&55WRsr>DD1t%K$nO?CdfImheQU^f3LT-Y7K;e*>3q0O_v!K3Xh5P0J$S~J zEoX3uto{s{mZDdps{UQUy20#RwqX0SZu)AgHuG8}uu7wU*%fOGrix$`RN0{^?$MIN zM|}c*byU-tBF5>7Gi3C!sTT(N39I~GM)_3q^%?8ZV2vT?kW%A4BJDeOxG_@dmh}VX zTK_~P(bLSKT%9l_yqLP|dcQ+wGSDsYna7=O+f3k?@t(fM-p}LLS*A6NiQRr!FZ?2d61-F<_&;1eru}; z2?TPRqTV?%QoUxwJkgvCg# z(WSnI@^d;z*HB!W=!o|^c{)LMb$B4w^6@BAC5D5Tc|EX zEpq2@R)7aF3N?5=`5@x9xO=5OhDAus{o3D&j`)L?FeHx{%xR z_hoO*Ex?nMj;xyIV1v7mEmQF0|BJPEj1FwuwuP&bif!ArZQHhORcza~ZQFJ#wry4F z%ijCkd#mny=X`(OkJZwWA8BpP(fe3q&e=yFt@S-nS<9HGN;nVo+9mV-aNG*4b_r*W zJlja=^WDV zKC}|v#;hS)`!1eRk=j4gCMvBfV6tXV@8!cbEC%se93b5$YI6=fy2eC>$;D6j)8~MCK{w^g@SIE zj2#nf5omqiA_uTLqyWio7c$2IMJZ=lq1x|+`jcvq*#NMF zpHyr3)Jl;3C#wBRC?QQq|1UL!f`!dIEh3jR4j$f`xLd@qPoz^m4BzJjq=i!XQr@%$ zEB(yJTzFAyboJ-~YBBI#9jMUc=N_1C5xlBp`mk?WMEZkWPp{9<&)RQq(bZdDI0Xm! zftxK2?be3Cm96ZTCD-ZXbVrB*;ZVvT&!}Vqtq0n*VgstRXkfb}HQ}HEo7uMIUwf@1 zw>9{~3Z`n*G5~eh4Mka$rcG4M!A`EC`l@iSuB~}vze~7rvhK&ud=REA*`sDy;fJJs zjW)<$kF0+p=frgi7aK5omlxXU;(^?xYcMXcJm<71qusAlp_mNRr|qm|Q<%k}z@DVo z4(Z;p?lIchIKzI?=C`P9I+nwrXF)A4zK%Z7 za40R0M{TbZjy>W*Y7>X(uJh6vFWTjf)y~o1-MWeQJxyJ)tqE<1mdtR_%{|Wfw$=-@ ze^N9lCy8JbwCbG^p?5K1g-Wl^jCHJS=TQc5L5Sa{ZbI%z8?vC`DP)1=S*jqkv9^Bq zo}w+&$bP2SJ*c0UrJaOLG=AV{J|aGA(+k}1R(DEU^3}QZ7OvtQZOG#ml6AoZ3^3mx zsIEFfPE`<^wU!YhUl=XRmdSL1wEX?+IfQ)To&vds4C=HVI!)1Wg#tSSie0E6bI9dw zKoxsz5|s)!p69!YT2vDm{h=5_wXoJ;WBd)fb%vmdErNvM0a;S-^SD0NxY-%WUk3=k z1ME-e4TBlK)IxswQjYfTXH@(x)A?H;uVQcJ_+RaZnW|u}ii=1eGW37h{fmOe)PP2W zpc3<{Lh8cv^20*{%jT1oEQ;NN=GPC5h67n$Z#1A+zR@?StGN1*>NlDTCdOca69Y_egtHdUjnv;za;AyTt6H3{E8X& z2F0nn-TOt{E*ghpu|onX3a5RsgTx2^9BLcyT%o`JfE6J6+lX$rI#-!82qY(R56iXd z7n$w!uv0N6&cdK#z-QzvvSD~mjVPPFR{QTD)8#wuz+Ea)sjj^}Pe}1NCDAx#i_r_$ z22Ae*Ju-{$41hGiv?w%au53Q;9eF|7AlKwxJHs@Kk`vX42h~vT!js)h*X>`>Z_<3X zKx!bpW$QYux1+x@?#P_(K>>P0>jHh~Z&!b<=-YyP=ki&64(9JN(@ppFCYSz2Z(Ex&_SqBnyZp~p9XfWwl#)J{Q_G!Z;hJ|%Ok}0a=Bg$=56HUy~|1HabS)E{|w-*BKQ4zYE&-+Zx?Dz*XS zqChu}M2Zpf$|eUf*0nn+Pt~AY1mCPC3#)06Aza$3P+g8<)5eBi&zfW1{azA43nEF?A>@ zJ-Y6Kry^yp3#hs95notVZlwm*>F$*rab!ku!&F*w-l9`kd_WWVxastj=_=GIN10w% zn^RZ=sdz?(#GM$&=DgKNlpuzwp2~+qqRyRGL+ue|`LZ%~UTR!}xL7+!dge__q9y_q z3^e())YuV=hC-=TlZUQRuiF@?TWzxeE|tceX@$CQ(4;7tN}QF!$0bb5bPT+D1IHW= z%$k50cx}h!uig9!)l#SpxY|6=bWQ(5qX3a|(n#)d7I+8|1~@o~wKa5gf}d8@8K=*| zyZ(&vi!6Rc4AvSy*}sMx?0iKQ5)hx)*3Og+I>`rX6?YT@-cax)45^(%+!fXNVh% z>C8|$^dj*oj1lGp*%vK#=u&oM_6$ZwLP*jT@`L>_8DUi*ukBADN3+4lUnHJV$wn~D z3;miwkn)pntPw9>vNTp*fS5vALDEu1v&bH|8v-)bcnptzBLR(m9#-7BWJ2FM#Xe<% z`M@?+pgJNhvj{U+Rw)pfZZ@1-;nXlHlx91e*jf%`u*Wp(=EF!;ZgyzT0dr@loy>uV zFojjUD@C3LPvLO%`=K8h1maEwkk_{r1RRjEZyUS;Mh=(7=5A1`Goruwi zq>@Cb@dRMClwvmx{Sc#x1fjZ>1R{Gv2!7-ra8dzQ3g||qWaEZz*c^o&WFlfto6uO| zMT}w&Sxo8(p(RLB>2rCQ_58|*WVv+<1C1@xP%N|RnRZK$qB^oF&pDI&Yl25rarsbc zR`f6As8HmvOQPxMt5PSjc#m?Ly1N!F6f%4)x%0j`ZR-g?e>aqRe!YHf(}%S&RPNhe-* ziaR1hcOGiGlu;W|a-KICDN;#sQB7{`C3;hgq|s$L_(dyZ4>vGa_4q*mVt~$Oz6x(I z%g@vq7$#AF!y2`nkVjHvQh#!$yT#|-`PsJYQvS-xP1R0}Tf#;|!x+gEXXhw|?Z*D4 zWq1V{dtKM6xzV#pw!7tHgvGN+DPhiiSe;`X^d_x@2VRC|)Q_2LHZpd%K%*cyGvko0 zP9bTQSZnj5PI7~-9um#`z?0pnzJ|H4L2DyJd816qC9#q`vfdHv#06S z*Tdaobp|&!h)uuVn{1sMjyTIzklclfEb|6mPFn^9$f30&C;Dn=p4%H%#5@E@qIilv z)dVCeCI&0@er~wywtkev3!`R`GUak#;JN`rU!`wgCE^q>#A|KjE|4uEKBEZT6n+=v zEj2Ql?smqc431d7;e_&`nLRvMVwVE{gNGbZ%RsMdmFjJxj|Xk;j4FlPl*@@BW~M;} z8Jb&>Y}Pk>7>JT_AD0!RtRKda)qVXR4|u0MW=6C37<9Q_+H_P(d;IbsTO;a5Jb{D}IdAizMuDW`1prn8t~}+2GD_xHYV;FZ(kMaNI6)fW zd=Ss?GeY`px~LDD6R?;)6HvJ?9&n1|0$3Bfue5yeG>n5sy3VKD5Km_Yi8&6W;HVtj z!cs(ghUi>#g7cMyVk~nZB(ng;vU`pdR)&UJA>l3N_!omMf*QIG!nKnvh{4IX#Is1gU(%WjC}m=QukwfWXCvYWEyEF(C@G61)jxG&zja~# zHMvE*)$3QbZB-%*RN2OtOdV)jBYV}{>K)5{D;WKN4-&3mkG>-jlsc+}MZHCob`?uz zMpR^nsvw}mWgdLH|CNzlbxc1c?#BT2{7M(4bE^LVbdLq{NQ3zKTUf=3tfc%&D#vxC-nVa|By%*+o{8 z)qCN%@6%{r3_lLRBBYWPz8W}*gGM{^l(~&YyMGj-GF+GP8v&Hgc(%WRd`jjT>v3hB zJIEO(X8Hx@j~GwDNlY3;zSfYyBmJa)83SU#8{42|e&9{|pfzyd)mq3R1XS^2+5~A6 zTD50*fh%#~Hzmp4^42|cc^Cu-DwX9OWzFgK2dI|la;+99m>p-%zT{zq93(puZNkUo z7KrK{>yAi|Z!Id~cG(NNUsHWSjF_Fp2{6rit<46pPlg2QfZp~cIVq2HyDf+F?Y}~g z7`aMTeHvB}WW{jY6s(6A8=_<-0lErj_0`{Ec2Uvny1fu|QCw{UWx9*hVP{0So7)n_ z?@}_4mtPwZFH-ka8}}iV-iwmpsgMh85Hhm0D<+?1mdz^5RArXE?J@xeZ3zoqB%Hk3 zRH<<=rKrR|8{U}DQBRd^vm7lHR3Rd}GMRO%#53-Op^ zyTi8_kT`#&nRlwL(eFq*AqXdXRw)T9!=6kzBulxKC1vZnV@tk# zOQD?Sn){9&osEUTa$cS3TCy;a{DumxQoW>qG7GxHLa{3t40tK5Be8hU^}!G)zc!NM zoadMBFE@vX4~MgmA!i7K4?y}47_@E%;=MHp)VrHYI_u)8urB<8cW!I^sA#rhYF+9< z+QH=h4*dQOKegvY&ci(Ie(bx#clq9J6?qQU+87%kNVMXYHom>5XX92Ry86Ye>iWDA zt-iLpZ`tHjZ!~{xgnr-d{J9b0)$bTl{uDVBg8W~ag@5l?kTP;KwK3$gH~E|+XYD9& zq-XeFJEFt{EgKA>&tZ(U&2|@-X@~y23SH{rpOaCj3K`81;uwEI+M@@^@vir{*4r0p zU8Oy=j6or>*bd@sV~3{W`wH^z`r-6M^LLok)1Al>~kRXszgTodp#NExmMS5JNzl)^;EGPq8@;|%742u>`YQu<;yF5#H3 zXL%+u4I>4sHr=qA+g#XheJz*M>~AR7yAu@Ur>=q;<)_tdd>(YksYv>!mlNOU*vQJ! zJXp!HcfqUIV4Sz@)w~EA7wtr_KjBLC=+sh(K;XrEvVtX0y3F$_HM$&FV~I0v9&FVX z6p$dMcUIH0ete0GSy>O*dzH>uiIPGjHaRkfxhJ>?WH)zrN>3>fb3Ayg!fB`s&6fsq zNv$n0w_A`DG9hzc@~z7aCVheyAMdNf;_)$*8=;lds`Ac}jT2j*azx6E zZCm{4huWAbOWLi!S>c1%vQVYkNZLCqLNi;FYT?e-(RsC*3N~iOfC1Q|rp6(xJz4XS zizpyTQ=X}9TRb%47V0dt!VN4R-WY(nL=8P#sHeWnGu4bR=o>6ZNv1p4B^=W1@F|7A zY;{GdZeSXwtAA#i%btj+BBsNgRG5XJYbv`xm4WaU{0%|EZCC5` z5(>8t=M^EEXB3X5^v(8*-65$yo6LJan+yo-k5VpuJei931OhMV4HUo-hZ5s~s}+Jg zb=*qYpla_PK_?teN~(jJ++%Vz&v!2Isc73UiMsslbNh??_y(*_I_ooQr-wjgz z`~1S%%!Wq6!BWWD#LU`A*j~@d=#N3Fg~}Q-7$S(DvWJS!AM20_F#$tT8v{W-#AK}i zzWlg$b~%HH;&W^6Tq_V~S|%<~1@hj!*k#mIVXAM20%iyg(eidA<-US90WGUGNgdCiS(nDgQ z%hN|}9vH9!N+so1%+-^OsMp`XLfT6S*(CtNp-54jjnG6?*nJBhz|;Oy1@( zBn|e-#Zt6~2>L<8A3&)E^0iRoqpXm#=oI{lO9FRVI};Dcn+tpL5S(uHQx z_*s}WkZ`AV-R2;W#m>79@&F^Ny_&iy5H1m6lJdP=z)prg_7i*Tv2=P(7^hm5ruXxc zaCe@YUYsCU&^HH<(53Nmcd#;+u7RW}p5^;hW|&Y%C}^1wdzdD2MXMMSXsdPk{68HR zLEP%PnYP^-AuHWl2f=Gt{F2xE*A0TojtWn_CjDs z>#SIXxD3`hOji=TdstpwBS(O+Ydf;?uK6OEO)`Y~o4~=sD0k*p%e*shEA{0ZCD4;@ ze0Fxzao~dPtHPNLJT}+)ZUF?|s)l`Y#fW8)=@BqU(L^uqY^^UL{Z?S!$<+=_##gs@DZ8l^WL z#%oRB&?JP|P@zz>BRMW5cMPcn8Q;|DgwT#5ahIw!{iEez^Uzu7eC-z}0U8gjB}*V16o5YOmo#>+FD?O{pJ8Wg6LKn|8bR^_Z8@1s2N`<#?u=>^_+IRi@K zYWa@ocD~2$A(V2=ffDx(nnflDR!4CcLraH?`1iFl@zph!u%wp%+HZlS0qYmlLhCD#8CQ? z)IF7~ub4Whnu!U?24YF&K0T^**Z!7+{hssw%!Xe}b-s6gw#E&7w#NO(Y^d;QdSc}G zcN!Gcvo^Fevj1b2Yp1fsXLB5?m$YbIo28)K%r}}vWvH)WHs3Ct7Z^eDf?i zXy0`5-Jc=4D`QKhTJ>UXzAw|zH83kWmuX!ND?YL;pGXFHOK@#E=Xj|&K(4Gi`XR*A zjvG_oSsrDi;G$5PaOD)<#nn90=sjW&p*Ee7;rQN{Sdr*bU~S!s+qgHJnYWh>dn^G{ zVXkY%NW|Y0KIQm>foz3qmYo>(!l~HOHwdrTG&%tyzKO+L`tYU5ZlrPIJ>`V$mdzFI z!6YM&*F*}um^NL9c8~$Wxmzt`Y;7~|Assa}&*~*g1Jen-N#hY{z{f|AicSKzQyJvj zDXNsdB+T}Oz; z?HVf6$8(xvF&xxjX=Sic=~%2T?o)LpM)GbLOk#L7d$IQb7|0ZQ0mpT#$|;03)HoYrMQjsii}|LlY2;X^dG&JNf*vl3Xekd z8O6?&T(o!(PnDDGz7G%xnS-mE`Q^X~FTJp^D_wc#D8hm8>uqBNMyvCUuk}Ug6vRcm z!(~6UiS~wx(#N5I%)f0mtzsc?cFthoy=OT>)g1gHa^_a|ig`@iArx~SWKwbGW z9J#)XAS97KXyYBGG5puU=?rNwh)krtS4k#8Ks#^};G=`o-KZcY-Q`1S(j%ahoE^$8 zG7f?1L74+cq9eKC!WIuv7;^*Q=>Qx*u3MZToYO8MekZ3LKVI1}G>{|E-0-Jf%W)JH zj9?s$fmRd`Ohz$KpifXV1r!VcPY)kAf#k$NQqBcLW*paa=7& zh*8`PM+nX8Yz5||K2|KzsqrrHNkBtscNqL?0=SiUAafyqx_quwX%DemTxy8I5p9&L zw)#^H3%pBBC4g1Hc-w?kMK{P#QANi=`U|85hju6ewDxGhZ=)-KmZ&OGjMooC;LNj$ z;OIx~yQ3>ymSRJ{aQP6jL|`VX6|9X=bz|s*@+pH&+|~jwj*aOsk50Z3$>b%Y|Ky}< zSslm4{2XU8pnH6e8zm=DqQKHfFmT@Qz&YB-AzT5?z9Co@KM)QFV+ar97GmM*TZ1lr zL&BH=oXnk(8&Hursrf<&(RWMjf;I#FiuyBNX{^$($PFz+rzTLNK%qBF&Ra*H-t_;=~Lat>b{#=bys1&`D31GVWekElch-hT< zY`}_E!$fc+f{GrR7JqGn7YG`3?KjnAo#h;UkyeVAi2DY=i*9^&$8ehb2|h08Z`@Y0 zflj_Q!#_w7!bU*T_=PdX0HI>}pa`}H*^Jg+{xQY+{X_8QC!(iZ9YS=?h7@j9nzD#kaBBVC3kEW z{L-QJo@f3*M2@gExI+7ICp@ZOxMTJOyGfvZqE6o@S7(kLF2VVo$vf9L0v1LTY;xq; zzg00clW`R?DkTT#or z#<^6RT6qkZL2jO2yJm&mP~wkpEWst)Y})oh&FBljb#0J8vg z4@w46dh`+TD;=ss#xShg$#YEJJR|ZL&g_#uOzEgr0ff**D5M z{9*FFac2iWuF)jFBkW}s!Z)0Oz&8Kjs5iOfdYZV%e0jgxWlQ$Pc$+fJ(01oS_nRz>#ZGDI^|{)hWNKE2?7X&v36KG?Lxm z&#rPNy+LA_L#{QvWt%Xwg++^H6^86Dwo z2%$;J^Lvj@18rJ=klyP1{hHGWsN~4;NNtOp?P9N5p6a>doRs)87|xP==Nz5 z&l=7Kc;`mBjoiOs;8fzf2Kh)w3c0RVLXc<{9 z4}u%#0sCNHyB5ni7Hmq`hOPMn8ca`BN;d90^{jr!M< zT$bSY9E@n=dQk$Qd^T-ty>{IzgJ|tKwA(LT+lW8DbF$0^`=;zc0*^`zH#w#gbuM9g*L*Wb_C$(l)`zS=T~$z zynTJjTlh)gy&p!JxpY`I*NmO){SLn@|>V4XhibrW64&wBw?Hrv0OD zS501oZnfc`JEnk2hGBK$x$`vJ@5qC3uA3jhkRRz$Rc2F_K(!4o47p3Jw{P|-id~Aa zGM;Nt{BwN3YkUmRn8ZwwKg(|IDA$RT%~vN3z~>v#;x!`j7+Lal>ycPA;jEA7{ME1= z+$Q$Af`W_56|f-CD->jpU2}3bFGRDB-z7Cp35&zZCTo<#-=xS7sP7A*OES5f!1K1h zlvOxDfEjR?Wy~7C`!aoiQ6XVn*`gsuprz5TAhfL3`waOoRfg;pB<-bvZ z@^8q3a}%HBEpL0L1E2* z%g21~vL!%!{&pARsrq;>EO31b$w%YCCy=pTw`L<=P0Zh?JP38FY|0T8ar%^WCblE8 zv^o33>;^+Q!hevpNlKJ`48CHp&>A#@amwHLI1I3KDof6@oaNEq3Li*I#8>t;oaD?U z%MZKmqt`0_)E0(c+RDnU$=fKCm1VuqAgbmX23fB#9Ls5<8LXidRj&gpOZNC%A3OYe zcBu?tY4QQxBtv+jYW(tsJ?F<* zve*8+op!&d1*QpAsP<=cGZQUjKC@cT7MWFZ%qx60BWA^0y_Gt%@<7!C`lt)AnA~OLH@Wh0g zh@h%%=7--_4^*{nhguUD(aVvNhCgf*Tmw^W2d>YD-%VqeK>M8tt0LN>{ zUPnnJ?)HQ?Ye>GK?|%rTWl|fO)w*qtoUw?vMp$nsF%(T5fTx*LmnHR1PZex+*&q^0 z#!VI!oebvjI#OpZSDMA2o;ENFLAu;G#%VX0F)GndR9J&SPFn?nJS1tTFpN-@V9)?rj<>7t}b!P%{ zcP{hMYb&dC-15J^amkI1=8+;A%0P9|?+YCjw+z^x7I%-yQa06=l`Lezo3rYIVl2R5 z-j;b|fz<`86Q#@@MoJba5P=04@OU1S5FDUj3|}@yv57&nnI+oHOW-k`I;l}nfd)V!Tda*9zH2o`s*Xd4tef@>DI>bW_4d11=n3(Cf9Ai zxZeS0{tVV74=p^`E9!2**yicwre8p}ZK#vK z)@Q*rJ>y8DRkWvF6t7-nAWu9@zmo{JDpCOOb4gs&_v} zinRahqLWqp+#scDf@PL8@LK0DqWw;%KZyoQXi!h|nM%(-AEN(%qWx1YM9Pkf1M;g!^+W4MZ zhC2%izO!UGa?e(G3ppEUUG6~!)fzxE>A_y<|S_?J!H4-ZtGyXHAklMKUA~yRn z4Z9~E5Rw~PCJ2weN{Jdi2Jj$DY3eIwb^QG#%8HSU;EIHE+u`~ z(TzMiBczOdm{}TYLdh{7RbiX_jkvMaUcUad?!T|@pX*Lbh7wEtx#q8*59NPacYZww zGXp|FBTKXYo)r=)H!j^z3!700gYcTe>)RxnLB61!2EiiT;4_fFD<{3aZkX66j<7?B z^pgqtv+p9%b`G4{hjqnZ`f}oO^$Mrj=1Y_vt}Mz5(h7npEVw5cS+HyuB)}4&jxe0a zH@l&(w0dOIGzlKLuJJV42UhF=zJv)?9`R_|D@U6mdul5k;4H4NM(~b!qs=kB*n>H&C}S*qXO6Dk%MujuQ5m+z z7Hrt%u8)=+UAwqV^R67}rJd$JvTv8y&YVUh#0_3^&}>-&RlMQ0&&@2kPu;s0)x{R? z#H8?`7RCn?zYuSYbrZh$8!6IP=ri=MhHZ(@k~YPKKBknElgbB)K^-$2fjngsUQf_-&cNosViB)r~B{ckhqa z-*gdPQ2A44V?+5ASj!EfU^kPh?p;8A^-G08FPl&OVoF3+FkRA;uFHxJXyeNoEayv8 zvlO53(C(`ZHHHEB%ALV(1eTFDy9}Dv{7!_Nc~GKiJpHl*uG_aA(MOT8IWUqt% z=!UF`!u1zA(>}pKH8vMzfHfKhoz@SLKo1~Z;6`{0GK7=A z{TR>oN$A(B7!KMgljOr5;}GijImR%juv+3aC0f*N9#{l{KV#Bs$B-KQ?BB-&zlZM6 zpmqlz6Ty8}4>q4WB<%k{u79$br{bvnrvdAQ9jF6=YF3 zFo_mXow%Z5gJ=;WJqCT~d@I{#j>U$0S*r?Sz+>Oax3TqxR>fL?sL4;Ap|*VN*M{cH zxLHUR0wiqxhR*bXo4pygJ~%7_;eNM-x28HzA^lN67cyvyq``h!ARdNQJuseKFGLak zfhsbSMQ3L~sb~D8Jb0s5V)B3>mI_zRvdME~`1BugwflwQBTCqh$f2HagG6$p@bxaF z8n?2F1%n1Est&DJT=}8A_8F!eu>|iehV0f|_juJ~N6KBeH4GZACD_H?x@}QdAjXQy zwJZ@$ju?sZB^twBy~xxrv8^p|Z&BowJ8nfb!y5#O&%y4PMhLCzP**a-21wa7z@$EF zcFt{KzxeylGAr7>^S>^~w7NaxK61d$v9Q!3LGSPdPcAA` zku73?U1pt3f}m(C>ZqVyR5GcARi573ch=vQsah<=Hz+8cmB_M%L3LyZ)xHDJ;N+iZ zU+(>q8l25qy0oQbpP7fRq+?&_QQ;9_){Y?dK>vWk$|vCBdLezZBE*puR`}_D5oOhF z{{eM}JCqEblIGd+xI1jxjjqW4#Y=WRxCh4K74%t7O2!Xo{vPq!PAdBgPw9!m_Iw&Q zl$Y?lN$<4TE9Wzi6iP3R`78Xhk(AEY?y?h$?PVrU!1tme8{e&^d#vmBv@Q@Yoq3oZ z9P`z0*|QBm))s00$&6eO+Di?9AENUPKf2R@dNiPsngsyYbcF_)!J2*vULb*62DOE- zrLe`Y<*-F8;ZEi7+3Nw@mfoh`w%*1@|A6=_WByK|Kgre03WVJ9Nh*lXtcmw;$R%K7 zW%YRz`47LGqWK{Fcwqy#N{mv4o^mvDk{{67X8usvJ-#dUR@^F*x?96*UtTfq25Jda(;r zrw#4I2a0c2*AvFNWaNx7qFCMm`D$z^A1_&*z=&W}Z1N-@DQQ!^ zU5=bj>>YeQVKF`Qn@IG490GdYi3tZ|hUw>+2I|mnXP~`Ra zdl7{>L<7oabLh|O3?kwjzwlp(nbLVz;pEB*FM`M{sqjUz_a|-};rShI+l^2RGJ<^rydZqJ zp1yc+Z;bLaFJBO!n%S|i&kBhY21mWN8^6K}Fcz~^4);bqhvmBD5KpGYB-a!&`iLTX>^0#o*$JY$ z(hGTWiq0fy;;@tNQFt{K>1`g_xm@s6bdH3TVY@)9Z^0nuia2p-x4)y~D)!tnLC0lr?X+O=Ml!st#(taQ@2vFM3zK7W7!B8JU^7DH zPVJ5^Xyf2M9s@%U(mib@KCL5;@;eWmKSEip&B*Za-3v+LsenJ_l(KgZF_WlrQWq^Z4n%mKX*mS+>H@$0s)^5aXPS zG;WWzeE3jd>rxpukI}P?Hxc(HJV+opzfISF4@7{+FQe|CzUbQZE@(>VlHFXOapTxU zMBiUPu%4h+s?l~*L@}^z9!B6|+Ed*!tYT}mQQ=MmqZH^NIf4;;=T5YrvBKyj{WL4r zIeZy*&bEWx=su;61nkYn0~R|xD-XN1%kcv7%%vqdxhyymh=XWZ{tTBE1~gHY(o1RN zoswkDUH>S^xwpYm2C%h*ZYDOc(b%5~&}Qx%VRXTC3h9ltI7niOZ0nznB*3a5wLd5J zve{hwoJak!)qfakauu2NJ#9ZoZbqxNKsR{jFz{Bd#f!Phzz^{%pGAhF5!MMlGRR27 z&1>aO>s~x>h>%0Pp4CnGL;jp;g&S&>R+xF4Dr$#atr4sTDk2^yPHW$W8djbAEc&PK zWwWWrJ^BTV{!WyN;8Q(Hz&?1s|2bBjOXykF_fYJei(!xyeDC>whQ!@B*!hpI`Pko% zpMk!LjYNHG79SZg6Fp$1mlz41kI5X4CE^!`yNlgR$a;6|5<)3N=8W2e20E}JP7vfF z+LHDneB@~J?&CdYaWpa3=JWK=I-fYF(A=~UvrpXr#_i|F7KbN|KcV1c?NJwjAS?vK zm6@;b3PuJL7aIX<{~=qZw;pE(d&~?}Hv?|CSuKt$9C*y7JwHmY3i7=V8HW92db+*5 z_85Z6)d%((9$f4V-WO0awtnho5_)oH2Z`AoW2A|h^DxIfHE_pmGv9~KDap7TUn;$n z8+wCYWX;)1j*Y`T(b7L^&)-wlpUI3w2CnktbK52HS*8CweUrGLgo2)fC3vrMa7(QCkZZGW$&oloQ&jl{;p0!}8^YH% z+S-wx;XY6#8N-NQH*k!;o0zJ{h(C;DUfpyoGu+)RFJFC;cbyAkCd{9qBbM2-Y6%Nv zMomd5wvdzDX$wjS!jNm&Eecvgzcg(bpRrs`vIPjroj~>;c7fDMF`5Qy(HA0_oLdiXB9;Plsp=KW=Y7iBC$YBv z1f*7gUd-}J0=igyAXGCEj#x^PC3}Lw>~bs2d`&6BoZ~OaVi`+qyM`>C1<7*eg1^W9 z61HrYu@@&u01HgKpYX9X_kyL605I+}Qny%9$g+UiQg{wAEvMwNT;5tJD7E3-2^FO9 z!zbM)$yIF9|9BX7vdw535h4kFH5OV%lol)Vcy2b*4C~@}hBki>d&(kZ(GCa3k#is; zs3A%u#RSz_6{r7)dKAr=v@Vj664@T5sp|yo!>>CM?Zuevqox2c8`Bo-DIDva7Q@@^ zQA-j>e3ivBA0vMfm|%AqZijZ?0!P9u)og=f_^TGJ!(KgT=Hca|1bR7`Y4W6VfgG6t zEqLrs)JvQwMshmz_(C495PS-t>5U{wS(#Sr@~8$(f&2IqTx>kSczpIRnVE68_XmMu zo00Pkk26-Wlzj~@gu~pvL_7oun7;z9LEr;tBrMwHy9>H)BB!cnM4GwhVj-rsDRZRh z1w(MBcfJF$3UTCfrM-t-bK^sLC`}j_x>eTP1D1m$_X9yH!)_|<6R#S;>sjJRLB5$n z??5zkw#V9-YGH(Y7rqY$h(T(M5uiGNiUV!4DWfIxJ1wN8JCzdjQ;v_;Lq$Onh9p2$ zDjc*8mDbbb7G*Bq0UzBf^Z5p>*cajc9pWeGPvF05qTfmLC!MBlHfM!D>D2sLAJF~p z+Ti~>l;nSxqw@a@B1vBnLzh>d0~R%F)qy|S#ZOExAuos%FXfLV4KNwj0uqVBvIMz- z`wk9+E2p&U3$vXM%YcEfI>6rtQ_s-uaG1exJFTMAhyKuBvGO9Cri2Glf*DFI+`s^?WVwd&wu zvY*tp<3qu{{wIMuf|c*NY*6lEv3N4yHi!uvjR&BaNWh3CM;5{bXaU6{HPng{U=n*2 z3CvJ`7NoWYm&)u5b7+Go`Ql9>a;F2ouki3=u(9rgyENl>8{w|2phMjIPF=(FH^(mY zAC=Kfm_mjztQ?7M7k4Zd-pqr*s&~7w5tPH8H^VkfH2Hvy`HSLAW)kbPH)2I*N^WJv z$CyZ!qkU6-#T4T>uX{a79?;b}jAzxOApqhnsy%L$NHq}N}p0r5P=94J~U9fOAZW zL;w}QBrqz7ianIv%kfq+pi$5yAe9Xc0+wSA9V&=Tzjwwlawn4nmfJ%52n;pkB7PA> zKy9~PkdC1{ov8c#Zbq7oxdTiit9kGaVaGj-FrLv#dFHt~6W8lwPcfH>ltfe(D-Ipb zlN-FHjk$hhchVkgR818lA#mEmkk=`Kr$4oSOQ7;JKV!e}!p`{M1oTP*?MfY~n51up z?`^i__*yaTw-&n1QFeCucj5j!6#oaLf8E^KwQk;GB7XVe{kdiOkLDQvGf3p0B;Tk3 z@m+B-^;ef6Jxl6(3@sR}DCiE6UL33-EM!O!FKrrZz?UHu==gL)U3!GWUI7YaD+>$H zCUu~#$}lBFSuoMEmb!=8Ic1j%YpX`5=E{vK=ZjTqi+0u5UsIh94h(L6bv)i|N9%Xb zQ%_zQy;nakt|bH+lb_s1a;6zy(}U-Z>nXu!z#>Nl&`$l;(iqL=3hl(=cl1~+&`pf( zlY;G62;zUxmyVN)2h$Cll1eO4Vm11qmGla zW1id%r6-S_B}7Yf4}FG2o4kg`k1T7&|1-s=P_9qZeV$BAV2MLAv8a z%dEWl4iln{i*qzmqMjCrP7{~vz@$y-nw>m)m6%wFPID&kCWn;m)`4J(_pKk~QOeaS@omJs4M}bHl)& zeJoQgvAP^83ljBchtnEiG#8qGRidz1W?5#Twosp+7{l2yKcd!qi=dk{xs_v?~$2DI2ZW=yh zdqsm55lEK4alCaC&nE|Cu7Ruzf1>&*4dYr@nXgvQfcFE^czEIYaRdH7tquH-of;WuAwo1d=~Hv)l*Jmoihl4#vT>RPHkq*$UounQ%{5k#gh*!k!xd!Hh#|eA63J@V!S4h3I*6v{W zL5Q6XV6rq0q#@ef%vTgD#vq$w`H6ksnSdbFbMFQ1`^j|SqAtEIs}dYB#aS?CEC1z- zx7Xky3KOAV=^5K7nbe(5q#ICSu`h|bIHTMdqxNZetA}X0aFpd(XYK{>V6GjGY?gCTh@M*i)u!TAZgw8l5*@-_My|pWO$RyTiEpb4lmO^;-2RW zBGoHQz_`C)J0eg4Cuw0`uMIsUTN(1G%0rYx7(nti3^n+&8V#u@3S=A)vjhB^4}V#V zAmJZPzVG~!7fU*i-#Ww*t_&)kZ|H9TZ|YTEGWNq#Dr%Jamp_?=$f?Nb&jwcpnHxu; zUm9sR4Do>QU2*AcmNR)W2J7A$c3yVE47!^wRW^W2gdu z5j8TOTdsq@wL$7`uv1R-%q84{;2Kf}z~MFP?+pJ$b(#ibf%(CLVN`zldc9(c6RJ04*((5SzJk z8h3Q@miuN*3eRHSL)Lwwq-= z{bD9x?FF1Jjn7}oV4=o@5t3+q@e?M#^a&g~KC~e*G*&I3(Nx{(gn8-IlhZ5v2AgAR zL}%_q$G_^g41HvXvvx@ z)6aYezXfvha2d<>FS8LZMSckw;3;l%nvfmX-&S6Yy!W->#>qzD&OE2RRpeZXsqaIE zIEhMw9*L@UFjHfNoWi~^xGs`E*^>1Q`>En4SYHMUH>NVn&%m3pmIn3+VCH&V8O%@| z{Z?NApv4293DEeJBYW|a)<*k>xwMxDCY8?B=L?J95!t?k8e*^cdq{Fl<_XyLU~dZW zBy29nJG^s<1}={iFr_g5gJyOnj54}b&IO?ladbVcZU>X=lbkmd^J5*3^})%D9Wu%G zS+?5c^-7QIeb#z)8o6z1ZB~wiR1$KP7b29X2tDTzQ0m*|7>t8+PHYEC=ed6aiNEF| zcD;DBT<#cRv3_48M;bT+w z$F^XMI+z>Di3-3yuQsoy_yy__xr}N8FuG$GIi)p~oz+=~wki*e z67lJquPagOMn6jl@m$865-*W&$GbP=>=Q&r*97=L)~t@>3(|Xw%qbSMO^78!DTX3D z;M=>^NLekXM;DW~u(xffAPaG8awI!#BS3O~+9Var#5#L7(v$ADfzPbfT(^U16O#v> z3Zcs`40}MI2NH+go#T@@aJc#@<`f`9csUlSXd;9>eMklWv&f zT;YnGZ8>gpoI8nvb3PqB=HS&P0WXh&j~_l@y4o_V*&PTvSMnSqQ*KF5u!yhjWEBT^ z1-N)eN{ikPjOS@~x(Jtz6rNPeg_#+t;r>JNOp zM8KPaAFcuLn}Xn#Ny&(5$%w6Soq=l%rd(dwxlAD=L_E?+%&lRUgGo?l0rAAlX+o2h z=SY?tJUoJX4+YZ>6~Ay;HzYV`#!j>rPn=M>^E`^H3*PV|Y|5{l=KP&dI(`b5z%1=8 z!$dDdz|M6h$TdxW%)>eMQXLRNb;Gh-tYQQN=&aTq0ayVs58GX#REf`@ zNFsV8TLm2M5j6QrC;INdsNUm?2^`aJOyMF=)r*IH>IH|EE9GZwU(0+-0mj8UWy|d= zIMjV%L3P7VeA!yBgP@(>W4wuFo3c_7>W+{PYNvZuhcYic7H)|t^4}r@<~8>eV?d5N zZUcH0b@+vxc%2b(yv}5u)&lcA;UWo6Cv2|ZZ93H#QpT_bgUBSBrCj03O|@tpn7_xU zQVM8U3Y77-Hkce9Lu5*|DhJwRJlX6>jj##8TYJBmDKT_N)@=s~rDmRnhvw}uMh2hX znqqO4z_qGK9RXdpL=Uxu{_5a)BvtkLw)&!Q?v3`kH5Brgy}=uF=9Wd0mzX8pm2V%v z3v~?ada$*Op#|-zlS}yBsK=)>oQ=Rz)woU%-EkWQenX;t9IL^QGh;nV4%KjslKDl% zWf9^DYL49pEv{dD*E&q5YIoW~7GGgKje3nr-qXC=QN!VaM8*AihCAXwgtA|n83R}^ ztb3@8XJe;@r~gzW`8}f#1ywD1%kq*#S{u)vrw{T`|J}^A%I!TPaYD*jbIWv)kGQBb z^fvERIliwD8Bu6d37Ie*WldC4*8T&e%%}Un2jt`vIN<}y`E6xU4jbq>(+DRHyV#95 z+V?S3g(UCiZPxNpaBBD>{V>aD4;KXeFw=2vGL7;q2uazN2#75FqF0%gobDuf8z=;Zg1 zv#-RH*!U%yTYjU`v#eozb=uu=iEG+XQ{U%C>omN9a@219asj~}*H4#}YYL%rVX|cj zab$_Ha|MOER#KN^9S?NeRh?Sa2*APLV=%ppkVXH7)eH|A!~j6fy^T@M+!A1>M&S`_ z>s}=8h*gkIM2ilavJ<7zY1Vhh5u{`_@wM-{pTm}$zzO1a%r0jowN=c)-27pS*std*y)!5 zvwV0RcB=Ubj0uPmJ>LlSw!laTQ|7DRfOKQ(rU*>rW3liLa{2sa0p3a9P)at%WI*n+ z)psZM56GzS4zo>SrKX6|GR5AHQ{u&^nqy}7^q+6WAbG`n-!WFAPbQVs29(v{n7fyl z+*KSEkc#ge=ftlD4%yn$l-*Pe)}IkjlVq;lz5_ELmcP6(z<2o3lh zO^Enmu5>kg`^@q*x<(##l?~JxC;m*6+T$|E)fqIo<52?kZhr^U9+&Exggx-Hi8?dk zPGg?CT=+A@lU^!t>Rr+9nb6RZWa*bOA{&QV zvunPsT9R-_NvKNY(Kq;J9Dg`3@M7NCB3Y?i=2d=5U_+iV2Aa0P$vIhldN0YYCe2am zpC`2yNKOfg&$eetjtUYs^bK3$yihfD@L$GSzq!2W!=Y#%ZrHK)i(%Injl&5@{#4hq zyZlBHrG*6%eBQ>eUX2Qn2C|U6Tf7ZNGYUWLY*EMwdUBpCF}x?_^&uR(3p0=m6D(2G z6;ad~pS6Zme*5r%eXU>k&m*GWSKy|4&|7d_d7y-Oz6taAq<()6nHb(uzsc+AMc`^L zPovoqQ=p4!m@}+KHr`j$OEA#AzeMV)Exn{eK0s80_>vn+`bA25A_{kLG;svUZ!-5WARgsYKoAyXK`l$fUNfVZu$jP z?4e5BE7*MvpFWBrRV?cl<^PR%acTGrH%x93VI!{hzsv%EzgYaQE5|>L8cNAoo)cd-dfWe-jsEM(QSARCVOGZC z-_J}c8Y*8Ivmefg4EW)HGG+t*%9vFyqh9`#F-t>%JinRl9}^x3Elnb-;qgxBWuE0~ zx>UNnx@eTtQGOtCwUo4p<9;PUE2E{gaWqcn508vvKgq*+wC0gzqXWM5+2#q_ZOx_g z)kcaiCRc+6l?U6W7rxC`6CS9>irRZaao!g~C%uag3Kw)O`aNowz9t=#4+NKYy%Wo%7-5@(?nbYrSB4PwVpc4 zx>ntJeB}ys`t(I+uEmEbW*XF8@*antRaea1H>f!B4U8FiwMD^~iTXtB1uB7bEu-$q z?{1(bD}+HYb90S)hv4S1MrEXB2fy7j;jzf~@9;b8+jy;{NvNn37|ur=LL3*T9h`fU z(?>~Qp|PZHJFR-gS-vd@74M3^wzC#{ao&zOp0}w5lf;cQ%Jo(r-&%t?avDV9 zR+B)+m2(za?6ocs|M0e0Cm>P|*>}NB6+2TP&_2W;>z7h1v?`n^_w=$)mu0N7qXJhl ztTB(y5-tvFyw92`Y!Fl)lOhVV8XJ}Z|AtOImA`zhcz8@yUDUgDUT@?mvF z!4#~iLhWcXZF68sK)6CGpTrbet!IT?TI#HWwz&JfqF!%~l|MF**v1RzoOqd4_{MaA+jC;h-yaJDz7Y^DK{LA%`Sc*-N zCE`@|hso)bB=y2V9rQ!+Cz*;myie;}vN*=;C?0y{qgC|sx^2|GBmShA{S-+QF4|V( z_e7~8D34RpO%Bm3JA*6@oVI7oguqN<^w)U0a>aIC#QzC4ZvZ@o`5aXpC4(@NPbDIl zHQFI|x!`HS*m%7xHw0vhjtHI0hhf)UyDOz8RL2ZJcVHAJQi^jLsv;`+ z7shVjmmkK_mjVU+qs>;m~5!(0-)al2a~)s@`~%pHl!^(FAlVpt^H@DpL6h^V25% z*rJBo_{FJd+6Hw`J+k{MB$^ep9@eHw)8>XY@4s8KBzGcEa&#ti7r^zxf2_Z+|MIYB z&6;ZAsqqGT5jLR1FQm)zfm3SW0Pc|3OPkxvi`f-g3MhAR@#e;7DtLd}!|HSWyN4Fe zSMAvtVTQ*0+cB`>bdc;Z;r!gtvS^krqgN=ISKxQANbWn(huI`HQJtKm&cvA}wi(x% z#~qw?N{womZ>mRqe2bNQvL%H+a%I^fDE{~EV%!(8^QTvpX4d1u!!i>RJTkXgr`DR; zTjXyx+j%xQvo2WYkES`ep~sd^z=)4rvm< z5!rWyXW?D^g8MT776-78VnCY^W@he4`R~x0Hn-9U4 z42!#!(|cHgeKH#LIj>%yJWZ+*(YdJa&(v0N%HMGRJf;49WBBKmk)wR3!12{Tto7wS z`u`P5{vRO;M1N8e{&T}nTvPrEN!XZ6lqMIdE*=(w3SG^G7rItfyi^yuZk#^QNS*YX zVJa~T^^S*o$(6u;1K=G!NFkb_$U%9TPEVOzc}-t2A@%wAc!ANyk(m?K!-t6sK(@Z$ zVX!W;C5>on9+KNv-FNMtR#;Wn@EPkChkh?>RQhUC+L)OL3`UZO#BU*^KA9bH?X2#L zR&Aj4)6-Q@*DsT!hB|7{W+9K;sE65DpTRD9;A7ai9N`#36fl3Ut0~fGiyx1tl3*(< z)UFESKv9iRHhKl_TQAg8VHTlHD$sZ@MlVE8EE_SOm`}{=Ad^cskCl8*Ch)z@kel*v zGf_#**bq*zrw!0Xke1UTxKzXftB@cPNIeZpr4%EHG?LFbT&}cQE_6weA3zH6$Fe;1 z!nqfD&^4E+ibX8C4VZX*>8wm~B)>>F6SYuDSeZLxf=m+k2){Cwe66L?ibP3`ovO}5 zWYIFX;Duyz;shXXMBSk2LJO1-diIXHc5m{8HgK;XDVMEgma{&8S#q;t3_pU~urI)$ zu*GQAqYHQB5^(pn&!_AvY%|CfZSQSbp2mIZpb!LR&_#U1DtLXHF1@n{>DV6rTcXSU(Y00WmE zx_v33Rdq8?Cf+_v7g)Vzwm`8wS{IEpSQlFen59R&zHz-a6u2%EDHl5~y<{$V-oTJN znr_=hBp8wt#&jS7+IQh-VcY>|FI|JwOP%r+XTw#WaKY>u#zLjz=1&!;&Ghmw-&EaHu)v{lWu= zC5FGfP|GXM=2uF83K9gG9xzhh7VtmIlj(90Y$;Vi4YVNJ8+&vTK9g`HBG~e*`nrJC zZE7)T!f|L`Pn$LbZK+oV_yr(Cv(mX_H+*lA#6LQrD!#x;?-fWVA+=YBQD~QZr5w>_ zm?NaEQtlhs^!YP8|2_x*IXinhLzaua8X&h(0RWi(d!xhO;g0`N(EZCo^VLJ-@I`t2 zS20(h^6c{!jQ3etsb#VF4G6drpNu?+8aFqe2xJZ3fCkhO773U}Om!@*T{tnko&n!w zHh%pZKG8%^Ok93}m8k&|zd&r^kF?FlXMxXXZ}F}1%Ej1rmg!T%4!7UVn`v%aF5{qsCnMd*b*&ZsPrljJS{lK{H`? z*|~80@!Pvc^rW@-_eGy!Z`tUlj`zc+O1}*s7BlDn#Y~vk<*j+SxLhv@b)6&}u zwyi*~$Xt`Aq$ylwdR`$r^S0YGZN+;Y{hoNdyGOpIryuSIF?bUhDEjd(Hn>l~LdZ+< zyNPflFgL`nQ$@2;!RQFlqAZs$Qm~P z^>?%NLW4IqVSIbaN4Wnnv$?z{x#vr@ne4ccr=%N4x>(wYD+f6P%_40M1#JzLtz5C{ ze8G(;G_0wbICfmQ!b9YDwZ3?}$m)93dt1KL$!2%R$J-E%{8@Qk1ab=hnD(ABGJk!K zc;1)J^u+x7^2#*Rw4>&DnoI7DQZ}n^_9uxT%WU#M{fhC;8Uk$fjg_cLHi_(C4N9wTy%7ySQMGh&= zor~MdxvSeOzX{7!L%)!2y%Q9PcJ@$-Wu`m%32`ja%DM%i*iSY7ZhO{)v0~gg#3kF3 z8zVvxtON3d>a)ji3RPPMME2+rV@W}1D0d%1J2{$*(2plOiX02^qr`C&>mQ`?h;e3N z76U?281t?zl|{?)Bla3cMxLd+jGi=mq!gV$fM93V(7R-BB;G>fbmH3Ssou=;YOSD; ze9agdK*UrD-In6_VJai4K4BV6@N)-+qZS6M9RwOzqFnbHao8X8W#6e61UkaEN}jks zvUj7N1P8LNO;CJ#+(HjfYDEXPh^QPj1TSr9?%%KC$}@t|lmyLcWbr~%EB#OOt@HD0 zq(DcU4ua$Fs9K-g#Zv<|`dhdZkL;Tiqry05;|tv?jcx> z=9n9tAWZ_3FMS;Yb^2kmm``HHi^}@f;E&FsuFO;IZ`S-R6e=ka)NG)3X>xRtI~>6A zPsUU859Eq!F(_KDz}}E6?4`9VPlq}bxUKEmkP6j(q^#mwi%q+o9X%ZtM-y-DQi5X% z4hbZAIILu}$GmZ$gZ$45E6K#mC_xo_&qpk`-CtbbL7C;RdB5xQA@17byEwwVQ$yTn z%XkJidC=3;iI~6WTh)VhgIo`CpOD97lPApTw)y2Acka zT45+B)^0%6#b%i$%R$nj8O?+fkGHW?+T1Tar&iLwENw^E(2Vyg7_$EQ@3i!sR>|5) z>C#yVHlCuXg~G-`DN!OprI}(Y5=ULBv^*ZDaaL$0^vOAP#>xym=4B^u9jJa7J)T*M z|Ct@cC2$$NIE&@bW2pBP>EAjvQ*A zyfdcyGFW|Ggz6ASO_~!#k+a&j#*E!{dAaZDdj;DFShQeO+pg?SAVW~Sv~1dlfIT<4 z(V#XHxmP9{4*ugPIOAp@f+e4{pjD&|Dl)hFUk`SW+Qp1g`M zXmSY{0#}d=R<63QxEHR`%{ko8Ec3VQXm%>D35>6O4KwLI50n%$1*_$TD?qg^e3J|} zdqFqffN-Te-5k7ApMJ*yNC7>ENFuTGe)(}oa77E#g(|*9stF~dSj|!boDhHSzVyqw z2pnfB9po7|wi`EkFE-#%+Q;cv1;Shg07K^+2dl}t7ywM{&$9&orUn_LiV?Iz7g^)Q z*2D0WZgd062s*3>#q@0-YB>m+j|1%rUxFd3xMn4pL`C$IBvh*o2+>RFWgf&8DEXNw zzSdb)##N*2Z~@k~+~tTJsGf`9N2UWJPZi;#y1h-w`Xi*FPE0>9A7V0I45=vi^l0!; zw@Q#Ru?x0Vgi^I?;OlCS>{^c!`zry;He9W9z*93gf<7DqWL%Pc9CFbSBo=iXECJ~| z)<`*6l%$i2pN}YhLapOy;G2YE+yiqHpF@r!H}NdEJ>G2upGMzwv+*4_z8~HIgyUni zZtg<7y5(R}ZH_%xskhre{}zCv+MIe0K*imDBM3`k*D<*n{eCK-sQ$Y#s;P6W82A^q zU^I82_yb$P2~x3<%r4jiGHOlH%y?!`#JL)k$&?-9p$NPQ zEq;$S4S;*M*cjk?1aR)w`Y(?Q8vFi-#*QBQ`kWs7+L|7F+3><)(F|> zxGo3zy?ttyPA)k^DV)P8F4#7_NQ-ATyY(MP5^I`lDLvY@gD)l#*6eUEY0YJDxbUcW zMX#?le;aTQ!Xwd!pVjyd@}*wE#P0~aDGj3`HQ~!X==>=J|6cC>vk;8c#6sc!B7A4T z|IZezzi`3-ECjzolAY|W|9z>aYGI41g7Q)6T%bkiVkJ_8%_(ipE@q%sTd^o*h9iwv z6Q@ihox03s<>o|ebs@FbHfer9(!NzCFHbgg`%7n<_nFTmn6VrBx@`P9YX|^z)Ij&A zULY@Z)U55LmKil=?b*2MW2T4WWXlm}RoRV<_U9%X!1>V9S~bcQ@>pB{t#u7oW8Le8u#2+y?)-tlY=6>+G3{FVGGCE(r6+De9NH%hiHbCD6~IVW@1 zV>YX{#gtS1nOl>ITmy(X?GeXA$t~0)3?~0Bqf(Cv9XNU;>p)5JJ2VuvD7jk#%Bx69K>=9^Ua^g`dp2@MCX*Nw-chC ze=i8_W;Bi09!MyJ>O8PQ3rk3eW9ii=0;QSr^$n5nN_3*R5>Lg%(8Qy2oTX3u=@u;3 zP9}%tf}oB=CMf<`G@8WCTc=(_;hes<^TP<8ga{PLl(qt>&1_<(2*Rv$Y;>KW0Nw9w z)MRy?%2>@KQco%?6d0J#XxV7I&T_M$_3b;b}$>U&-)>x zHgM{he5+R5$mpO!j8(NN9WPWTSg_et32n3|wgp?>dLLTd^6cJ%=h&BqI6IjUFDaFR z$i1iZ9_uuV8Zm0ogN;PvaL$)%Kzn((Oqz&a!}U{!4!WG5f-REShC}hy7exuT&kNLL z#qr#}b-zVs`M1&*@|(a(&PzPHIIS`zU#n?>))cl=StKJ#xKFI!r+euPh(*qr?PsgG zTv5~X+%aRus-d|jtiEIH3DQ&mtRngeJJ>!$ zHbVU9h*~GXKITZ1YquItUv+aLY;Sb|@*!mF64q{mJcR>t#U_~9b3I*{X-;o=NqCm)=Q zfg2pz+`vsJ-!RAHGg5kmb!=EH(ae#E$wefnttnPeX*VdMc8hk{1KU_CsRHjXg_3hz zxG}%yZ%MZOXu^x+fyR@%!+ReL(PNd@mqf@wj1#|nHGhp>=M-i6rKeu!I660J8fDT2 z?5veKJd+A9`JoUFKOq1ZuAlCVVRR>P<$SQ*los!^DF6JCI4WLuJEcLv9TK*Q6 zILb6?K1wTq&tpsAfpjy2+xNtS7*$xGHtoYE&)X29kfqK`GC;rP15Cwf4_tG83`4fU za}PF;HXKbri(5q5;{%cK3CZ!vEdNG)cfB>8cBA1=<{iZ4lOlY2Wf%PkDDsR;Kk!L} zy@AW2;Gih$VaN|kEdM<&UNo10JVqGhTgYXAeb_C=l5MaV8`cNl7n_KaFBRyLX$6g? zwXOxlG6$~8$GX=QKU7N|{DwC#>{F<90f|D$+G!6wGIoa*sbcm6^#v>J)U-YkzQ7^3 zCG=x88kSgm=mxcPZ=%%4qJ#rIfiFMR+=j-lt4T2<_bH&1ka;0_)$@cGgUKM~Pz>4p z2H6fJXU1XWDwiDgF5XMb@%jsJSnl{jO-3SHXjs>Pc)Q=u9>mVUs`Wn!`DmE2cH7IU6BfJs5BTq4d}Rx z`mgJAhHdi&T;NU;zK5V zKR^*;hR%?CSZW!N*D`}j1wD!PDJMLc_sbBvd{C}n#Yv#C>GNRLMfIy{K#{KzZafS<8m5V(fP9fdp z*91~!or~NB)DawYM9cg(`Njek7ANH$`j$iUWB7w=V7P_RULvf|S={LiEr*h4!d}C9 zxOC4=0bKCJ7XjNNvLUZ%wqw-MRGF{99C8faTc%4gTBh+^;utwqHjWW~O@9Aroj+p+ zox8LgQD0NEGum@J%EuKtv{)|zZIhI^>FYt1&o+3i=MLV_i#}*edjU85oFja!n z6pggx)XAp$ZuFAdHz!?FpECq&onqG*h0*KOb@vi@?U zl2XMPMarr3@=5kO#=ZC7k4rWHRnwY+5K-Z7mg9*~-_~d{b%*#CdKA7*eNPq@R4k|N2doH%sTBQC6}o1hn30Y{E)#8mBbeJ_Sl6+%FUK23 zh#ZN5)V@4Rw3$;@j<-=IVWpc6QJ^DU!}unhXW7I=YF@mBR>!7MwT7JxUHqDS*q-P2 z(0wF0l#KHFz2Gt$nfwrwphoh99uJw7*u-5k3Np)a4ZeF&C2Qgq5)HkidtIf1P~8mbS~;7fgoTyRE~9M{}T)gpPxufotM zab&WZkH6q{N`e_EKHiQED(~x`HrSa-^WDWx@s(S*v$j)*A>JOG4J zX>mMiNVd4`T65VKWJTI4NT+A(rvi;=y(ktuDeN0r|M_49WH9jE_R301hTGLd`w)E! zXYv&;nBSmRF0P|Rl{FaPU;Dg81ZmxdiiRyI@0xwO2}>T#=+f?pYFwY-nrQ`921ir@ zN=Cxs@E=Qt+7~!>ZJN)1XP@z0VL{NEv1rHj%IbZ_%r1Z3Mw8rb-r(To$A@y`JPr~- zm+|e9H}&c5hhUe~hWQ-S7T`%LPSeQ^#zP>@kyx@p!+pqT0b-J{)EMdGs7O&|Ps+Y( z1sjVw&^ng{O&O&2r!O>Tt9%o){*9<2A#f~R3te^uP&$h#vZtfLR3mxSA{fQ>D>e0- z8#6PaIt(3#LV{(4bJejwpT)ulh%sl;@bbOFcU;F4=oK}?kxinuA24T%?qT}fv(3;B z%|NCyJ#-i3+0f5S&B%vVkbA3>9{aU~N0<~3=(Vt3SJ8~ZlPdcU=TXDy_+9kcld|8< zIvG=cWR}Y}0KEv5++b81WDKjK9XBI!&{WE0n$@zBCFa0po9D^qh?H0}8ad-i)@9aC z$%W;GJhe+(nS(fZQVGdsER+mn{ZZ)Ob@)$(=01(foPI5OK3`8r|7+N`fV`lQmCb+J zS&9Dj`@amY|5^ky6s%GGO-rqTQ6LX41%2#d}??KEl+ z4LqQ(P4;K)c6G}<#s1+%3>Iy~hmZF^a;8%ALT0GCW{UT@MB+kC+=jac)Os zU=s=?pBDD|tf2<=u}@gfM|nLf8ugr)U~i3rfIoCeoAwAUbcY5gX_C%!V5X(5wVhd; zc%6xP40Xdmv0(Ur`?NymbY_^3bisR%ufAio5oUi^1f3Md3WGbBRwJTLpmTHTzw{+q z^XeU5U2a}A4V1kh%z!LVvz){sya5`cdx}ORd7ei7zJjGq9f>8ZpRUR&yrZCe}H{g7$SryA;l^q;uC$OTMroxd(WRN{ulNYx37PRZu1NK+Lrrc-S}!ev*mG} zvB~9d>@g|}a9oc*h{_thIYR(WxS_>hw-V>-Kvr<1JK5JRa6A^;uzs9QwcPqQ>-w$h zw)$C2tgl5?A`AL#!k1Iay^H~VYRy}#7)JXM{G=)n_K~F}_N5KDFpqjgpU&Km3@i0O z<=2nm&>;0^!1r89==B5(56oZ8V_JVoh?SZz<}tV$@n6hiaLqCsg?}@T`)mF% zj}fc(HU7msUjJf!6a8U*F9BUK`JlSd_xPNAvA&xvXpzjEwORqARzqDk--95(u&@0L zM~i)p_Wg_{k8HO`&dKvN^D#2OLr@xjSl_+EIP8)P(C?MEb{g(5Id`=QL&$|C;Bn%| z`F?)JbQZcaQEpUpTwF>n7|m0@_JCQOxQ-`z8sG*(#*oP|HXfzzK=l?y!hoAJp3r=$FqtXDHZ5WA{S)fI@r@e zH=LQ$_%O&ZCTec!)_`B(J<w{e}A0M;r9`3-yhP6nXI%>Ko$M7wTJ}8S4+~8*)IK`wR80$6q->P&H>sl)2F@ z^#}D$JN*asop&Yn2lcJ5&mZM=2=`|({kyjRsrsf6jPv9#)d&7RpdGXSchxslD8VC? zXFvI_%IiKW{zW?`svzPQeG_V2vqN9MoL|vOaJkmIgZpBG0`NqIe1^LuibpTP;aS(Y z7*DNxT&ApX{yumengTGU&k_P#f>|HVg(6&Cm)uLlu`!YRG1Fb_OCLDzcP-RBJgrk~ zxl&~{SLd~)36pTGWzo_+8BI0DVRBpvp2Zu1!Cbj`o+=`0BgE0zWKEgVrJ>8Pjtuxq z?m%#7nyTsiRWpH`6P(S9r7F6 ztIg?z+(^Aa^!s2`eB3+>iVyzgsd>Y}(n75kg}4qW@m)09QMDbyWZXD7ClQH!8AzctB^rOst z71$+%Drq*IZB)+ci6zb%o|M{)C@JJ>;kj|#tJCQT?A-uMv68SC7Jth(xg*roFXX+W ze`D@gZ%m8~c%S$;;tZLSETs5HaIukb`qF+nm-1B_DFUgcO7GU=iCw1SkGvJ8SkdWZ z9BP;vt!lWMA@o}EFYNa&)ruyUOde(j{gB&TOj0Bq8Hbob=N*LBluOL_HNM(Mv>;ygt?kEPL)XV~=!TaU7kH3IZf0z3|CxR<;#W2rTAEN*)007_rR`>qjvmX9E z4OBM1a)FRPsfo^w)#$AQAiWh7e-Qf-=;9#?M4R%&gPt!oI)+$irdryrsGcXi*Xw-H zGpEo?GhVRG@jTD++?U9BohoF#%m+zNO;{tWsurCyrL=T;OmaWEct0Mlx1|mFc;3VO zRA?sch2#D);e^1xzKw8DL!}R1RVR!VBjP)d%oPe0C=@LH1R0eEBrI6Z-Z)^O)Ljg| zQe%Zf3}`^Wf%S?S#R`&+FmteM!DS5v9=3e6Y;)@>(cK(uJ>>o6mIERY#Bx4&aa%`# zN0_-Hqgky243$$=d;LCjzl&?m^C zLFG?nWj0a`#VWAUo|EQ0Ojf=xKu&0Z0@YffL8DZjJawklW_sToN%sw(1&O$oNNyzQ zaEcgdRMOL&9z`Yo_?eCUEBDukr(xs^oUJ8kQc1L@aKt(^IY=8_E!A0hV(JHkcEk`y z^B&lvB`9bRaqC=|#nb4)!=09rKVZQT zbRpI^KUdHjYdv8m;dXm{Pn2?oMe|6K)S#hGR+Z8c&5typ**s;S&aO6Y{tP<7pvuBp zFf|X!f%z)Jq5ivB55w7CKm?dMq!TpNYKzWP1}HR!k-5zfLBW9*({x0=)i|!?jwC|A zxVn-yo?6{~m`=s2Oi}kmVVtw<2>Ny%mR0>8NyXSK1$97t!JgEX?IY_+Y$dcnhjo!H zSm7(eIsX=8VcBw|KEkh4w;ZFMR&I`JHPs4PN?mIR3{>V2UTN}dmBkeidBi(r@T}vJ z*AT-8>>xc6N(5tM=LR82F)wym-WN7dt%s>1Lw5r28%+;~0G4p0sK^1mbdU6jG0Sjx zT0w7fkpMEjy&QRBc{z_&^<_jJ(?&PHh=EmXu1d)H&2os z2T%MRMD6^tEnuCgY=6D<2T=why?(|KF^IfOF=?^yza<%{cEU|!=MZ}{#e|8%JxI_K z=yp;JCHehh1i4VwARtW8CDsldM)X`IiZXujrqQN4BD*}Wv~$Q<`zH2Vwr`$ZX-v5? z)iBF8KC~7YVm?QY9dZc(x$6ydX5^oxWH$IfR0PrMxSry5oWsntS)3V?a)tx!1c&9( zM7FpN4pfKj(MUIcx4WV0(?x6Z3{DXNID!WbBCla3Lym`LiB8Z z{o#dc`xQe_$=a%tzf@NP#;UY^Lq(|C51VuVX;~!;Sov+t9V-%W~20tKYG`lf=#hcPl*RHzk3t%#r#<1AdfGUOS$I;15A+} z8CuaU*RLo0iTTak0eua5L1hqD=ssztvY6V)k%B^JP+JIPl&!d!&mNlqPX`x}JqihA z^t&R3X=|6ZJg{lO1E*!5!Asd4aOAcKMM+jMoloJ$M?m9=3e_HK`Hsta!Gxu=&o5%b zGuMb*zC^*H{_c?y0Qy-I`D|*J>*}x#noEb8u>n{#BeXS5WG&ASJ=rIuKUK@$m*oFi ztp9K>`c_|=PQMmu@2_Lv|BCmOb29o0U6ggQH!=E;zQG7tPU${b_;e{OUT9zcED-Wy zDiA5{K2SVFc}U6-ww}5=2G~gI&7eLxTL9RAWx-%b_<;|mHpW!1PggHs+g}O+zyZF! zvOB@k8X&Ne$1-Vw7x^rcHH5`()x=Yo$dN|PP)Z$!65r#`8J#ENxy%IiAU4X*$n_p` zU>dhyOHoVrSv1CnD1YmNCkeGJF7CS>EKRi*Q(CugZl5T#zQ^K2v%a>nNR^m8heGAx zygR1V_*f=ElKO{rwLt8Bh7@f*OnP$$L-_no#J+2C!~Lp&vk_ot1PIa) z6w`G@T0xHfI!6C}r2aXEW2^;WKflHg;IWA`+0nL=SuYc|JWzVC*PQlBd)N7X!e=jXjRznLD z(Ri3Uvega`E*_o5q_LcJpkcT#a8Ea;`lE_$p>v+(D*AqE7_fW02SUgpyGY3O68l*S zod`A&yzZ(WUOAAnzlR}*p&tgkfG@;<;1g6A$?U^n+`xCdXfO33VMx3@WtIE5@{wa` zfu)ceF6s5{49v5ejq;1r>*ZR824;w>m$6Cc^orJXhnaQp8@15g2_vtZd2+%4mQWI< znR1mKr~W5>yj(B;R8uo0!Q)>i+P{Cte}3VRY-fnYuUVq;f14%$_`?6HULs^A{y?z3 z6!;~@C4e`6tO!$`!JuU)P&mnfn$m8wp|aWO$H1MgsNMl^Blqg@vC7iVdNTdq#GE+i z<#h(Qq&NOf2aQhiouA*Pju<-8sHC(7!KuQW|8oT+4m@Ruy^q*;LfuMUsbyrfF+mZ^ z3K`#3m780d@rDN6Wfrv^Q7kuYH$oy$Y314)$EtCLFB0C_)mremcaKP+7GKhPuTt^1 zxk4ai?*)QY@10LtUKVEMC&3fQBis?`ae2^(3s=z9ZNC$DxNT@RJ{KKtcS;%1y60ad z;NM5(pW}64LldX}HC97k=OO(6p#=Q*jQIB;$&X0`eSz9{n5ioLp7;?^1aooL!$_G) z0{i?j>cK;7!@BCl+w{3mK6;^E9+%YS5Qn78@ zs@S$|+qP}nHY(|S``p{lIZyZP*Ym^v3qE_zxz?OxyvI=dj?~=Zq7qN)!^HQdn(L1s zv%Of}gxv0mu9%}J>|5ZuM7LRZ@2{WiteE!ASyt(NXU*?88nCM=4vL{HJi~JQC5sqL z21B*d5~6E!VF{d+1|p-O_DZ&6F&mrh24XCo9-}cflq%YAxC(DtdTWZ5P27?zE`2J5 zUzA0DqAa>44K&k?o_c9iwpp;_%5!iL_2cR1?klch)~xW{c^#)U6~4E=D?vES*|>GsMWkP1^_I>iskP)Z~x z^#S3tMf~!bB*sEGV%Ob%oxkIHkOrkxrF`^L?Y%5}pe16vum)MmfJAo^s)@lP-H~=M z;nV~o8ARCyOOU6KrVx*yU;^$jFR}k=1ONV6{?`Zl$9oiX$~^VY6!7X>rSLz|#s8li z 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%0DSHMVCyA;2!YCLz1Aac* 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%0Die0=a!f1h%_F_8+3`gMN%f* zGCE1FROGe!Pf(Y>x@>bv1mseC93|Dct2h=DjxY&{O<>R7mX>Nt#_|qv#_&JLMAK&M zHMz?&c|d%!KK7fU3YxO@SwgW8g$)Nt88Z{JT6j^Jp;Y2QUC3`K#A9McAO}L~-9&vy zBkL2>-onWs7mTo~)I_}@`&J;sDc(azKXV7N0xd$rRFt!f^(*~^c}zdnorKjfow4@(BIRxOcolKGmxGR)6ae-mJlhn)$T4-n-RbICPL zVN#=D3U?OT?CxA9Ek4332)$x{?43f&^)8VQM6Xxc1I1PDfwGyI+(mSwg3?9okxJi^ z&K)M)Dz7^tF~g|zMxC0uU63wV;->#ISE6gtLt(JVgZhgB`_H$7a)Kd$(-w`Bb z*?H6c>aB#f8sY=tG2-XZo*2?eE8wBM_a!gdM+vos#cwC1XedO28&IR{*<}xf+*2aUg%11np}N4us%R!a>D^( zvi%p5o6=HJt)tmdpB;_L0}1=2id9~1x`5;$t+1LrJ5 zK}VMC*n9P!St!Hy2nfm_&lbec7+i!haC$iPft|d0w#ZdWv*SATs*M^ypT#C`+6XCN z{~CB}eyJe)g28&h^HA%8l1;LhwjZ3s!9rzWWM#2|%1zBjxmGVLvRxC`tok7dMZPu+ zQHLlSSXWs;60MWI_jDN__X9Hrp9+$jf@yQ2Vu(qvtR0~y7NmF zB59}udwgjH zLRD*}?<%N1HpmVJ8j?8)Y(K1l>V1}i1MHGLae`6cnlS##ohxNk@&q>G0j`U4epLeisNSCo>f zyD4f{gy?%U!`Dbc%VXF!a{dMsm1|GU`2eQi|=G?!{n zUw0g3sGD+lAC-<&hyqgs4fk@&SN%-)2IkY~ptB6LK%rU&lLHMYgIgobPdP^$jTP=- znX}lmW8}{l_9`%_Kr=T(aJgyL?Qf=84$VDmM5!Nxair#Xao9QeiqLZ}wjKio%7Hlz zv3zIjKlEt{Lkxn2D-U2tGjyDs7_Eob<#7G69>NQwg(KbBM{^8tq%FRsM!*n;ACMrjGeZZ5>GT{qq#Vk9PDHkf~r{G(Sq4&J` z1fhn7L^=T)QZ1nwC!J=SDLa2neKWTpB8!|0U$7Y!V1F8Ua(v;-GX9$5NL-^i zvcSzvk;mMNdp^oZ6vkQokjET^1~KfE#RU!SP8T~nrSF(t{Q&%*Wv}!NE%r9@JQQF6 z$8oXX7MR4A-~{N!VA)!dt`kmJwkC>4Z10Bmhvz#?bR24Da6vqz4?hALA`Pu zQT|L#GjKnC=fqnM?q$FZ4{n?pwnI>$EQOt#X3@l`TpMHzjym*Bh=O3B@j_6ODj!y= zr;)IS@w2W6ukq`du|uofg*5)0iUm(tAvas=4;w<9T6Zoj&FXxB|;gEfXc*nV^ z%N7n4jd~nKG)#5!N2E^qfj)OfR(K?#87P70@R)XBdt~nZqdcVM8WPM4V#w4c!!3g# z*y9TNP5ii5jUz^F}p6{E6AS3y`j+4fSU55(_C zqmxOJ_e0(@ zmem$N*!6Qy^EgR%gE@ zwd|`a+?Ro>zucQx4?eYq2_@k_=D$qBAzCf69!hcrr5jT8JZLiMbwPQMHm^!B29nIp z){XbhU$y?Q+xXoGnn$??Op*$U+~;Luc8_){T(3ygW9QZKRs#=kSlYlyv7)ova37R1cfcv9}ChH?O9Gj#+-;V<0e&FtztH1W(ShmvC&SPjgi)s z1lfzJ3-}GcscDp#;5-N|7cRL{U6q-hYsn_ve8XzsQ=b2J=6qHo`O@YL&xlsrPSbJf z;h^UM!kdVFAVZ#uIco`mN@T)A`+$@`5sgG{9V9^$FBfwAw0h zf271VdguGp(y3u0^UM*KcYC`tF?A|0HFfbt$^5L#BqLyicvtl-lR(m*vpBJ$UVU4& zX&u~1f^|t@a*0m;WtIjtX0&kkN?Z#YDM<`3(+5ISyp5FJl6IMDtw)J&yhPI?2Or9> z{9|82zVjQn$FyY*0tT$M@&Oqh_Tv{Ja2x&cE#{&LVaP^5-gXv-pb)}6IMgl76hBLS zbVu+w3ms@Fkljm%->Gd~{WR)--pSQ0TvfK#f%&6D<1PiVGMkc}Hn>qkF#uJu`(c2B z_1w-C*T&&@udGYwFFIwYXALD5NB4O)+yu&nX7tymocPG4uCfB)VJJ? zus^VN2`rcstw1WHD>khRp95W=TNKGUb0&Kl4*@SP^ZA)8-@?k1tSU&?U389nDn6BDeUa4<^kfSfy7*kyqq?1=XRA(;X`$E+BSH zaA*a((faz!A6#oG;oA#GM|3BW{4J`*Z&1CG6 za?Q9=3plpW(T_b+p!6RISHdV)Sp05LTVgUj@qAY@>t#PLRk}sNtgZ;2SLE!#Po1su z2icm>o4n6T=ax<1&SYwv(rSuhfTnKsWoJLWwe5aU;D4c9nM$j<+;PNDr^inX&%8%# zyFIE%?jeiFG*>)xmqg)-S%@zYMaLHO&IR!4^Sf)7PCm^6Qzm8OozP<`kh9$^Jz##l)~}RIglxtcxB5zo1KzzXHxk zFE!8+@IEf4P z1A6Pf=8XOxj(-M(dx={=kQ8p76J2T!XtkKMF;FI%=sPV>nEI6rmE4<&rxFiaBFgQ{&(WLvj z>*`(FjdyhQ@n3JozaQW~kGA%U$<)#3k(zuSFZKW6X#dsB`*({#u1)qEBVqF3tNO#c|a zS?$Vp1MjwCoDB(TUJbFlN;Oyxvh;3-Um9D5tGyJZSKTGk@LG%zXO%0GCZ*-s5|Y+zhR=T35_s|%4(WLG zufMCoc@}|-d1Qc6^SmnYx{M!4Hoi{5d25DQ%x1%H1?u&Eed42tAm6(q580;VIqzY1 zxFW>Q8gQ(=Z>Q1yHINLr&ZE)2*#aQwUT>+ueO4OK@MV+f^a7Ru*D7#&b63uAn~2jw zz?9UADD2XNRAjrUh<>7DFc2`mV@uGChHEw@eK&6s6E^fxh$!r^XVS;(eZo8FMza8fmU+#jV!x z3+I&ra#Mb=;fOb+i?gg5E*d}IJXz&Pn-gV>@v>OXNrv)Fx0wk2O1oevMR-7VZ$=7uUr+gJ_;KL2KMJP zGVLg(9)`&ZAEfq*sFMrFs*UUwX?Lj#x<>qvva*~LgV;bjL0{$PbnIYF6G?BN6osWt z0t_EY&2{~Nu-{h0(-Z_H#a&NI5MiepF&{o<*B4(UeC0h?x0b>kuwK`cnY#gYh-IE1 zwT>LS4g6(Y`IX^3{MjjpMlAnZ^pG62HEDb*NMHhTs#AxuwElt!r?oTjoRmqxwNIbD zBxBs~Zw?#yT)${Wt&Ks|v1P50OYj8bki?FIj5-8+VxyQozGGxgiW4O%#K0#17>pNj zSVzJZT2`r&-Qjx6w-vL4=@m8cahX$TX6v9yp3vGg;}$lx_^>oRKmx6Wk-uRXWE!n; z6A>~FwwvUb4-gA-ScZgnibmgYIxhAYx1T0 zV9FMk$(zghbZ4FOcYw=*!nMQssVltC(k=SwknSzqb0lcxx2{1cn~OsNsdWIgtM#^k+tQ9CZ>Hbjvud;M*1AZ``PT& z;XbD?U+~Xf*xZ>-XaE6%dV95OHMCFxis-Zp5(8U{0h+_cNCk2Es`G&&gaM-HI=l0O z^c~gEnK|JC@&)0$1|aEqVtNwWJNvtKq~csdV4OQ_?~H5{dd~I3#s=2IcxqtD<7OkYed^G6|1W9A0QDQ?ykN?pK~r!6nj*r=^3HM`M90kEJ(> z%rtmL`&TJD^IRP13+5X&U4uP{Z+K3tcjvO-s z>lzdZx9}`2MOn(lCPc)2EDCnVFum7lKn{MG(@a^t5CaSRj^Ds4c{+`5lg9;Ucs;Aw_OP8*<|0U&~hHR z%5vI#XP^L!!W%(!Z;!QL=6W#{iQEg)a1rXWv}vyDt5RBE9&Kc*(PGpcQOY!GSe+Kt zXm%&DjQu=rSHt~m6)y3xn##=6NvDc*;`((SA~#pXM^60x)OuXaod5T`*nlD;RdH)x zY?PP=C+eAO3MiyoXDJrn6|kIk3C6+TNKp-W+!$-pkRd7Qee;LFWBwL2;F_K~xeoO} z^X9T_1^$+t3Xaj#s3aZzwhMn1cG1}qu#)27lY>@YtH1kMjfWAFT4 zix#E)AvdA%!KC&f?XxZLOK;|}=3{T_ZE)MtcI+-pcuJS!yV!H|8xCJtj_lM#aQcd& z&A>VZ)$gF#ZB{5MiJZpyF_BrFQ=JxZFhyX()Wtanit<6`5I5I2N_u#d^3jyU^uU@S z1FRDVj|ON}Jyu%bigv&z#F z+?i{S_BbtPBhdWZSxvJ+T;SW8VJ%rI=Ivy*x*dJvdD@nJqwRCzB{RUYJ6P6?8XYLW zw+*S<aggQCvC)TN%XmaNkmhF8Rnw}N0bm^fw zN7h&n&`yz1C3V)1!}%a4t=xq789lJcAW!Bk#Xf8bq-cI}A{Q*2(ovc+d>}xxVdV5< zq$SFaAK789WA=Y%iKiP~aIYX`r3tC~{&gugp5HTLLrVmj>-CY+pe3BBicAasKJ1;H z&=n{hWh@e;0-0!aU1m|LKk>aOlnP0x5UeC^Axy4uQfn~RA}$#yYNNVguRyfDq!8qh z2r~`j8k{^|AOqi^DF~XG74JhRv zVGD17Vn`xZlX=^D$d}jq(WH`WFQiS}B%ws4@+hTUL5Ic|3F{=3@rySBNv}i&b?TxG zzdTBt5({vRmiz?XcKS}$)Yr6h0L$^&qE^=wbp>sqE?3JqEfH9@5nP*}$E}1xUHpX) zmSss^V@nX19XjpMcc^ku6=KR_zC|qS%nJgG^~7l|2hLTS^MVwt%f(TMmPEd(LJ`lw zG&Wrfys{T$XUf(vRup^~CNWG9_#LAA*Q`}JX=2mJZ{65r%}RBg?S*-LSL}tx?^_#? z@;A(Be;oX9(cVOIuHM(m8{?vQhbthx2< zvXss)i3SHj7UF`&sJhB5GNYyO7bfx09~D#Mbl$whcj^E%Qyl7? zk}{KvGW8b4$K+M9D4ON!)YCi*i^yKgqW3s>UwSq-j-KhuJSgse)2S@CdwK_eZ)$sPSYq)6nM9vr=HxL0yOaT0MFg^ zE9Z}RLj&*geUhP<4bQ*VGXSw#^V6pnW0_O;FB9FUWSR)g2f3_MBGyrk4fFQNQt;fW z+X|jej~!d+;92eLV#?gYD%rdG9wFf8_1tpV`+zrYOgG=>V01S}*VNlifhC>s-I^2~ zpRlkP_6m7{;4)+QRk^E}%wpDnz<#?_JW>sC(^2-|Byd0fpORw_lq3O+GHS#$Q8#w0 zJZkkN32s*Kd*Kove{x&?ejE7bJ;97ozuxeZjMekM`6)};nkqTyo0ymzN|`%;wqyTu zO-PK_{=-i>Xgl}QT%&N%Pf57JQ#`lt%{NW$A?OQ(y0rmh=$3S|B<9A|-j$MJ#J7Qu z9oV!I*IoDv+>239VbEiuyD=WE8$=UT6>I{7x?bn_ARK~;08rq400QgJ=WA)fDr-wDC z3AX#M5<{cylVD6)^n=V7xumqZP*Q@9{_}20|_o=cU zLu_rJmJw?ofG$^mvLeMD6yBxw9oB3f@zTI1n=qjP@#P_SqNp^TNdy_N#4e+Oxf0BmwR62{ zD^>pquC~;8Jh=1xuyv9b-tgk;d^N`Y1HMu3jO;e5veBEoySY?gv2%!VcVlo#-N zAwN8=+#RmhWG$oOrC34dby|YwCDjZk+PWT(@eUbK_N4hD9^~& z06D`Dv!ju2GW}vnh@?AE=Jv$wZ%j(fztd$X7BeuhogVT=|2&i^Kx^q z^NC=jPeoIq|5vNv-@JB-1^<%ZS9H>M`p|b{il@%=yk5mb)vU=PXgk!PoH4)-oN1V zAjfHgZf636!~E6J)s>(c6u-+k#$IzqSGZYCX85~-L&I>Of{Mb#uLr-U{0xm9gU_QE zYe37rwWfb+9<8EJh>rmm-P02tV6Y8^%{{1{$$oaFGQq$kFoO_04Ggjh+#uF?7nhw~ ztSWb1A-t<;tP^=Pbh62C3W(YkpWoWm?^|rUv_8Ao3!1G{y#leu3ld<6umzVNUhY^; zD7v48PiV+rXxAT`s2-C`V+jf!YfY{HNi565iQvqM8I~+wO!0tcOSwi7ORjb4NK?7J zK9Sl)Ow)lU*l#D;zQyF=qHN@ z-I0d$r1ew3z>$1y6cY6^hX4}7RF06Fb4Qm*YQLD>5VUB7=FZ@a#K^2tSvI!RTkz=@ zg#%fO5WVaSN3R?{T3I7^W(<0|7Xfga~rLro0*X?YVm`hK0iDPn<3jQ?kmkK6lr}lc}; zOwU;!M^96pzn^xIe{fJA#SF6GE<2v|mN2rxY$)wl;)Ic(V$3sC0qO^U@n|eDsF#{9 zRGUs$eJ!hm@wci2alu z*K_J69E>t@7AoB^h=iWsj%LIKq>lR2$JJJ=okMx`X~~Qq3YwQH;u zKBXuGtP^9A!X?HpG!c7DZI@VlKTut))21BbV7bH3Gm3$OXU-k221 z+&;9~6J;RIZTlez`XMd4%y_&cM2-6tQqB|g-i1r5O#S_!zvos+jB`X^k@7EdwnrF#L{a&5Q#+7@+NQl8-9oNxqV!tVo3-1&`TJwy(IBd-1LM0qj`s|qYp%AV_Ti`niVJ*1)G8z}|XufAiQeJo; zqCHP=6b($A_8pe({-2(R$2+*t}T`DtOEG znJqHB;t`V(;1|Dnqx;bfKDsyLPpcUMI#hfGr?eq~S0eYUD?*kof2R*fMy?U53qBvw z@KWFaUF5#n&K$2kpecQNbviwWW8_%SH|?C2@Si{^j8Y?oLI=iak;L^>EfR*Dt2>zP z%1UU)4?H7rX6`C5QYE$1FMpa}{2lB6odtg==HxtUB-wms!P;k4XZ@F|{y$A=WbKS? z{%N6-nPB;cdiC(fH0>qp&>#mwD%99Qr64C_2Z&&vWC*b$JqFTq6)r4qfu-s4Z7cIC z@$3Nn4x7B8K?Fk=V-^z@ft8|KTE_jx@9ufWsd?|W``<)Agt^7^AeIeV5JiF53`c6G z>t~USpeSuf5c)fyw1wsM%w*lY=WDWCV08(Uw^*KFHd!-pz2=__>g%avDzLuyCp0}2 zE+WVk%*S}DDVg2Lan9)?LLA>|0>#F)TSG=96&mtbE=i4h=%+Ld>NQ)eXa8;0~9)&3z}|!iwySvu4IZv)<12KmQ)ix-cwlZmXHqBhY%bx>;g?fBu-rU->aR+cbS|7#r)hKvDPyO-04gsk30 z3EBA(Ev~%1tlkp}f$xTSe`yPy9J`>xz?Hpbn<}N}IoZ$7pq_~jgFV)laL_&odqFdl zy&xy<$AAu?ULGQkEEDVo8SVanCivV!0qcN9rGm&3G#f#;_1QuK~3kB38C8|DmczetNn9^TXhf4bwn>?UVFV zLLvJKyM6-+{Shs|4#)%I*Y_~`bc^ry>FD~}GF01F z)t4opx%(r>9a$3v2clB5RGDt2?IeTJ#!=!K;3j1H1i&EN{mJw?0N z$-5AqT}A>?AW`3{?l9z0_SpYO)MN9vz3RAOQw()o;^#b;&sx7Cq9WB7j+1q42~yZ(9!M#ipx4*Wh> zM*<~Ef&B7-vJ3=ZHfFGq>F7y!0Dv&Ej=QP^X?5z#CQbP2qd@o_LCj*52>wVNtKXv& zzqco*x;nc%fL3~o!u-PW!s5bMf(~ZmSJ`mFnF=(b`a6NwZ@jLU$fb85lq#4?Cizx) zt{BYFl9&5B4&wkirA-)&2^e>r`SMsQX zYp1B<8rhgN?Nn_gU>56gJY2&yT7TUsxXsk5T>$R-`#c(RDBjX|d|+b#FM6ZmR+z%< z4r|(@Z!v}rl^O^C1|1WM> ze=X$+8Cw}U8UM4CCno-By*K=^Zh381`h$-OLS;r_oe%{9pC6%&So+2{hxlo;5y#cF zQ@~^KC08i~6$Z;7;x-U}jNP%5ph>mxlThkn>wUkSx%qTl-B0voUJQK3x7<6UR}Fh; zwRlCUCe?@umB2A_k~#ex$_8vEN)yV4s)dL^)BSg$31mpb58L8AWoF;2Lz>6LG)5&y zrbdfICr3w-9O-RW6P2+wPOo%Sxra#bKw<%Neqy`QPM3)p z8VyA_>ZaPV1W@UrXKf5+X={cJs+_`;BoC51eh?-K*+G_i(^#4vVr z!S^vG?sfM$qmD-$-6%od0dq$RvKozwguAu4sm+^v^!<)Qf~j1(5E&;(f{^+XxIFMq z{(zN$)dzy1ehhd+s3Xv!jj*#oYkw-!kq_kz$qmc61*c>nZ6D4%_U6Jv8c=AUSRX|Y z5gBEX-aNhwr*(vrXj80fQP%WB)0yRpte%;Vmy`mwb$+@{aQNmQgz(KhPYa;y!8rI$ zUSIsUM4GZiC?^%S?HJs?#3u0e#b1z~AI=PmnB-rq{{l&b*sZknwPpUzv4(IM6#X436xO3}72! zw;&`s7=dUVzgc$dY8!)SAD6>2^0Xu*x)}NV4YAC_4OOkBy*$LP76C(@YAAy(}EV}?7-j1BYZ@%vqchwSBBFu z9m^bLq_(=;Jsua+ePP{c+||nsB(;H}Zqnax>WS;Y^}{abP6oG#NfPJJ0ra|+AZv3I zu5|vU&1DdKM%8yOKz_`N08YFdA=nc$O$cIKOH5@w=3F6%`%YUUWoDCHb`ZiPg_H37R9 zQvH0kix2QhObju#bLj~am7mHQCb{lKlPNUujvr!plIS!I+7MEZ6$tO$kY_K_MoPgK z!vU~fk1%T-iU=lB_TS=0eY;U{N^1~K5YeWW0TnW8VmY#Esa6=?-@PGp5?|{FASFNI z`Z%kL`_Cn6Caf9jFz*lRI(x{nd1`Il$#R}ys9UUXksG>q2@Ri_zb4x?A|a)ekEUl> z*P?IriK=b2GrT>A@w%ib%)>HzrIanx>q7ICwCyQm>tDO!>t*IJR6XrSn`~%I_C1bm z^%y_lv2jGUr|iCRMwsB6HftSCd;-7elSjE*?{VcF1|KAGi zUt7=r11+Bg_H*}n_`_v$?Yqo#4gnC*Sx*%NDo8e;khmBcKM6S`UAw$!?Rk!6q$icM zh#2!N@Cy$!7P8@=XXSNe9Bg2dqzp%Ao9S!r&F|Mf-EQD|K=lk6J*b!r5kd@OjYEUV zv_mZz$@GYVDDg;Dk}bUiZ6>>|yNoqBf=1&^-2Q;hn%wRg7Rl!DwYu{ZXZtXKMF(|7 zeDIW^%&Oz)&z=>NnD50Wi7@Mx^u!jvPG;ueZ=}Mb<0i99+S9o;qrZyhC)Llmqwlaq zdNb1iLG0FRMO^&^@sq54`T}{hwKe4QI81=)H zS`=hWS`V4t6gIa)MjwNOWh7CusUgH+aj>}Jm=K~tVXWePF+zZTn*Ko!wTb!sUa3RD zv+@1}7mc4r(_oBMMkGkvh*z*823T~WNS}64?tWu$jG{yE)fL2a_qcF(ZOY(Q?yG4j1$#t4FhB9#TlHq&b*PheWYH3SA*VtL7QHAg5GJ6%oMv>Egtb3K`z`wJ!nbOW^U)LqwMfj7hQZI0rmptwJrXMSNKVpMxnHl zd5E%vdf{9-f(w9+^`_jWv6FubK}i=bKe|Dpxdxrh9*^;D6bs>X+vpoD!XegV@XvfB zSiZlOJO7>^|I8dd$ITAh&q}-S`S~}d(Vvy}FPFu?dm}~4OUr(qD7}aZErn4~QQ2Ml zK;YKG*<=Nn0TN0#@DGMSB!!F4mOGzJ5%8D%hWM-6B zR2Sq6s80}wS@B?a`d$da84rSF(i|iyL`&*O6c@-!bkG9X$N*`z=oenCC&O&WLK&AE z8nf0AWh(fbW zSXp@ zU_Jv&`@hEazxed##*Tjl_)-n}Q+2KJ_wt0%wOfW;ABYGapgA;9mYL%E5C+EU!sAZ@GcA(C|E4|G%9UQ2M74Y(w_N`+pRc0@~hehZ0p)e0p` za8(E`PI&P}`UbQ2DZV=Ay*DiD|AP5jaPO2LtG6ETjx$}hPMxK=hk2p6!W($``4y@Q zG8@q;!CgH7EzwajK$rNEh}5mJ$0qTv5}KUwl8Mx+Wq;lo0M?fsaZDYxWKPe=T$l!Sv6;-Hjy_Gt>D4BV){+Z;u5#6Iug@pb!lAKm zGBmmzUuAbfooaPc%qw%-@E+H+F|}SKN$H=*d9oE_${#NFN}i6Qtc-5!jvPU+?x_g0 zQ0bBzIh-1>ZZFSHo>LjUIclmNK=w|6{#y0x>Xkg7gn=pWU>qZno2XNkdVWGSP#)*z z(4Me!(3M{ngn=`H8tVjXZddoWIrsw$`-ir!c3Ii;?nWLpd(~hSXq9qKKRnHR#J%Kv z)B3jCp6D_rQMCxvDLFg1+BI?N-+9gyhr7Ngt*{1%2?zrp^rSLJEz z0qFGhYFcS;?W9URgtPo+KZ+?y)|Qs+l3&Y;Xd4+%-O-V9#Th+bYRx+u=NBgsM=h?O z2N_($0KQuA;nQSWp;%z0b138T@Cc9g>P)&>ZtGF!>7W4av}-6g)Bl6M{3^-B z*l9#0R9s0!G!zD1bSz~Bw+v;9a)nz~NGb^`L4~P=a@3s_g?=2Nlo|J+OluC+e6{N&H(Clp$)L(9^h z)QMU^Q!rm&8s%CuCmswt6*WiOJK zS8-5*6pq4ygGemrF0N9P_}U3yEKNDBj!b_E37Qodj%A>I%T7)zO;D%VUpaDdtx+w- z0p;Ndm~w&W?;QnDh+y=Clguw`w|#do`K1@ViqP0m`xE|E!L|g|bzWQh@TIq5_$P$zEvJ9Gs9Si93+P=P2wcf^3B^Si!Z!Qq+a#{*~d5Fw&eG(OQc4%9s zyH+Gq^0CL1wJM?CB?@Xk)sE-d5=Y2u`9txnb`>4Tffw?KSu~i#&?WQjBZVn83}*FL zhNwR`_^>Qz*)I-MQy$Mi#5p(eZWoA8Aq4JwvsjCip_lhKCoA=#*J~r`FEg{0X-TDb z3@B^kq7F1>g{l&fj>#{yNR}vTWkQ*y_cSOfHA5qiu+4y)1B69qjl$E+!-QD}X)JP8 z!q?0w;r&g58P^sbGRaCe^URqu#futCoyhiK0^K^ED?eRxCKSDyUgVls6GI9rli``T z0yWYli2GEuNGS2wnyi{{XEtV4ChAdbtjlhKYH`Qtw^S?@Q)yQctjZeC7Rlr2b$pjd zuRQV{!Gdujq!l4(z^%}>{C{9!#>u`dD8TILOiM&KX3B>Z8=8l@wFcQwUV>HH`hY+T!Ze5_x_ebHH{?8w6ig@ z596&c>kZYfo*}4;&LrCj^e|vy9TmRRsrKR}uJ$lY(r>LKnb;FfHan_|M^SJ2-zo&l zyPR4|2O^9ox3ng(fMyAfF}!k+Mb*@fm7inCU3-5Qas^Nqvo2Hg0gO3YS0^ok6G$%* zG|dgYCQVC|810Px;~&RLwi+9<>+gr`n!0MQ;vK{W0+gIR2Y$=e)j8!nk&zzB2zmrG zwRw2x30RgtYq;?F;P~F2fFSsa*5X>?3A?_HC4lu=R95ePGhwUDzSNqwf1mnZWtn-- zc|7J>T&*3od8x%T_1(WK>S+3;_tVSjOD6<=UW84<^N))pfa}E)!1c1}nr{wH=&7%{ z$QmB&$``}0L9q+)a;emh0OTANo0AzQ2(e1>fk4fLiXpHf0~(A_tC$NAx=dgRNXdkP z2iO!73W{wEW*_#GCXoTaLa03rkb(BNg+3)ogy=Mc@QcE^O~Sn=kkf1VP-XyNGZbO$ ziZFX#2GDbRo)00=c6i6DHcQbs?q4fQ+v1j#jCnK^8y_vCl^2Uyl$XIOOUIxpOV=bS zOV8dKi_WlT(#q`QEX#%fm8F!L8j9cHETxq>{dkvXOi8HRL_0_7dB03+Vg!~5bq|>Q z(u~2F=}s^A4qqe<+1%cn_72v^yVS8uvyij>g;xLAwd~4oZ{y42JdPK!5*};$lBPAs z88P%KF>zALsTcoV|ANS%{D5`pa_cXWx zRsFoT6di=T(mM7$ktpltaV@?kq1dNN_Q;iJ*|Vm`$*VVW>iUZziJ zxB5$dYJ8C|5S9QZIT(E7NdYoYdrV7xZ?4B(hb2N!r0oIJ3gOp?&L}GN@Y4Cc(}9)d zmgxPq=<2u^jKz2MV<2#6dNMu7$!e~OwC-rTXiqz31VBjDY#wal_QX5j^3@64ehF#Y2`ro@!aeI zmaCb8md&b}^z)#*X946hx6sbi*%RaTLssS&=SJ>6MN5p}=9}$GvzsdmH-!D<6_@^d z2$3>Lst?%wQxPGTo0K_rk6YYo`y0liO6Qv-oC6{=CG??#PWC?kx^U{&7iqX}hQIZt z$hlr5;lA!8=uyjEB9L={MEdvnEtW$h;Rp-?2GmN{07?!u5&nZI%9nbHIDJEa3AL6r zfR;lDMlgh7tUivqb4UVC-Vk6+t$|ap;Q)aNj$z1P5w12)aD#mSGhCHxKoSmeKSqyQ z{xW6;u1nikp%n_bMY?OGz=5iu1vb(ETqK-MKcfZLaS%6!&Up`~7TR(!**^3IiWb#n z53Lqk7r|v0aI4Hs-4%2^xalen6Dtc7kKmEQe3d)8r=vlBl`m{S_ZU*GsN(5gh44JD zy!W+Dn_G-)knL3d7J-MfOPDS+`1E;iy-hh?iYsaK(AX0y`^W@WRCd>Wi2Lo)lyuD~ zV5>)sH`-4GQo{W8sXN2iAQ=p(b;1a)vk`e$0oar z^}uq|OrV02k8Fc^HxZBDQMl`I4%_rVa2zoreh)lCg{G)6|cy#p*Bi|fKA zK9lQ2A#o6?xD)k#wXq-jEc_f&QEbguYCztJtU6zcRo z#x0O+B>L;(eX?uy3+fa?_mIUcb{1auAlNMuYv{JJbNut%#Sv+fO`j=CxL4JL1uE;I zsMG!0`1jR^qqbfhmmB;uFdw|;lxt>|-Z|X&Vb0#8@Y!z0Cs5DYDX8}=;_3zM-pcR( zz*jq}=V03^&#V4dJIiNa*Cp6E4&Wc9HaE#LdR_EPGj~F` zULM-}NSTjC zmkyl%N`{NZrQF9=(!jeuj&0iO%K)UvGvzO#d`Il;1T{UU?m1ajcfQkN44#sAbS$2N z2gOJm3a{ANeu-;(ccH(otk&=fVcCFlKs^c6jDtN)zhguud$GfZ?_*{p#Es9xkk88E<@48!?EB+oWZFn2y z%dYrSJC=Tpw=c5P!e1sUXavuE{v3k+{r3Ie_wqkv(G`SaC>K6^v^<|Z+JEbL2pOB` zf46e_kB-M*SMonbUw?LHo3W{|Q4zrM{C@n10xW>vK>D|RjRgVC+=XQ*IIr3_ST zqD<#bOJ8-A^igc3Pg6f-q_J@Fik>)JCXngD8Y;cpY+)=;v#Euct4RM6qbla!j^Xq& zoU>nw+BvbC1uIDvW}$P(~I=Z0DqtTGK={OEEYDE3cy6-7K*Ghq?=hh zf|jOM8j{$Duqw7>H=uF1_=T&tzzn)&IY1B5PdEfRKyHmFt3fzohF$!ZusiLp1IDzW zJCc2kDX$gb3O8tczI;Ti-&R3={5mgDt9@G{K`RoEwtWa2uK~kKM5Jk26|~epL zV@hE`y5h7UZG_6Rc6|FgI(fFnhO(!Nh8{wjVGDn=mqvyeswRU$V3<%7XVqJw;D?se zalF_E*dODJzbC{$Q{~f1r$YTRRlq)3$^WLfr)*||zZB>taS zzk=o;q~za4%Y`am&qhTPbXxso}OZI9NUr**$p?DAttV$z#o9>`-76+qW!3`u}dC9bu2c1^;&m)wn&G$;1G1~cl`O)#UITDOa*CIALdME zU(dtxS>5oS?`Uc7+X;Pvbnx@fMmYbuMn9rzB0Y;u=gS>LL4i+ozyj8esKJ=(^{Pgu zlO`IUUBH{+15#tuGz(^3Aj=D=ZM>uKF4T^+#B_vnHOo%VT($b7Gs$0=gHpz0>&$)R8wCHg13uN=~->J?5O+rh^BBUFph{8eFxpH(kYjESE zqMK=(F4Q(0TLM!|v($EJn4yhFg0trMC)FLkl2p;i%5tX1F7~P&H zku})M$gqNhVx|^Mo-fmXHd_mfnKyRWiV3Iv4e|$U{|?UohV37uHHn=w{+E$ddMP@+ol9>+(fQ6;mO=(d`v$c^eF&)_AhoQ;EjgD3g%pMwKUx{73obx~Q342c%BiOFxx+S3 zEKDf1M3ezusUS`iCVzro-Oc}rSFp>LG)~{Tgz)u%9!HXE&rmw+F&9zm+Ob^0V|St$ zm);c^sn%<9UoGy`bYi7L6gF|Nc2W*eQ6?$N)I<*$DO;V$2*-B#ny`0tt z{W2LvxZzC!t#H$g>VSF@3*A2a0{v(Ps+5e@x{~wHr z{||GOKUg*YVU#8QU-3inQsvqoA*ymSXa%=GTVd!qC5u2?MeJRLr>RI{@o7aT5m8Z` zQ|$S4zk}i5^77%mf8Zas$flV{&Yb)XkrV8ivAR>ie!RE&mvH>;vNBiyB-s{HX$bA!dE&jPH_^$s08x$Bt!G0T|9C{yFfyQ zpJ%UF(XNQ=X&Ne$1w(w?vD&I^%7ZzE6!5s3Y~cp!ER6#Dc4n5zw~&z*iq$7k5pHQp zkpMCzG+d%z_@HNF*1iQ;Y}%vMj+434hm)MUsWz_|aHWTgY+k){+`2SNQTHPT>^Qa@ zhn~u8@8%_GL-ZT9K@XlL=Wx~asvyTx$6b^)jhV#B#p$yidTFDAYytxW26n;gd0LJU!$L44c*BHTej8-?x7_Ke*X*3Ge&N&4BU5V7k<#xa6; zQs)gw!EP?>O$A1(-()>87gJ;~%`SS2OVJ&b+QFPHfk9gLg#Ak8mkO2Jnw!RqSM(7! z<$(SXXHh-&nNYC&2T3^p+~g{Kp_*`m1n;J=7tW4GByG>~N8G|9wWfRED{Re1_?tv1 zfKEO!_fQNTQA^>I;jdwSdMT73y~^%Tt{}c9eyTz@Ya}bWRCf>qX9RGF5A>CSDA6J^`wCFT=E0= z9!YPr5diZ#;MmJ{tA`1s-5dg#sVBc+(d+0I=G*lpc#81ifbDp{is ziHuGa!M7-gH|xpS_rJ66=gpc$YglGulc&h`+MyjcHJ}kBLmn`H>K|V9eyK8y$snJ% z2-y>N=OuZJOSNfrtHp|Q|4aYy?|J#pjD>Xege3SR^AE%R`(frE8T;4FQ{MK!CUS|Y znsV62D8HQ@R}V}nVwzB(8c-~;kq8=_R6s4D8(5$o1Om})Hv_EetVe>31T8C{e_DG! zjgmbEf@jt`J@ncSrJgN}pOoxJ&}~)IZQ*q+F5O?-Bq0C=>OXx<`#gO+_WW>}dS%P# zetE}1fIcSFaQcB9vhEJ{qyGlXG)VF-LN zIG^`(r}Tl}kUePMQ|wk>OF%Gg^RuKu2PeD zN(K~jAa9Q?aabyKSi0*H&9Ms(NOd4pqNC>aeF)OUi&nN0qlXJP9GlhiD@*vx!$j&N zX!8-bp<>*HrRGF=k){f1hi5WZ_i?AmH-CnG*Bj` z!uHUT#Tbo;o3Dt%oCID4HK77axj(QQrf2!VV5|^Ykl;kfXk^srFfhkFE-ne$9zcLvm2FU1+&e;J9ZxDOT>PYMmkMze@t$d@@nMPZRB+k1L2v@ZwbcwWoxxkQnY~-|;5YTR% zF~kET5N<0}cB;1vW1dg%5?qg zR(c9&#RGjvS!lI-J8MX@E-hM+g~?;!Poed0s0Lu0h52oZIP4Q_nmoj>Tf@ZQu2ktv z-_2F8u0|ORZ!3;`HVYI5*yDUc0F1R-?v|m;|)P}Z( z9iDtoxr|oVyIL2F=7vdRQp_YW7?UwyDd%oRjYEd+MWT~BW3h%y6hNvZd-SAt7S z@KbXwXn@I-U|IJq9NGen*d{ekTZaIRn@5A6z8zy@!@?CUI4Vtv490~;*$FJ2Xv>Ld zVDEIvDc%}O5AI~K)=j1CWZ~JU>S0mFWKHW@&a)Gxw}FDyzMK>3a6lpt>R5eyDn2^GrL!R_kbl1O|qq z(K_yCF-}h)S{FI~@cIh>6A9@jRO5x^Lapu0K$mcgS1`g)Jk3@3l_75-_@9to7pBNw z^?^hD-PoNcL>1CzgS2y@1z#z56O$m(<%sm7Cm`Er#n0+l#R00Sk8451qTU4rp-~6! zaB)9LTC_#muuS+gVQ-*?o~VqTuzi1L_WYI?vK#>;B@`>1#QxE5{=+qtH8dc|fl6x+ zTS^_pwaT_{lC@=?wWY}}$003*)NZ~6N=dVBpl=n(8F_@IB=SB@qtYiVGXLaC4;SrAN8RJ!fHVEj8~v^xR6%QSla(UBmkpxb)9z;eVQY|q30A?=-`>(IBh(Z;rI+fHNKR>Q`&Z5xekJB{te zwi~lade`pW=RNIv$2s>K-_00nj3oc9XYx1kOdwi7^qB=jAC~`T{oO?g>_Z*#)fTlM#Z06%qT)0;}FIPOLp0l^yN#9Num$rag z2?)NCL@DoHiy&I3B{1TBJt6esL>Yk1L5(d5xO+MIkOQ^zAqQ@k))*?Cus#h9fy~cQ za6b+~0PXDg13hS79wB~vP<~J(tn*3utZ)gIMg|eD(l_bi%1q^YHMLIA!bqYdGQ+l9 z%#wY;xZ!yxFGC5d=5!Ictnh*(2&_++o1~g7Gjsn;obp7xRC0=jEgjjGguR-fIj*v^ zNxsfV*cz5B5`BcGW@ZAMY8GDJ^h5<26d5otZR$5#5c#uqqbPHSvckCKkHlx1qMsz9 zO(KJnh|HMFHCxlhK9}cbQZ+G_6v4-Qk(h6vudkg~BP6{Ka_bBKigQ+k`5IVWodJQV z^~qJ}%SkqIIk_yCr=d zMh0xJaB9O?RvGdV^4P$BmLhB9O1`OmLQYdaUL`w#xrS#~)VRo8h#qmUw^Jv7Abmej zBS&4joXRjqsEI)qN-#byrW$DO?v{d-Nwo3B&3aaThe#}Sy2I4eGgbYfy%`m3s_Nuq zepXTbdiyEfSU;ICTQb=hnW5v`Ju{t?wY<;x6yQ;ySd1!MKsW(Ie`-XFBaVi>v z6y<>1>ysf-M<()CoQ0EcMLlfkmW|!R@L9f^h{!FlyjZ<26Ib0XeUGkFmUcbZ5b6?8 z^mGol!>a+l$M64sKPWh;q$>`aNgJ;vQxvOeOw?AlSr^i$qPoQyC_AD~(Y}b9Ux?M1 zK7j$(U_7UYJZ#7$A->2&rZ%yYA)H^PC6-Ootv?V%BBtimpdmD8pwQj>~ zZq;*OH6~6t>7vK#PeMIJh%b2YGX&-^Z{aaB`Y8pa))V%mF2q)*7b4sE=Xu^J%hpDH zfaVsIXFA9UzXuH=9x)ESpdxP_WH`V7S!vJd5E?3juy0`Kd!0`6YN~Fk;Y-ou2ds5* zPl76hxg(-;*WC-(ksEe6HRXF-Fjc+O@=(iC7uAY)b!F$TlQk9CP-< z<-^(+cWS}K!wa~51@N(fjnJQg!=Kb4-4zbf8=zl+>Ait)2kg+iSs(CNKh9Xk?_9g> zvV40+N9LG8)CVo0y_Q!z(v|R%@39s^+Y*S>csXte3yGb1;tKFi$+8KTDhfP8vA?2g zJwPit5BQ-tOeVqWr=}N6#~UVx-$!`F`L$o-7995=8ts7ndjLVnE|-h~PuT=MNxH5L zTwEcz3ksf!tq(aQ&o24>r_jPe*V?iUK3fumVY+XiD@S}Cq>o;Zqh`{psYv2sq*v%} zPo`FTRmXeQXpQ7}#`sd7Rx=q>=iG3`@haURELo8( zv_u-<>ba2X9&<#kA{u9WJlfPNT@EfFZ{S&PPI)7!d=X zAgV&A?(YcF{Ka4I)B1T*ykIVN-(UWI3jH2({tQO`oFzh`fRRsOKmp@FwLt!O3aPmL z6M~f1r1}LA`R3I=SvGE7x}H^qxnE0)#+56SMl_>dTccp;Zjfda?%F<+K5auh5&490 zO49LTLrtW!98J__uEf@~xPDlp#E2X0^cMw@4wBhRH&Ek~2S=mpQwRZ1feMDvx76l* zG3d(`!sO_uV?Wm40vQD1aFa=-KD3hkk7SS{-nuOF{nC~x;23CdgM%#iR*%6h^ z(`FtwYd1Q|xlw79AE~xwg=&lNrGpyGxY@TDZ!(!dY(5-Qm~;)Yi4YikElG>CQI*gr zuXls=huo+n~S79;5R?p-tQdK_{@8GvvKM}W4B)y;Wkwa6W0IDX&kdVW4zL-??# zaV|n(GioZt-l8nABZuwERJNxFjo12R2t?+@t@M+YxPPA6yhDBS!Rk7dR*Z7Yf+s%0c?undY@WRP6*3! zVon^_NNVUD+wt9YBJI>8EmO`M!~@n*sv+?iy(aK5$zql@GQd-@5=3kIu-c{i4yMl* zm>=~uO+rmQq;jme##0#fJvq~pm<$*X!@~5PDz&2LE$?iY3XO*;Np)GPIXjQrnmm#j zX2S0dq|O$LO}JA!KGTEE3EIo9!Qte$QbT=bG2+AyC^MI!EpQGXV!Q1<#PKI2#1jqK z9J-m);wyE#+#stv)iPEKGeD$rX!(SqGb{TIbQbrSp~sX{kKKrjEGVOIer=9PSPiU# z{9JTvZQF-%pQtlj+I?taAO2aiMsB)CW8yo|7ab}IzEJn$QM>o85!9n-^v};vJc<#? zU1R8h%|fYsP5TSpnbXkeo+Tv8<|+}zZWFD|dkf}1IS`h5qQjN`!)`{oIK!}*oJQM} z?XY(Sa>L3X({>>{=O1lGQyS?`(o&nJPZkL{hq2mS7aYb8Zh@@_{X( zHR`>@o?N7>j2EaGqtD9UKo(NUE=w8lXiYe($-h+qF(ZIdiJ@xld3q+Kdp9lwuQo|% z&W5N+w(&!8rr!x-?Uy0RQ-(PfKWU;4Di37E^Y7HP??b!%E)Ge9CN~DHb9$$5>`FDn z1X9k&8VHiw2^p9#F)>U1Bqa&@xxRxt1N;l~$Mew8o}D`j15>Qwri?*`O^)Csn5qHH zjP}v_bts9T)imc!>k5v0q=$u4jL}MU*W)`#;Iq%ac-wzB=0DB6u}7)92VmxRfD_;U zf6ScqZ!>R7`Qb1xhC0-fESjW2EeT>TDb<#-Scf7)q%)@=WrYmsOuuc1^L`9S0um4U5eUe;1 z9Jr`%eai|7@uc?Y^+vm;q^2xl3WK0VuPxoq3lN7+!4zwOW`z# zw9$Qx`n&*rYU@1T+=_Bs1k!MbNglMgWd+Xmn5|sLj$07OlsI9B*Q0r)N2Vw`p&X#O z*W5JO<-MFNvK$yVFTsasrRDR0-EWouwVcChW3O1c9M8KOt93T;z$%FyZg{8JZ@meZ zrggYB^(=Ev`oj+>1$p~4uPMURb!;RyVDtZpzhroS!Ncw&kFX(bvCrgTyl_Qh}dVH3(wyd1(fM`H2w0OuVcd2inGmcV;KM zcD&YuQmu&3s27_t0nC%s*xe@8?lys*{$%VsEqbzgcFk?F?fWgadLj(4CC}L!j>tRHV`o%%SO-7#GFdN`T$|uq zwX=bZW2@Dc@30QBW)0MaAbC|8qL#24*A{Pwhm>&E(|_&e*D9TYfaAxzuDkN9Jh9N{305 zJP_GnplTh)?kl;q-guSObGTQA$*EIQ$lVluA6Is_EyC-+pXLZMVI8-kS7-Icw&HUq z^};EQ;1NlQ4sG>a*qy_h+NXFFuomavXZF>k4bA+jKK$+x{`3_#UUTX$fP{}8;4g&! zZ&HH)SC_O%Nn08i(ApQ{ShAvN_>qk7r4ZPh8%oI}1P$Dwu=C?P`|$|pr!&eYo)#US#FT?!%(GZvz7jGSgcNNPn(7Y@ucByl5`N*~j4 zHef(}sPnPUJ{H-ubasoY$g2=KrwSddv)*S%qd`~U;{4-WI>(I&MOici&HKFpV2QUpE$+d(UFp5*j?m7gg6N8tjA@aPyYvfER zY`y(EtizpF+8}Q6t{ZCP62xDL-|w>gQ_3GK`CRG%(uD^|n(Mzw`9D%{{nG+Zj+TZ7 zWH~43WZGQ~)^$RIi#F z&LEtUCr$bA{j^BSvH-F_7;@GTtA*Nwu73`zz}U&hVV6S=v$B$v-dvk(`xqVzx=*G( z!<{}T<~~@mAURrQ$*kX}DY_)+eMsvdH6%0_IPaC$AY?7#Vt`69=wz$w05S-?dtOGU zUCX@0Dld^&UYj(8Um(5b7v;zA-~LZrq&9P$;sEmiet`O$$bZ8{*5Z?ctu>%K`_~+c zgT*IDVZf<6z;uAE1L;5iAZ23wCtRwW{l(?<9>?e8gM!7twfR?M}7V6_raf@K?wHXhq5+te@} zUUV#%{mmpQ7Lel~$7*$Z-$oGihS@UuQv8QW=sS9wzB;$zfjQ*E$V^OTkglYxM^L6J z+k}0+g71griCahX!5m#yZj=q?--{tMUOL~{LMoKY`3zxt0NJ{^n)jNdl&Xsya`Neb zvnh5Wf!l|V zDpy-hg(+>dNCR_+@0gtyHLwJ1s%#b zr?HrrII5NOzp=A9LVFiMoG!{|2U2qSm70uq#q2BciG7@9GlZy6-VB5$v$w%s=gQIuDq1D9Mdg{V)m}`Bu#D4 z?;YEz75>$+tw zbX-+s(!&(G$&e!6v zDFWICp|$*Wi>JhxW>AxsLp};+?Tc(gQ#p;3_+TzjyGEwvbq_&mW&P34H4kG8{;Jsp zdu!nyiuFp(Nd?={be>kc4lMe|(#jS>a|D}P*;A@PiG8v~>h3mucbe$Qv+N^WU+C2& zeaTT)VUB3OFiIZ3FMRyA(;E%O9n??u3S~BK8~>iu{Zn6AhLDw0?P(bG`hMBqo4_qk z3!>u%Gmarng@gu{-~iMjCK>0`uhE#_k^2+V-d1+3MF6H|eq9Paoq!*w|DML+H_p$<LP| z25tJDhmWP$56lqrZmCdoZg>jXJr_Gh?;=5h9f|I%2^^pj?6j>rnnTIE`CXDr8RW#) zS9m$a{$-xOfD*<8Fthpb^6(05fKtH? z%^krl#hrqg01+!UoIr0T!B)86n`3tWqjNe}S5kYVImQIsn*&uZ69P75e4)tBrqw7+ zy&NtCR`tPMAIgGiM>@o-$YZ_fJKa1<^@@^zoDH2r^DCp>aXIS+!)qMxcO>5k4~q9d zGU8LV;5;clyMFxCh`#+HnHx9L`F6Yy+I>Yl{eFJh`ajmTNW99kR&~FZuEHyl7s!P6 zkwhul=6tC_m|{}F?J)ySv4&abV8N4DKz5vAh!t0hAs>i)lQN}z+qZF8xVFfrfwlCV z!(xBW%zeFfhwjm21rNcj;(P)LjSvj{*>L*8}{)zK+F9B^82rRVt-P^{3E)*+=l=x zZi_{;ztFgJ06wQEF#UNjfgf=pe!kK*Smrlqsx=W~*Jn=nzt-sOXnLU#A=XG%SPHIx z44>in(cn^@Q^TT(LH`KaZOM$+~^%3mh%J6M0hnA^lfq5@F=3;@yKf9j9^avHz$Km5s@ zlAL&HJ7<76+yfCj7vNWlB6_64p66JRsf^|6Ka+T?hqDD9$WF32RD z{2i$KHaMJV=qVNRlIor!_k3~#a6i-gdrrs0M$3{d;LdjlJl+9nF`Ic>{B8m&8dW*9 zsdH&-rIFkqui))qOozIyEhI3TPu9|ajR0k(l{N$Id{d{aBij|8tz&u|a>oO@C#T-y z+J;}(;~+kf`}lR%HavictQsYWpSfk%ZP&160rfp&!6`VX*?L^J#Y;Sgqy*WD3lB{l zGCX6!-b$!=$GxwnL#>45$K5%P1@Su0K-MH-Duhsldt!wG2BQSk+LAIwAt zLJlu|Xqv;vB3v@N$H-){`x(jmv28+lc}dnH$x^kUi342krj2`R`{{V$IpcxObJD;9 zO2oKcBx4o{l0-o{Eq7y89kK~Hn(amx9nGTNmsla>7FJ@5{Yc1XePQ=+>*y}IyV!;| zTc~|^8YU__6cbU8uzizKpX@~U-1bYfa2F5_PkrGG{C%mjeR;r`+8~;Z9H{c9M7ar0 zNhPYI519BjOh4KpTI_u=Mm72o)&m_F+b}^qHGrUy^f;sW#c$miGX^TlMAk}Htkh&G zqE0P(jvsaJKt8Gx5^zeKe-9E;=} zTonMOFubV>nYT(#&@#{7(FTdk(>JLAz2NyvX@6JEKb5uzhg<(I*6w70(lY(GNcV60 zjQ^#w%D-5<`R2d7thnSsq9HZrs+eOK3MvvXk_s6C3x1Q3IA3!~-`;KxwwB%nsH{|e zH~|w=2<9FG^Ja%NwvrYdg6Bum?_7@)8|m{O3HX6D`T{w3N75MWBLM_z>741bnOXiT zoUrTcjAjOUgmpCD&ZL1HYu|JHmJyF>7GKM`ugHqrfk@&)*)$7i9~6>RoJ9#UCNCh( zEe~|HWNpe5*2~dgn3r8(qOezKJ*#{6z$0!C^VPhIsKL=e?^Ijzd4VjuR1$hKF4d?L zT+qu*$M5x&hZiz#TulfWTTYTA<+jnG%e8o&c=bn>7ToXlpBrQ(5)1{3HM?nR<2FWg zF%x z26W7C%5me~9bT|e3P%1@JVew3&EA7cQN*npRn)C9Pd;SRZ@VrLFW)MX8tggA8`v<@ zS>)UtPf@!<*b^f^WHd$q;?8#FZkq9)0kFbrly-x9p$W%JzlZJa5zxB1uSfo!(zTHy z?a?}tehBf+6Otg04Sm7SF$t0iY%365u~5+@wxQW2pFlV4X&o*{Q`sw;GJ z%F*MHw{ForA=||K$oTb~m}Dg>{+yO%aq70BAWCxGJYOB#S;9N$dXB$%6n|bJCNDd; zCi~1aR3Ei>az@TDsZ+Mc1r)w|X0T0aR$~IT!2ZQ*9cl?KV#wef>@N-eT~Ghi;2}=n zBVs`0ItP5n|C(m8_+v((Mq|X>b~NkP^t9ZfPNEI5IO*{O6kNK zMSUZ~ic#`SKL-@yud|+(p} z6$MI|rjLO(Lp8-msH7o$0b2$23~A+D5IZsp8WZ%DDTPn)6g7WZEj_cqExnTiM`EG- z2xY>WQbvE3Re31SO>+Lj5ZSW~7C3vDK@Zcy#NqPw^r4tX|2Rm2fNY*s1*4sjTlChP zSidNeI|a-IvLiACF(bG?ve5l5q_=Rrr)Om0&6^|dQJyaEEfv|b_Gvg$*vs8DhMuHm z;OpED&v7&i3=Qr@K%=L|!D=?tj6lPAO>*5J?95IcI=ez}KR!&Ki^AUd@)W{fsQ-@b zpQuA>Gc2?MN^xO;%V7VNRrif3#s>WWfWE!t=m**Fg zJ}x$303h3Lj%wTtk-m%0j3 zu=ZNgotd4hSab{9e8yY3Yx_<)ua(Os5K)n;TF3@ z9x{gtogEV_1uk_80#30mK(%8}2jbh{e@%tt0nq^z81TfGMD63B*Cf(0nHivSqqUoO zSQRH&M={}C4b~UxoE1AOr%mZVuw#hH;MgUn?Rq4ZTF7wE97tqlh>%)2*c)Rlsn2`T zcq(*p(~d#GX4lp-oLp$e!d0m+IkrV@EA6TcmZzWvomI!-tzXI(+p>0NUgc64+Gc9! zI1Zrro2eD{mxQ{%ASfJnkJ=uNk;iw?pdK%?N2ec~WsFkTe%s_7ykNNy02w z4T~}?R8Hz6oQRg|3y&G$ghX}-Y&EyIe#|&DkDz#)k+2f*?Y>iXeqFCW7|zsJO&lrG zqwP+()NL3XatU$^n+W3!WAZG^p$IH0Tj_^E}a zw1CxuFSLTQxdYw~E)W9ui+`r+HL=Ihj8-y@Eus2zf$ekb^^MZfAZ-bfH^+sR6a*ZZ zz(*55DR3wF?jcvu^80|0PcsS#$D-h+na|px1kx-R2$uFZ;;GwmT9qW>8opD@0TGgQ za)p6nD7pH~0x00D={bBfKpyEp8LTUrQV@93es19AV}8Z+g3q8MlOJSpW@NZa<35DL z&O`y}hIClu?m;QAfQX1k2prsnor6l4`i+t2uQ<(wgB~xz&QtI} zRLs&RBl3iV6x9{1{DxGT^TT{lBreeQlkPwT?3Kgh&SvZm_Y8m(t`!L5{nvZqcMtGy z-|*LB33{g%%qqYW7Xm!;e|iflnS8Q!F>!DQ5VRV)OBmW1Tm9<{NVI~q9IzmwcQ6TE zn8Z33iaNc4ur04YJhhF?9VnYD9F|pkQwfm+8wT!IVJsXMa*;Ao)uPj`m(H5YX*NI0 zJ5+9H3TWNFgX6tP9{V~Y&;G-OR1^9Xb%b+rHQ+oJ7rDNwgZ31yog}+>=}{P*FN04- zK?}C8vnspILL)DGy(D>WyBNJAx+cMP-H~ir*9lPGdq>=MiYoT+)zMXRnjViSn<060 z9c4b$rbfg&KKc&}z6?j6@-M>SzxN@ zQYfm(B!dj4xiPMpDod~G(rOp@P6mGbN>C&hIig4Iu7B&&-Tjdt=&tTE_sAf1rjyIt z4LYPH)m0s|oxE|XF#{)WqDum%ZRqps70Gg$N}W6TH{Dq0XpM~U(V`K^&}s~s!HO%C zi!U%FVxQGs<0(3gp3q0rB{`RR@eQ-H16@guK*#U#A)+uRPelfUHkql>s2?!Q)0t*P z@kb*`lY?AxRXcNIr0I4j=hDAKGRnw2?220uCts^m3z;Qz!Iv;I2Ys)E6L!NSX^1${u++K}rENiMt>8-E89(pvOqSR>r>>0GDbTO&o;6M8y;fe6 z@78p@idVwWxE`s(u7dciixDBu7~*L0jdhy1X(nX6-Bz)nBXH)YuGF#D1Cob6G!3Yb zf62&JK5||Va{+V#FmBF~s^~@C*)M|F-@pF9f%(f?>-+UjMgVJua)323ivI+Rq>YoH zm6h!$LqH?pZ`BJ{+4y^u*SJM;-r54hBDlD&DAyVoPJc0WPD;B}O)3&K!cT%@G=;uU zQnERWIA(V#ihK8|kY$2%FOtDK4l847BnpB51>^Z^ZjYlY4mUA(dY0!@*U_G<&(Y@F z-fT?|5GN={2p;EZ*aauKkIS{{ItaE2E|UYGcKf~f>y-dH6$ICFx2sq^Enf7LD@MiCy;UKD%yjrv5CI4GgUO~ zNSB37TC^-2C#_P>smeX7fs*RwrHk{3BlL#5z0EkGe#4f14-#n8t$pL4SpiIX^o)Bc zR4w~5XO$%vIBTK-+E^eC5u*as#3j{ zqfK8YyagRI-GH_vk9`pj{Th)xKSK zA)5Ik@3WlY50tu3G&XhH63Ua@=AFmOXbEFw)Qu`l2pt%4qQNR#$|z5Tq3dtN@RS3l z<21>gEIU$5)|pVaaj57nyLd3u#1?tVBB^1h3D8wPv#OuIH_Sxi!=%nw8sbMyk8YA7 zx#OxFyFoJs<7Gx}t*5ExdA9xtFs9eABi(}3BfI0=D)srY0Ho2DI9leel&_-@!!rv71bYG!D zLw$J9{OLQvHJUHaCx)PZ3Gag;GhjmhZI>CltN0E(A+B0Yc%P2= z+?m436}HgH6kE`|3EF>dcKyZn8@Y-uMD=A7dFI^xD~il1j|)7V%y=bc@Yzl$W@ zKsMkDk%&EGVF?58t$&Po;|wvB+2->) z=f`o-TH0z)wn`u^q#%5w4rU9}ItBsu-hJe`{EE-zpKI}Nk>*Qo%|p7%1f;tz(d&u9 zP~mGUzuba*2W2OHvDHwburz-Mn)F{at_&gISe!Zm5e3%SO_J_JFgfgO4nI=q(xWcL z5QLy0zm$rrr|Ip6fKBpjnW_@abK+KArKH-<*7+!#wFikR?0Zw#rbuPvYwHAj)Cx&JVEJ zk3a7{$#Zi1S7hKWdcLjU@1gp;N?!k1j>znMC#XHp?&K$M5Fn_Fk3Dh38NQ}EyuyOG z;tGETR`u%JN`3V%qQW-Jbo63nNPtg7DsT(W=xvB}OV2=bqab7);;k_VL$x+(>URc4 zVZ8&M>w|`eYmG5qj^C}7`+cYH(Jo_%Aq(6bpJ(bW=O%Oja@Ws$mS1ixRu4dCj z2f{m$+$d~MyZA+}K<>xrY2XIlHu6Q-5ZP+!(8t_{GF@K$c@D?dU(J=@UEsf+<6lu@ za{_3Q0r1S>0WfX+C-&@rjhX(|Uy(Jmu#vH~wfoyuR;m8oXf@SZRzepruY;%NT+=UMHbO*=g^^T`o%NF#uk~fd0J5FVt zxtf}O^zr-w{}mKHUx8^=%$PO;J}YJyRwsEJrdc?`}(1APdQ3UYpmM=n@UH`nfa6j`}y zpbImQMK_jn&XgV_7E0>&{RvZooJEq62{D5P8eb5_cQ|BS~S-srq zc~vzRoAeiFhhnqztyo)G^V1@*y zBRdGqM}20?ku3Rn!d%I&+c4+M)Ow~5e+FlGma;RaA`i}NZ0-n`cXX<5NO|4zl$x0w zJ3eOn9$KJ-K#O2k^8SPDCEZGhyaSteMNi$?7!2f2#>LN&Ktny1clItQ~%D zT!$Bs+5Kbbt9{F$X31SnfyQL3uNX7Zoz(6k_K4n%%(#M;`2NxH&S_2_Zp_cXUJyI7 z1E)IUIE~Dxg^bN0CTBlNmdT3?pP=LEWKf6r3ERUZ%pG7Z;3^(8`ZqXMd?N?Ug?Zn6 z)@t};XjfmGB-|UE5+i){>ko17!Mj1HA{CyYU!HVfZ#=_pk&$(TQ?`aV^#{q`Kg_=p z9ZLEp-id0dTcEA`4G}!^QIys2i`bzKQ?79iUJlz6&~^EPh=()clahu=U<(;zWWk}M zW-SLx-NB$zd5Q9vKg%e8Sa7ZPf1`a4C7l|bT{7_8<5y@g-%ng;l#PF0ry_kliGIqF z#4T>hIx3iUUefb2P=%7RN_PcbGZ=W@S0Jy5 zczDiP_G0?D!`^eODRb0MGv|&j(^_ViP3kufOJ^J(itQ+(5R3Z}neh4s#b9@oAXEEW z11gA-iA_ax%u3~}=xO;445&hi3oVvotT;34^%Ot`m`4$_W??7u68)F2$c1(1CQ4x^ z$20P((H$%nR^#TmP4dT!iO(|Yi>|v;D;=BJvf~iN81&?1@6P+6js7@1xCh@MF!fq2tI73WB z)COD3baozaSzJjlMG^$V;374`43MN@0fY&TAvwO^Xm-*2&6|V=JX)ZO!c^b{qP0qe zT?I0ziWXlV{fK;68yE}Wcb2GYJXGhKm#$!=+m9te>H-g?alOu@^ib?G^L`?7GvB>e zz=XtTi5wTiIzqz2-JOYGMx&D4t)R{9AC4&9S?v%QMMN3BjY!uXeUIO}gH;Z?f_Luo z6tN(n!WW|9rgR99|azbj%Ty#d2pTC6l=qw-V zEC;6BDd9JXD+!V}xd(mq@Td@=pvn7EA@swp85tXnx5Ce-4Ekc&4}$MfFj(NANPj#o zAQo3-V%|1{IF+20`zGR>(81)^*gnkjO)z6rJoK~J1~unV ztO!{)oNm1q@U5QU{wfvzZkK;rZ013zXF1^2^%G#V4FCIq@yW`<#Kwu?UorHT#r~_Q z{&)0DPLQ?*4DSa|TjSdVNK3o-XhY64BBl<*2ZcmYG;|bD4cl#{v-VZ0Yv^@%G!`u&v+QP4|2E-fTV|YqZI0ZO3NKkA5v@ zT__8M(0Sb!+KYkz=(&u{dNd}Sdh2sy3v>F`w_*6Epq+iP?mLpvc5@{$gMB(uUZ`;j z)u{xHT@bjlDefNyN)xzTlPc$J zUAZWA*LXf3wXPLDGH(?!Ri^A!tAkYSbq_3iT~OyoFm-#V)KMB0X_fQ+PD#$qTohDn zbE}_0uar_Y4pxVzB)xP~Z|*=gp9(a#Xoq;5{Ja}EFLUMCxo$^H>IX|?bBMehf_bH@ z6D;?+9I|=k^#~dA?|(V&--Z3B8VnTZY`6l(*DB!ubH(@%HTYMz`ID8Q!~b|~0EK}% ziaP4MDRP=Hu8pD~D4S9_5mbD{x}oSM|tV z)3k5{ba-Dhv{vXtQWX<;1bj|1!7+(ayxOY#3QZd|7HN;L4^?>}4P;$~(qS<=i-(Pk zWtz`-X=j*f-Rc2aGm)ZnH3-XO<75zA4hq!AF+FDP8+?c9HIc4r4v6@*CCBqGNd0pN zsnCh-jzXENqMSS>>6(*FPn+r?8y10a`Xnmd+H9XRQK!B|h;~utnJP@DXA}^$5gQIm zOwkwOSv$s7+$wYcO@j=z0Ft{Ej!CBa_@GRdNRVEzgtF}~bpC8u^ z&Y}_*@<>iWCWfd!xWif^JcqVX2w;i1Smjzn%`z#bYyyiu@~_ArR}F0fR>VtRj1cj! z_)#e{LpOmX8hCn4UUZ5#=@2X{0r4enANXxt#v^rcIDT~8V~Xr)Y(1bqXW^v)XU3#R*3puYUof6Qga~tR~go=1jC4-A7HCxtmG%E=||L;U%tDTkd}J z;xJCtN>FA{t+CAfs0PDMx-VtWin+M#h%Iq!b0M&=pkrLaF~dS;(41d~`G!nCQ7EMZ&gS~8+cI~uYs(59RZ%geeB!Xi$ZOuAr&jb)n@_) zK4cCpn1FGWGt(8-K0VwQ2g&#+9y-5}}NN3bTHb=HtG0f#4> z=*tR8vQNgID1N511y(3d#&i?1Z5d>de|gdj$9d%GP-}c5c4RZURKzG&&;-+$Tz=g@ zO+fU-9!6&8oq~uC;C=}vHYDk5Y|f9~m%Zy395NMoZY1Oyg9y=B8`Kgv%Mpg?`ck5s zp%%VaJ}@2UgIv6JtUH-(h0&Z?=>dT#j!~sj+gG}-(XDN|u07jYl5bzS-ddB-G)cJi zq#ZLlQZVfT?9&fK zlQ(nIAG1T?waIW1VNlZ*1o6^YfYUTtVww_JfKgJ?Hl#TcBlb#zl7Ljw(a>jRynRNN z{g_Nv@`PK1yKh%VK*Wy$UL>y{aD+g3C=prR!GQwAIs?>4Pb^78EjC2uZ3T={<&8=W z#kqph$xuUpp?^@PRa0^BsmwaLDzN%nILW$?!m6`w1a@^>jBzBZ>pUMLOLNt(hXQ>W z=hxz5qfLJTE04Mv5l@{N27bW=x6h5@f9bxSeHAWwMz{zUxe-?hz9c8er)P@QYA;$P zP(W+Xd_{3C=w!n;!qZo}n<#ka`L-oUN_OWIk^0ek|ME>XjGd?sY71`67UBTh1zD9A zCOEnvJi8Cv1v_&Y^ko_A+|VrE@Q86@ie#LA8?}RyIl>(>FpB(&djak8c7s!dTNBlY zFHMQ!Et0)_;IrfbD?EhyTeQ5cd})oL^jTx7ytUB&oE^l@%ph17u0)}wF6fqsE@ZK= zX=-i!!EA5w>|_*K(&N(ylMDnBBSd?RsyKo?Eatp?&k{XPYKtkKM?gUsV_&(qy=v~1@8WwnI)t<4++9>?oEIjLMB9)OwEC&0; zSyu^Zl7*^QFA-6u94x0(l>GDToK%DDuH}aML47GVXgb)3M6&EO#r(;`pt$p7`>Ex z1EC5YG>MuJ8pQcsYJM4fzL1paw5R?uQ-7K3HVbaL*|FK%;pp6UHQmz|TZl?@N7&JJ zbN$i#%a6`W$He#BEnD9YoUy5rxL>1!P)$WA$n2zrKyQ(4_F_cj4^cEY{if?EcW`LK zHB#&_9-j_;fVZUF{6e946Rt4jMM{ZTLo^I+98T#$Xc(PjmQ&8kQd$Z#ocV;XO0W_# zG+p^NsFE<1SZGc&GFVhAvb3*o`>FMf;>O!K>Y9o@?MgSwkArmQu(-`&rN30DN47VV zqRVCvH?l40DB%TeK@63uGwC3)M(V2S2HK5*jn8F6DLdb(MXd^c=Nw5o@U6 z5~o9lt7*@eml1C1%u=jMZ@XSu1H*=R#RSQu4=up;n-V#C6emF}$&@}01_J9*xURblJI&WR3gqXQ!_VADcJFoP!v~e8N zx^2$9v$deZInm1db5*f6(MF<2ot_P@gdf2>h%>p{4U3XDWXxJ#74Budum7wx z?&-1Y1bYOtnDH6AsL@ngKH6bJvF*+1#mS90OHSP)h5poHyjiTW-6H1ZxJ0CK#4UvX z^D1%bCM6yc3HMS?6bz%Niirl{XNMn2^koV|WcwyjJFwO^jDE~UN%WDWqZ(j}Lm?uq z%)D9o);@lGNS3fAYjnh*w>)zn%{ZGlCcZ&e>Gs*paA3Jq+f{@g&%ROht1~o>jC9MP z8ja_T3JtpOE)}em@lkdjY+KP>SF7QiO!<<{P>J$vK5$<}?>o9-04Z*9>`Qi7x-$2O zyLp;?;+jznWvG?q7U?wLe1B&*knjy-4B6Z;+WzDrSRxQ5@D<5v4{_4-7>{O~aYZtX zHFeYl)!XT!qyslPYDnYItoF-m(eN?$k(deeFbIT}9|~q}y!|!URK=YM;mmTTI|$Ja z4sIXueLdQ0bi`HC#e}E`i`Ksy9uyPwlpv9WO`G9TQiU95 z8(c!R5gI8BD8%s#!}GpzMz6D_kJ=EvgYTXp_6!hEHY8bAQ;9QA#EYQ!qgn+WDq@SD zr1qy9=#v0Z#aF+2z>wX_CW#11O*PwR+c9k-!Pd;_XG z_IRL6ngAy)Pq^bVioZYC=VTnm`A*mV%qY_XH?oy?i&kj3C0CJuX86NP2rG|QK*k+X z(LD(NfXO47g0r}Egho_Hk(I!#J)UELD`dP?s5EAWw3|G0n?n_1H^1*)^rN$C777P? z%B6{bxG(9JbAHX-*X8)@Yv)cO)*I5T7BK0ZlO$-+!LN!YMd9V|9|8oFa2`!YP#y){ z#HIE(WGu=WkS4%}40Q%YK73;Go6VM`!a26uzm##FHF2*PRUY6&g-I|fP%hiatzQMr z<1x;|Nld%p*~hMK`Ao3}`L0;uvM9kb?K(Tf3cVJ=upM&god^w;mi+s#$I9=1`%jO4?cK!E1gQB2QGfWr`hW6f{hKvb&BD>* ze>!B@8YTv);;1=LM4_OM)O1wvp^K%6M2NJcK&K9Ew06dq^jQL>9e^Jkv{faJU%z=b zczQk@CUCTU+}dop?RICmb#Xb;{&~6TEEGoN5GK!ifif*M>uy4cFZDFwsN_@;B}S~q zh!i1KNLkhETsa3nu&1_8kt04HB0`uFXLLBy)@!~@0K>{2g1m$Fo{Lvc4CPC?ZuDdP zXkp>QIJ1-{onUt|c=*P|4AIv!(2!i(>Iwbe=9*O7wbgUv{B^F6g{LzLQd%P;}pF zS46mzWE@hcm~ZKgcdBhGuAWv>M)c}|SE#>J4OddZlxS7V#b?Z)v?&$R z^o>bO0}oci$$lo+IQ6m?U5q047;*!iQeymo;}bP3!>ZUg<|*!M3T66*`DD>!#W+@) zBIgsoRaKjZ8_vKEMAu4-T6BK|ZIWl*w*!4241N4XV%9g^Pz!qJ8ejZ(0t@vFl()XO zY}w@66kGKVA*vxnvfV^-(NzdN`|KFKUDb~)SiRUK=-+5X>r**Au_8MJJ?HKj%CEf- zIbMcd2X_ybRnl6LDR=PQo~~N$x{dsgVtK_X6a)Ds6z0~bdYAd0TTWtS3VeMAgJ>ki z(htKb4WPLIJ-hYmEIC_NhVOs#p%$!v%$U~O@J{wTy&c*V3UhuKCMs*i59E_`HtBx) z8q!b$Jt)qR{iPQw>9Ep`xP-SNDTSSTuK6!BqefSPoTNx<)hK5CSIXhzm?j!Vs1el} zQH$2T;OSFUfNyWpi?s;UDH}dj!H5K>PHWwzmLun>rEGlveRaA*n^_@Gbk11a0^CS? z=Cmc1Nc{$+aeX_|gvPMRwOxo_x!Z=I|8Xf-UheV6kvVZ(*LV0KQuI(w~# zTyC*V&Oy&fKLwlkthQojFBwRC0D4UPDZ4yrJM#H7i$a-j_j{?+LyQdbamIN#|J-cp zya?J@lS@nGlYs3a$c_f7xsH!Q_pqRH>#;sf3@F9ew`Y5*8ELjyHZo}xd(?R!f8XWq zm7^HL)L>AOVPTgjJvnp1ihi@UTE41AP2e_Ym1daSx=S&Z5|dS;Aj^D94L$LgFIV8N zy|P@6{bh|^r908Ws#V%dVTqFBj#K6~fs$fOvSyQHoE@J}9<;Xr$a>n>3i`t1nX3Pm zB^c8-UQw^ZBp-n&gB_jVUt>5*G3*^78=+{c9$1)TAK(C$j%A)5K7Ciu0Z-S^%R!xc z$d5t#t3wxzFgL`6Aw61%HOrmv43>L@V(dG?U&Rb~P zr+d@-S8=A*`i<8Eb>L>81ShB7lTz&O4$|zjxh8c^=A0u3M`@aQq(d3gR?fbRX-WlDF|m$!#cw0=a9}whIZsrxxsDWj8BNa0ET#E(?=nmOxXi`PbhWK!(NI&8L{Ri z8a4>IjpXkRE1()s*MQfc*Ra>n*Wfq+I1o56I6&JN9gq&p`=|Z10op)Q0os7#0OCO6 zz+(Voh4~Kx{BI0xNS+1()P-DqWHVi@KmYYWr3?H{d(~9t8IW`-J^N0pY;$Ab6lWU>-F09{Z5} z$pPfR@}PNOJis1g_cr^S{eJ__fayW>K)OLZDDR#2QTwX{)Pd_k^}xFUJ&5nkj$NVe z)pT~ix`8{uJkam$_ODbxJl}V|_8yZaqc;H)A^?Fv zXhM7<5djej5I`afB8fOA!60Co37G+bpi)uQsSb4Q_qNFH2$I^|ek#>!wcggYu9mu5 zx3;03aG&+E+waQkk|g*4{`%(gcmCb=ea-WJ@t)Ov9Fz~o2MmCmbW8o+28_`^HJJEv zO4UCA2)!#x-+?=ybFci80v|Sn{RQo#!mF+?JH-08*E=5g(?XxFIP03SBQPqvk|Q!I zyRsuRYJ1fe+eeS?NuNtUKyS95pXf+EZg=i)Sl(^Hp&Zr^UFzOVK%o!%%C<15pI=k=@Dd#WE{pEts|U-m%!6Mm%` zc@>-?Apkd|7$~{=AgB>SBN3WIl4TG?^217p3L-(&EGi`2qIij-pM25?lfGT z9j~nNs3?#Q{pomQ=nAEmdKpkr74Cf~EJMO?x+vu6i}o<64Kqoq;Rw@^Nhk1YH0p{9 z;;>qk5lYDW6b)2zxzd06K1-uEYN@hT8TA>?Ly?6fLhPW(2o}}4QlmVojKdKuv2Pc! z9*RA-HBi8#;vT7M2GXe5LNSyca2N51V<8HPfNdmt#t3?)WhAmz#kq`X)~P>V6nEmp zM%6|-RKqb&_!{A?>W~NAhibOmh&KD#YFvralW0^_II|y)DhpXlKdQGbG_`dO9{xb&Qp{&;L>XVu%jUJ3 zet2-@&dj2nf#Gx!Fl7)dMw=K9b}pQ_)r!tCW%%jX2xvt9>xln$?>PB*OAo}gQV-+y|C4|vuYK{#zAe?%=;l};1AZ8F06EP ztgJ|>DPe1FN`H}bS%l~sgH{paVwkHXmm?OwNq80uZsIinl8)F1tvhL^+d;tg~V6B}s{wK-*vB+p9|Ps z51vQoxXk(f&lCXu{lNj8^)eHfRA&3X2eLgAM^$z^3U^kOuB(4^orEkMy3#qdv(9%a zRKBjV6iye$Ii}OKc`1i9EnVgm%n^=kY)E{su%pzqodMbpD^MKCgdE>}ls4$z^^INK zI}%7{-|>gbq8F@n`0BAkNgO4d!qkdDMOM-UKYvZHZLw7gV_8|>CcEw0qYWgnlG#I6 zm@p7^?PCDb-g05D7GkAyhcuK>KUEz6pGS7i9YFsETYkgiVMpG><~A{cLAyfzm5<%c(o&@Xi0aLoJ<6-NP7@WduCk&Qd1K~At> zVi=T&R|-4bF#{`kV76laXBL?Y%;RHK7j~H<#Dz;g_-`f9;E);GSu^AnR9y>Kb_o~u zj!gs%5-gz`Vq=zdfdK2GoaI9;>C084)f6$|kZ*vJ49eO(IfA9tt}kgF+I0`b==P13 zL;IotDo{}DJPetC%zWqou9@!RT+0}y$ST(u80(udvY5!K1!D#Y_!wi*n8V@I#c~zS zb_r==L~9N9xf7d*wPLLzGz5`ch7F3giS~w#lf+s^nFz~*48fE3$|8CzPAk+$k!N;W z2T$!r_rC6^*`rCeho)k_9;?SrDBLvXT56V6hOP=DiW$e}T{Mu*H8_d^5+}24N?AX3 zH0-?Ir^Fax8Y>++{1KWFL@#kEc0}78+`&g+Fwd7w)I4#77e~A1^zRm=-N?Xt>2p(z zrIljgw$~qN-e<#^Ysgz3D{WI3FewVsVLAx&y2%lE}fGp5y_{PA!eRw_y(-qiF4X(HE3~m#)|ofLj(;1ZzDSbQ>CNF)~@fw=^-;nr8|LZYl4>%qED;balC_a zCc1{vnkXKbCJN599;#K9KUm`^lF)8X64fPGvd!!QQK6;LF|*Fv3-Pv$6l-fniHv@0 zX#Vi4MzMGhRyuPNkeBLPGR7a6+pv-2hnt(0i0EEGH&TrYE-=NHs*YU2*wWV0Hj5|7 zbO8U_a%n>g=F>|#Dfv>>r1w-wa-}O+yUUoCX0$CIcMTH<(*fEvK|p@-6xL23W?$Pp zupC?7UA6o_vS8who!-*a#tZZaSk!*y@XVcpFAk?Ii>Gz2z|;YdwCYc z>F9zLx$O3+TDko(viWCJC(=1nC?)IrHf5r?Ljpd93$e%Aww=f2{rWL$H477UN}bD)9PfoB=}bD)um+(t6UtC%Lj!xy*7wY9Q8y6izX>tDXX4AFcl+Sw#tx6yIt$X^NZdPwoU06%Cj z8!5qgjM6u7;?5+|tf+L{K0|@DM{8JKnATxIm5Hmh^hcPw$|Fe7e|lo4HrDHnxqRdg zVTa!88W?#d|1fK<=A~uo8O}$@C1h~ak#Tw^(xl{?UiGwM@Wp~-oD~@-TQL}Tra5`B zUYSy0jkuYRFgwTArEaru7%6?h8U_|q_mr66E{yKklWHMwCN7K09*uodWv7>f(Aummae^)aVQ*8ovL!zBlbi1lCSlt-E{}H# zI3_j&SaCZ0``S#~$GTyg7Wyp$hiz=Rb`|wk9a_0xSwP_vl?~tXOT|{yE#u`gWmhYm ze}uWna=K{qz*hE3qsx>*nzFYmxm$OFv$tg$Veo~ORi11cL%Xu6eJ0k~>!rm}OZ1U? z!B*VEMPD~$^nl%2*oT;Too`e!H|WCcG2OW03;RbXt=frPT3r+S?wVb2kN!CYm|xX9E$ZQkD>16FCPdJwW5&t`i`rDd4X94uf+iYvSpyEcD9Sg> zLyo7u5oT50m|W2jN_)g0Fs$aXrj4WuMeJD0_CbZwzov%;g5+Q;7@l^r22?;)?1H9uAt?euhOjs zN`;3ovOUwV69slzV~w#?%FW;VLaB>ben|@HL7`2Gm9JBR$1eX%2!O3^EzB?uC$dm-InA? zDAp%u&yS9OR}9owL-ft+aQ<*O)}N&B!#57DxceVw!|-`K6L!l(Vyt^JTu7XIG`H$e zyYjpKu<)G49Tzt38*6EXVcBj48r4#3a+eGhxl1<$)x&+muUOvEJ++PO8&s-a+Q`3x!D##uzg35XvN)w|{89NB$70Ui5W@Eqazdcp zlIL{2RB@J25%wyfmQd;;WfW2|RCo(18loc|{R&BPPoVZ|SxFU7iPE5!go=&5nKhJ>!{f*I{j$nQmAxI|2g##9v%Llk zZDWqPqdyb9H;9RW70SkYjsBKAk>ub$-Jvm>wX(NjNOq2y&8|0G{&7pm#zXi8UM?8`wepf{DKMq=R9q~j`HT1)nJCpJR+9jv z(#B&P7Lx*|31ue9*7CPC{KdsW91aA)54bWKPJ=w*wM!|4lL|2;Rzb3JJlJFSVn=6I zlMXEgbq^x3uLDAufoLOB?>QCQB{vVmvX~Rdj9c+g)}5!Z5vP>J2<1M5l>r086(3m8 zSe(yvzh*fV2vUTIc)>eZ52X;GWie_|h_@LgUU&sDD=ChLRKPY^kp`+pIGM(#G|wjzHTB~1C@m)~L2Oxp)aB9#Y+O7e%Q#ZKR4wOI z#6)x*DXlS3HuXjGEZ(5isDdIlUe~er5FO9E{V^geE?Qw8Z@^BiYXFCvWU*ZlHqGJUswZ{R`;uvT zNp?9o4yBuvyYfM%h^H$ManEHVH*s8fiKj9lYLSp)TR+v79S7ZURK$aY>nzHaF%YJ| zh=mYjIiyMzcBIC}q0uaq-Ec)B2$m%`1FeA;x?Vl9m{>h~-0~%AdqTjV6%uuQ;yLsx z?f$UP;elAcNc&wuo!^h`G3|;0Mjfr~Pf-}smv+4*EB~|7>JZyqWvY7v`_%{yR+L#6 zE<176jk4W2>ej=dw&zJi8r>A`z{VDKqY9o?fBn(sOy9Y=WvwxF+{%?RJrhk@k_$d(^cFo+xOv#&)3FvNv#U0eQ(R^eV=Er*UEX7z3$e{zsZFzLBced ze!0k=up!>2Qre7+lHD%Rc=Yi%_Z~3@h7e2Z*l@8&`EeK~#}jOz?FOCN z8mI5dqe=5&B7Y&fzO1={=3ht~$KkhaI(6p|iiW?T?SvmPE1t7$AiN89dLcUjiRe%z z@U42$S3VMKJDBT~#eKVmF>?mbk?l_nl$2Wqy7^Ex5cwE^_p@gMLY240z;FU0hAy71 z3)kt0n{(Zd!sIFssYTuMS8E>w!5S(Cp63ZNmY9qke-FzLYLcb?9LBpmA9NoOQxOol3oVbbvC z;vCV_L2JzECu6HQkc)Z`(415SZ6Ps`bX8XB$4j*A(z46TkzLR*A;&}XY}%zyZA=uF zu4+H%G?1<~*Dp(|-6CcAzUvVYXkD&nKE|Rdh!n|(dG0wX)y*z_X@AVN0!e1iw;o(V9w(q7u!ehJP;g=N9bM0PJZl)SL>&d60mk6!CpJ;aB z?IvHopA^7wI`p4`j>)AzhZTZUGXtS_3aMQTmCPuOMaH=u)%*qAI1ZN0 z-?YiU*i}NX}{W$-)_|%`pMFptY7dDy)Ey8ZeiNJ>Kd zgV?+0vjTp@bx$$3FKK{&K*uAi$_Dxx&P7~)9I8i`8)Go3kl!I~a*+U+=>hSG9iYc*)D(nUr32hM2Y^mX7ZZzyd4FAdiKN#9x1!RagF8{gt%Uie)x&E5N(o`x{JWR4+UzO7 zIJpsgvb^&K&jwedDnV4x%$WJio7w=HL2R5%sYoG|w9o+xG?b{gKqWT-BRGLuz73X0 zA*3QlF*t=vb11>FK=f1KI(mT+jNd2EFF?h+I02k^6hB1VcLKs=S!g%up*FscG#A9g zCn4#vw$*rhOG5ioLK-Haz3<-a_??$N|_{=ws0=S7e6*z%aKa33h27Is+bQgh_ zW(0qJ7(4J(y%%A)Lp~5~_>s7w7h$?q%pV$#2CtA^i#I>O%T7yW?#j ziBPHWKq?H_=mHe9A)kss)CQ1M0opf1%Ip4B^nS|*?A9Z;djW11VQ`y}@P6=kLF#UZ z?0wgD7A3eB9#&vi`s%q5@rBqtw z4X4yvfH2gt2G??U9ku1$-RIZT3ZC)?)v!2LLt!irho4}E3gAcTcmY7ChK8tJXlOWL zM1siTV6Jp3*K3=IVA}+kEkf+N1eeou0~oHO0(|b&+%Oli;?Y{Oa^l>aICHF_IC9wG zy*FY7op2(o<~1AwHNOrepcPw^U4Tgq;KSPNGaL|!y~V$X3xT){Zu~LDV~*ekJ_s9p zNR`+GfOa7)9TPyzy5SR8ClNWF>sTRuX|>Gze;^FMZp0b54F-)F8k_btBMiO&Lc{f! z^pyRaf4!l?Ex<|MV@m{bpD_47--2C27BrH%fx$J3IECYeqNLWQ4^eAeB?bS99gt@N zi!UE&<}z^NaK~$aLA0+@|poCX&(B-Z@%$|+cMniSI zt4Rf8WSOSe411CIV-CO{mh0;8jc4fo1Ao3;JL*TbWm(|H2`5Eo(jZbRC0?7LP)+C4 zbgnoAI(-Az4j7@0cF2a{h#j(SqV3|_P@K>)!xHt?E zX$DDjj9FPw1X;@Ho}F22tQDa=(KEyr$194ZNjrvdX|Mq|P6-Pz(uTyu(1Zhrc*x+3 zX>iyLp>I8q@rY>3zJ>ibTkD^^o0%7zzGlPg!#^D**_TI8oG*e$zqLSUaT>Fo;F zrD#NFu?VFXlQJX1T>xky%*^@lJm>g)=lHzme7>rI7SkS*5)A7Dp4B0*%9yrMb|teW zV*@M^Hg)2TB>{GBrm7qH$4G=FtWg(;sDAXI-ljJ5P?@kEMaa7w%xcgk zs_{pgu1$N7eGSyzp1~D%y-6R#2R+m2yvucdM6(m?Y#s@}Hj_auW=8c1a&>?{@&nZS;OfS{}F#7x;81@l{u zPy+mb5*XJ|dMNXSQ_OIkfRLLeM!r#I3LUeK)$&VoH}_{Jnr0(->myf7{?&q?9S7kH z@}aQ3Vf*H}v`|HF4TSl~&G>~7T*uP?dKkL<*((z_s!AH zC(%J47moiQkMt!{p5ou&3VjyZvr}WQ5Y77wfR%R^Ui5-1r!cuWlbn{gw9uR8`ST{3 zBOC#S^;d{@aEbj4PDfBC4;YxEMl}3%YbmDmow+bVIULw0KsND@4w)AMt5QBj^W;i1 z%t+sG8h8zI^H8}uY?K_Ea}^*b0&v%=JYfuEk8aUiBpDK-t9? zT*>K(ih_8Fh1deA-cLhaE95wjFo4O0G3CZQD0WnA z3q+e7xPfNy4~+h9@B&Oh8<;v<*>DmON1l@V$O`vlLx6ms4Ie6)(t%DaMf=((3<5~Ca?iay5gmLqrm)7!HTHm8OkF|5*N&6n7QU4 zy2ay}_#tV+`^E~Y9uQwJF9KkEE&ooBO*L7w)`I`V62ZN*ZjhQFd@lUJ2k`ho%2{b@ zfa6^A>4v2zmI;$@GDs81Fs-8L%&)*A?N)o!AO!=ncm}CBlnsMcBnFL8EE=&m3n4}? zp;00Qqi5W&`U-@ar6_<)F^c2)4;)(lSVm)oDryAGF?egk`9#m^8-Q>yR9pMxd?`(( zG}S^+%h_P_bi16y${T zwP~faE1*C0lp`Kg$ixug3x(6MI0l*SmS^)b#xVww{5vu+`Ky#$L|%`T)H87KzvpC_ z=Lk6?|B{Jq;#Eh0PPq#D0@6JjQ^SquV*e&#smMT=auidlumjw~^@y)YI|JTOXg($l zW|Swo1Afw8RL~yCktcRiALhg!Q1iQ5#?&0kL|#zaFV-h7AFSw=y%DVv?P;bJ<6IG1 zX8}$qiAuCF1u*IUdcN|;RhYW`m!RCQeS_Li_%xGGL@|MW{&rjFXNfIE%MIF*YX&j* zQ)yiS>LB~f{y7aXCtU#pi2-&hC>Z=FDhAKCqH2ae#O%puuib= zi_R$74Pmxjv7r|bbSrWq)(L>_-<5%ElS{0nFIh#`)QX2`>BZ2-50XBAQ1W@>85hjS){Q;yqqjIKe+4bYc>N_l`9BDc@E^Vo<> zrivR_eF@jUQn}{R-+G?*vM&#=qwWh*S5G~da~Fmr>P4!eA!g=Q3}j+_*GQ8VYbTx< z#0~pFI93l5st;QHw!*=y8*F!~ce1`_XteJJ}2%_F{j z2>pxw9=R`=^DUPqdT*@hUDt-8FI)ETwITCMuPx&)S*ig_cb7uOcGvK(D2z7T@0wR^ z*BE{EJMkMb9}jl9QS!WnZ_nkpU=o&FgDY^A`|Y_ z7{T(9dFNVzN zoDifxP}u{yW10t)+TU_RUVpGQN8a+x@C9ouvzL6y#+tB!qz9;)vFkVteBdR9M}pC0 z?R7h@mYZwm>w)8?J&nl3MJt44a-8Ob(BIOU+}m^PQyyHys&Sc3O~R`;SjGnc$BQ_j ziBdst0|P=TYr`@pjN5AChQZJo+f4m($4z(GtvHP|jcoU4|vC2XG+vd}lU>ae$U>YaiGY$oAkqqVGF; zOrqFBdx`AR7kcQ2{d~DIB=iLV9#<>$>x*Cc0FynkGXi)(%bnT}@%-S?9Nra=_yLqZ z#P^T<0-4|U4VwKx=FIU2bHAP41N>sU-1iL~edXVy{37KY=ns5;S-++D1MfZfH*oya zszkDKWW$O*_>cCA6z&8%uc>4F9Wyd&4)&!@JyIS|v_b;j!?Z$zp6jQnB!hz7XqoeP zfo(H>yugQupCVVn*r5{-GA?>U96i6nXZ7Mj%|HnI0Vtz${Ah*^6HLPd^Nci1z&!x- zB>1#{lzW7$!*10P~bU-#1J;K>U6$#KSln+QB&MQ}p^3Jo*BR{o7}e!(Zr#7tGUA zDl}l&6cLV8*w2Cp+)9MD3XRGZ&C#L3F&LBlb>y|g!LA+STxgk-o-yhf`BWjpw}E{o zWOCwutsmydMj#W@q!DJA6OSOA--1C-tvJv37dr7}a5`h?TqknCgg9y9Pxbi$W6qIO zid%#@tv?R!GiC;E!>T2Vqono79*}Q-0^ZP!GU;Cx%5Fa)H{T?remdA^$|Z&T+eL-^ zi^f7eYep4vFtM$PHAAds-KIBEj}esCa5X#;dO0gBGj-b77XIWe|Il{ zX#xE-!cT#+iQxbPLXHt)n+SVz*q}q;xSx&@<|SIkLj@+Bd>Fz*5@mpz2wo4lc%L~D zelH4WRD@6(y|~nh#rT*7C9J^8C*Fzy4E1pDn%@HTb3w;DFklil@EWY`T>Ani*!yFPUd+ysx(fLuD!CTW%{9?*aVQE1&@EEvAGw;-{kDNovLT;xm7o(oZ7qMKJ4e(t)Uw(UuS&7#yKm z0J*&AHXjUm*y_pqxj~_$K#Zl}hkfwEh?XV7HR<-^9N3D{l>9qpWH;FZNHV>UqS#Vs=cjiz;X#7Xy0%u>Y#-esNNUkkO$&$EvSP^HOsLkJ%_j z_|2u1Q7k5XT8V&l>CG5dO#DiyAZhbB^;*i>7%8LZI}6}1>OO%F()n-N_To|~10<3n zgk1zOwn4^y0YNv0Ig4=RdPLCu!SPYJsu40*(G16fO(5?fP=}xn1*lT6q5vPtRBIGQ zj9J*Djfo2lOt9plA%z2A$>V^AcunsF%Aza}xad&B>xvJ=X(|pD;{}ElR3r#(;e#Pr z%QgT@O*Eqc41E7SF%ZL>gmB1_WQZiyoG{`K2zj+n%A}rnBp$JIL1e_)kvM?zEWbc6 z;XDuxlxJdN%wHZW7)X~x#J85ZeE^>@!`(BBdVk`JZ(imy;NE@?09};Iu0}|*eBi6i zG*?PT(BWuZj)%K26-Ux1ClS6)4qyhv=0oX{ z;@t7*lN4Ebfha^dA$h09Zr;ALeOH8cwpf2l5tnNsx z@=C1sNUZuwtm>gG^Pwz%??72e2`KnnIzm+q%PA-(qSI9fODq_coI@x*At*gDC_PEE z2SNSEK8xCdvPaA@nN6!4lTzk@%JaN_Lk06MF@+vLO2f%%v`$l$z*Aj>XVucDpb`l5M5TQrBzL446ndi@Kklb8`VbFhE=(&Tj#Yt1 zP)=TS`Q{=fS(?g*)8D=UzYyQ5eEMD;1O0D6dX@-}?83!VjHqr22`$*PFNArP5zdVBhMAC$?0{uJxo7mDn2+jflZXiM@%F() zyP_X^!7LAa$5HSMNI%GO0{BKRe-UXA@U=lyES2;vp(>KpGa;?fD)@oA-v8eJI`K9$ zu#t1nvZ((JWxGs7ljP+SeSVwP<1JZAx+GL@mEc9&s1o0dREX~*_U;vUenVP0qE?Bo zSLE%zkmH3x@vg$_NB@h3O;;*@xY#b>kF~NJkugC^%ziBGQ48pk)@Zs#o^fETf#c>S z@U_*%xi}WG9ZtVO_}7$d?br0&DR=pZN;kfmyV9}Fu$gJIE5@kIoFLQVSJwblLH#m= zNaUK&AGOMm@rN#~^l`0fU7T^`6H&Q4pP`2vtQZw;2?dZj zMWaGRMWb*yQwH0%gCWTvSJEW6?obRWv~e0nw-Gj$&ClX>?s%Xb3_cCqGr{aW;E}xK zR-X%e5eR49@}U0}4E$$@72FJ9K?BVBq#i1@g1m%U`nWz6SPG~DimXD42uA5cpfCwY zIaMX2&ZOU`l%7WUBNL~9TGT{hIPioFJnf1L=eYj~0!L%uDu(mXav4R7JcFbRJ;a=G zXu9GJ3e!p2d+3^4E^`;I@n186=hANJu`w)e3gAEr?UWK2@kM}Q$QGmOWDvwO+)bYZ zOu6_rzDu4NA%94H;g?+FEk2u%Lsr0=5~4#_5GB6Jzt`JrzpH*(q7?p1& zy}5xXv1Oa^V#ZzqE50a3U`d?V!b4(v7plwVji3#30>48x!6QE>DltP(2uUFnLWJ;A&l#;QH z2@DK70N-Cwt5+8R2Cu)5Y@b3$1()Vz_Mz`&;^m#LBUoyWddeg@E#E@Lq)+wkY@DbW z7KY8E9qjz7^|v?ZnZQaaV@svXoiD-)Kr>t*%OL_hm18ny z6!ZyE$&D|l&RiJa=;I(0u|yrYqEi@?ztmgtH*li}UVeLEz{6@7M6)48j%Z~J=E9Nd zVT7x08YF&U@86vB1a1P!9Ozmj?+v2YEUY~s!QQ@ZR)gfe6P5ruM1Q@r?zd#bS|()j zGyMeYQ>~AWd@t4`sMeIjjG6LMKY*Xaapm3SWe?@5mI33#$AByet3i?M+LL4zlz{SUjnoo0vtVsz?27-kHN+=2iMIO=O1hvPlK*0 zum<7_9Kj^7F-rFDgE`nm^Nea56Q!rvMzU$;xh~nspPGf9M8pw79o6M5THNv@SnQ9s zV6*fYX3gcM_=iC<``>~Fi-uqX@r@XDyk1z)wgyxd_c&}&<_d5>QijjtQ%rfHgclyl z7X&^ZjgRX|X9I9G^1#0jgmRkc2HnyH0Cl2j=>&KBP?Y1RWClNs6+W2#;z(?=y00M~ zCHnv(<$b{U)sfg@^T+1cA(R8X=aIRC!W|O^bH9Luk)mUX86e-|8O2o%1;M2u`qn)7 z;(Cxrd;&=o3?k#3`6wJqah=Nz z((3o-n!IlOl(;@RGc^z>jlkq2zKs6f&suCiF`p07K<)!#H3Z;3D?ZxIdZ| zxtIsNLKi1#l^F>A)C1qIf%rNCwO_ysms_@yO^CNG?mS4q`??rGA=l=eu zU*vz6UHwl%)^pP=-RwX6lG=Y@ssEej&VNFs{!sv(U2RRBL@b>h3|)*ZOr1!W|0kWZ ztX7voo6?;=q5xD{+Olw05Cu9y@&Rn1Pp&=L&5>K%yJhj|O1zt0!k0a<>tkhpNT18D-HNW#?s$PzXgF@_LX5KY;NeJ4x@ zymNceL3;=n)*bUn)^0?45XtlwGORGjP@Nf$9!<9XgU(o^EJ2UVUbE223~P9Wee9lW zA?fU*BVHIs-yGuP2FdZ3CPRtmAAuuEVF4*B$=1O-m%D5cJDgB766!@o>fo66wkv2^ zhMMAt(+I=mGRZ`U5F)}hte1bjRu#uv`hU=064D;D8t*{&t1{a>8{Gc#S zJY($v!?Q{tbSjDTQ3q>qv7x{iQF{3z4Qc>^Tk5sDgAgYE($D3oita>kN11lmbet7G z+h1mI-;!^+P{g?%f*t0d>!FfH_Ty?5%OD36n4prRjMfribkG2aSMU9 zlxJG2O_Ps002P&|Am?5al&> z%bW%GdTY5~wu|`70^(>~K9$t`5X8qsctN7e#WioPmq>YB^}0ybs-+JH$Vw<87yiq) zGpq;klLbWgyn}7XpzbT?2&0sB#E-e%KGO}+anYyFJ@kK|`2KrP{2$>WO#{&WFI))z zp$-0j!-eg?!lmawV77_~KXAGfHQ<#I1Rm8&E$9Z+1bPD9C=xPIWUKr1{xN=S5G%GV%(nJ}bZOk~UhqgbUD)Ot&D$DVCFJIR8ov?Go4j>zmB za|Rg30FZFX8O9y4gmH)^oVG`C<3MSgwnvc0c(>z^0LO$;4mD0S1e4&Ji7#OyD;nb{ z*<;5}XbnM^D}!sv3sY+4PPiie7h~@jUg@@N3s+J}Rcza~ZQC{~HY>J`nN)1swr$&X z#kg5(?{iMA`+WP{Z$9&V=HL0Y(Rv?k^f5+nqjXBl#{KY{nI!&+@2TiRSawxTvo!&i zg+FeX)+Rnur;n~yn@yB24zUk-tZSMLiAGL307+F0TI>2^d?gR9|W_6nvbs4HjT{Z;(A?ZJPWs7^>gTgZoLydXjHd%2jzU|GH#ocaZRofG~?gb}R1Pa~VCJzE%K z&}|c#5Fl*gs9DHTquL@wIAqz%^nj`vfV9-g>p(R@T%gaXBme3n3)g5Ti0w20iVcd5)W{JA2@$)~M9FsI zfSxohe|S90I{C}agM)D*%g^(0Ej3TvOmcp6_u=%x^P$y*_tRvTowe<8J&N>;RBlqb z=^!Ue-L^LR`&OU3tF8(z+m+~R;aA)pLiBe@9A3aSBI!G(cigsj+9Q(pM7QqMB9=!` z=kQf?(1%k`BrTK2u@KPvMIY~#ENMqi=ic?E3`x7@myU(2$g8J?C~o$p@XG)h8flV!#9>XpY6v!}VF}IZ`qLDXk z5E(^mv`DK_rKf|~t%w^{RuuYewIE$y5m%?WCu9uIlzLlkjEzzxS!omDqA2t+i59kx zW1`Fq{9A-v8OhW%dKoxq4|AlittZTw)Zk z;FQ%?gYxb9?4Ks+)Y{dy0dyVjP#+ZD(yCN&W%^Bk3NaxtVxW}Bp%T9EZlxNNZvwtc z+X1`5j_5T_`OX*EjA4t!`jg#p#xPJ`{)D8Ovi8yhtvfbEnynV zm<$|N-YoC7JXiwk>Uifcmb)r3` z{a*>xQjbVEphiaPe3tC;$xcJi-WQn5l$F-jP~FCZK$^JW5S@rTw zVbHK@v$1&H-&8cP5XRY;Z;k69GX6+ijo6~^x1LC#Wi@03pGy$u;I*0!K`Rf~8QX0w zVEh?SXcW{n_J$qUt6sGNL|~{E68V+jy-Sb)TkI)-SR=i6Xzt>b7ApAoZQKa%4{NuP?Ir~27FRn zJJ`cK&L*DK@ZfYLj47PSDNvw*f99SI9z=k$Y?RWdKwz@N2K?tV(UY^d&o8-!jjm6d zEfWg-9}+zYFSZ!c?@uBJ^W*sf!uz(gPix8KqaK}DHZo?r-vzbfU7RD?PbG@M$bhO}uaIAsbmr;$0dhdqud zmfzXm1aeEAT7oL(k2y37XMfjt`WHQOWlYc+Q9z%#V#yxeNw&l~gc0joB#{G#@M_f| zh5M~p;R`%riN{`MW(?ZFYWRuT)q^yTR57gPs)1Nf9VzXUtY?m$Tl^h5Wn980*HJS0 zipr|3<$ozPajXlo9=m>S(29Sz>ewSE%N<9ft`v+)0`EM!0}u9eH4)*a&%e zMD4 zar`z>dc#yNhfeP)26xV^%1VKv)}2=ZEVh-yWWsFGP})L>B2X%!_60aP zvI98k-G}xeLAIufMl4oXUI?#mVM2vx#K=y+I}euxLM4fww36G57;Jji`0ApXg$T6M z>B$M2m3L3q8fMP0*U(Yp=edzg&hnX|HClOBOv5Z7e<_lPQZk@T97o&1FKl$z(7!-& z!k3_#$jxHS+gjqDMP#?d0u3)BJBVxB6ht|pvsmc#{`6lzm06*h(q{tk<2Um_Pi~#@ zD3H619*8msD+Q+SsH-i{2spm`c<%b9b{yFaT%6ZF+FWC*RrAU#3 z$(D) zWzw{Dqt9QF-JCF28{E6lnDf>y3#pEk1)4ke~eU9z6M%mj(ZZ396{grzVWyE%! zgvU%di=@DhE*yEO@4FolhVsP7@hqw$Z`mw9{kfV`+$h~VadC>ux%#u z-m@RyTcY+)O#*%$T(fV5oKvD{wN(?nT`@NPV!}q6} z5??yfcVWM!vNKkV>loa^NM;(9a*|=e2w<-8gLMTdm~jKS<~^{OSoe+pTD8fzMWgW} zi>CKt$l}{?&O4EpQ~u3Dri|FgUtSW`+W@Vu`IzWOgAQ|tow#@7P%1BYf_6M zqYGdS*L|)ru6bdqU+BPQw>!d|}u`GqE09LY>AOgK+Ki1VH@qGe#Bh_ z!?v5PPgq~LmTpJ$%>nQ7y1R9(=hq+7C*7v-#wn_jWhEpiJ6&urB~EGt(fHO>qG3UH z5#>%O?2Ek(`It8iZ42ELGBtAs)rjWQiHXGvY%1Z4yP?EOVc_*GQpk2n1E1Tx#KVQ5 z!o#TZqb>4BqsZ5!ZVtP8E8k0xF4|j%s$&P}Mlmuk=Bb04H?+d>*^Lsb3^U3C^>wh~ zS@Bw1AGpL-_+_j$DYL-D>aVyti@mF0 zVThJb?mL|e`GcQ1^?&xmZ5?XIK^%)@E2tFJF?fpqZL2!GVsdjlFl3GNWHfpjW%$E@ zan-1gC(2O8kFnrc%OJ3~y#fa-TYyeWJc39nW73eiJ%hBh^Cg&d)iKnSp_hk^-Z<0F zvLnFL(M~Kwiaa<%isxr-c$`g1(z5yaPJ##gq1ZI>al&dpd2>&F(0GQ4o$)G3)4QMw zcx96jwU#zGYLl_?)1i|(PCbt7vN^W_@+f_N&1vG{vT(-l_SEsgiw#a=lPD+$ce-df z&8!6!w{=bWP1VmG3?S5 zlpb`wJN|+mpvpRpjeJrW9xi%2+M$(1^(KvdRNG(ok2VyS##=c0!Z7TMV<;xy1I=oAmF`6vv4qnyJ z)}Gy#1te0A{Y+!UdYyFsTPZLkB-*FrX%Cw&n z;84|k0+WOHV*)l&KqpWNB%3D?shtvbs7^_-MXBHBYS>z?LpYpSX3L!D1$Bg{$s4tU z*A5Rq{-GtXt|ke)#Spe@f6|?J$5fG%WXs$hX>r8OC6TFz?KyC(nkLuLJs#$#iG+=b z%xbL&(?w#;aiOQVRy@|NJ>s!8nQ@|mvZIra{y;uxSZj}fqa@Rhk`EnC!Eb32&0Urj zDw=RxrK}!qHG~x?A(aw5?pG>vEplRWv=&Wxn~*erWfn`z55a{g9`Hg99h}O3|D}mXsl9xZ(!;kp^kJ z)bh9*%iuT?RvPZU*c$XFEY!nmX%BqSp{GZ3$EZY=r;c!}s5Cg5o_^b!%UV0|g`VMQ zI*gqc^oxq0=7aTQ3+b>x!zjXYSWL{ht$V8 z@~fqh{X>WfXOWuVi#~0SoKY*Br)|H|TyssB%+b~56-6tSwO(5cn0k1x@wkV`&u#ISt{a^z$j~pNp0R7zF~1-0Aykrf{T)I^cz7HzQUfdklZ=h*K%h zW+uVEkebQYii!UkbLaLM+Qp!$0p&>;MV4nw61=nHiY>aQ-I=Ps)}r|B+3R+sJg)`J z;!GHviR#q5&=iQjPPPN=N#856tvdn)ZEt^c&?WtojDS_-ig+jAuWqN4N%=J?WiVze zF%L#qAOY6rB%^X$oJap=R$U;25?!@wka&;0xMZWd5u;>Wqmn%8fM*&*s7`*&+ESv9 zUJ6BNEGN;H(42a(XN3M?A*$?)0F|i zB>Bq?c>P&;#;bk-R#u;X%}*IoFq{vkdS@n^P5MW?^u7`IFK!NMX=K^3c+&il+ofMw zo$<$#h)Z4Vk_$3TMkN>B41u#7P#3t-N!%H6?uaH380Ewm>EkHlAUJ>-kHspuqXoFf>4nn=1jhCp8X#%u4uHL$ zsTa8s7NE(mF|QDGSfJ;-eosM$;*I%fsL=s%b-GKz(+h5>^qf^hLVG{tcts~!)lX2Q z{Mrb3)1f0e+j!sUUv^s4ZtRS3J!aLZHJ`U-hr3WS!QL^8uTuJ_cG!crYI`+b5Q`)n zDtig^Du_JxI-@(-lgUK9B?#}40}mVHJh@>QHtDQnSDnjTK?noC{D$vxbzWR0nckeG z$wuWDJWDG1QUNYcBI z<}(YlAz$--At&4Moe}d~V=Hy+*7$BFdfouxjv8!`h-j|;@^rvIja`1M@J%r-L}oNi9@zF zPjp#g<+x9I{o=8&TxxSK_9ItCm!jFIx7%_jSN@0J70AwqZ4q2sPujzHN~{ZBccxGg zrTeWFe;a1EcA_ZRt}4aVBNA8B>WnC5KcV`SyS(}^mgNVd+A`leJ5tR*suTFfhFHzn zX3jiWkzTIJiwsw9=cK1ZMM86lO{cN|Yy-EqKN@=EKIHpSh0M^yGUMhDBkRXV5wk_0 zQmsE8;u=>`1%9G3<&$ua^3Et@8{-EVKM=&gQFXcTN31EC^g)OFyyMEYbAj%Oid>Q+m3H6x!)ZwQw#b0^SW1p1RE|0IxS z()3LACxN0r2}Jk5RjGwt9gXd+^)0214L><#=J0RN`}DX;nN>cxfzEz>mSS?IS8}8k z61hAgipL)40Hy3KoHZqLxD%&y%XHyWrz-3b!*1|C-|t6)$`O(CcyVDRNxzn_A5yO) z4i+z0Ilr_nm1IS*qAXCAsa~O6O0}`dGs>HgT}o2Ve*Km^&81I&qo8cb5BLH5gjJu&0G&2B_Pr{7_i6+J!8Yv9DWNwdR7=C zT+k=`ig9ugd40D1k$qx!L0a^kl{PH?iZB*iSJe-YOLt4AWQCntl8&k22L$|!|S5bi7RaF_5iX$t&&e~ z@$jqQ7Kr3MqEv#c6YNMRE**fDkUiFrX~aPSO&5k#8|zG}4lpLDIbs%GmZJO_Iq&`# z9sV5jf6{?8Wo(G^(*r{x6M#}^hTQL*HdJGwF1{+)BhE33nt72hOKygNL!HM5 zS;zO)Q_vR#f;tA!Mo!$8eP^@NJGQPonRq_1hk8DC=FwTp*~nS@eALOx15yQv+n5E% z$1C&A7DBehk;A9Zw!r^Krv7gWAj^TpH?*#0yo`QUkH><{u}yMc|pR2$322>6-FU(Y*tcUAp zaOU$BBlt~|evyih>djB)%ic-iM-rvg8HJzV-3j9H*-PJSsfX-iKgE7C}Y8rH|9sLm?Z?{SN?|Jv}={{^bawkX0m zqIk!kh`+1F{6g`rvF!(#Hq-j{PnQ~7_ z(T}2P0hVG7MhOK{Nzpke@@M`28MTK9>H9PhAeYa!8Z1WS!+AeUWCIjh2KF>q3WG_) zy4xqw=$+CREbKWnsc7p0$}`RL5$-)(%9~AuRU@RxWJa?TyHl+u)KALpiEJu<=m;1z z<41+%vMfsk#VwF018iNJ`A4aC_l7rzLsy7XvK%y@)MXEOp6X!1ULUAx8qkRu+mgiI z?5GXNoVy7!7#sBkB{jcax*7gVOr}PYxdw}L^V_XqIK`Hd%wN$LSL?(R@~fVD&CqOy zc+1H4sEilySdih6rD_WO@D`dF!59})r!ZkuplXr9POx3{p)(ks#0N_VWA+T{heM(( zUw~ZF)(F=e!d&}9v4DI%v&^^nli|DZaTNH7nwJ6TQl)5 z8h;$83{aj*u>4YahW@Se!2*70BTB8iV1--OelZ8S4otS)ZEQE27@Z1AnIC1o#>+An zyfzrVb#W;ica6@q*ZUJ4^$Jo&#N#nPqVby2ZR3nlI&~&@FT{94>QI$=chSl`fm*Z? zzi`awh`8YqlYkeiEAtwaL-cF?gNSY7Bk%mDJph5Vc!A|r<=D{C@w?T(h7EB%m-jFTa@gh9Hq_plJA^FV80ZyEoRzPC z!?Vm7mYmXyAmJYKP)dk=ORB@a!Xld+o)h&$*& z3#V@gO(&=a!eXTt=r!a$UBQ=gn5W!=`gv=4?QjD(e!-QCsH-@5(Vh%k)CAi5Kxt$- z4$?y7RO7^ycjT^ErpQ0wRhmeu!*#QxJ`0w19A^CrmgT?tO&oiTDJ@pRmocc#E|t~# zVE}uhX%^Gv=dQJh*7s1iC6nU^uNfQ>!cRv&^pzQWZQ)*bBGxS+QifH+D}7!b(HZka z*xseDY%~5#l2l{&F@q?=h}ZDWrlakPQ?AI;^B#s*yFR^*)4!>1K)HATI3meynfM2u zIJfWy);aWIW15xvfj-Z0k@CTALr&BR-^1tlqf_$1tjea<-@(+`hT2f`68+cs7>n|s z*`y5Blf{RUDIjMxp#J@p&=&#c6{$HJ7bg1}iRJ?Eo>K3^cL7p}eqg47(%z@N;dxzz zH|>%Jp%whmUY}QKIicQ=e|GOe?WBmCfZlm`(C2nK%c_nUR@VOf%DXYkC}uhmUeP>ZfcgGOY)6-K%HppfML}&+r$pp#P%&)H0emxT%Z9k?bJhR zRzN~rKLAbKx`u?j2MOmo3WPNI`aN4Rrc!S=cmBITHe(7E0-SjrEqB~DMvfZI=lqNEVoK@g|icT4revk`fh@E(uLRI&W&(;!2M~H zq5!k5uPrGy&vI)5jV_`mFT7-B%s#mRJE74}fuR|4qbG`LE^4DEznFZ@A$x#Y267D+ zV$B_xdIlljFpx?Yspbw`T?Y?<8b}ouW85CIPi(+WY9tP!&H|>cgAY&zr9x0}bkGLG z4A%J34)zo9*BW}{Lbc_9sRV8%&TlmaY^k@H)oxgb|JF$jVj*Cw%lxQ~ z|JVfA)`8(650-)I$ExH{3*OxVx26u=K>}hDxOHKE^79eBd!ur1eDegMoLcy=(|LdDkpEFAf4OI0MwIp4dA+Wo2HJx+GSNu}Pw#5=_j+Q~vMaJJ{dCC=W@n{jH-_AI$!{tsS4Vh1a zcUxC$MTFU?-?Y9dBauvG8kt2p%d>cNjKz9K5<3DGSo^>ZR)mSw-T%CD$Whb`x3!t`~VL4-0 zgChDl@cl;IW(4PAu=(P83Utia0t%<}Kjo?hr(ZZxc7{Wf9a(0u1u>(*A?>@AaVeXDE575$ zJSo&gCw`OHT#N7xSb*Q{_dON9eJtGV<~2K0_(`&E7eryYNzr9xo)yx+Q2P^`f1-8~ zw+iI;i5T4Hy6Hcexc`mXzZ^&Z3o;@BCo@YUWBY$Y7q=?W%Lfn3k}mCfa3<(G!) z1OX^SjvI1Qi9$yy#GTfe#CIJ0nids8q0#adJfo5s$AQ@$3RSGxd3zyv@W%-+diVdI&95&Q)fwq(I0OooD4X+UscNFz^!KCPt1m^J*t49rmS&xAChzDLZTFimo8DhMdIl-J zRpnKcRS}?ZNk|!h)W6X&OiJ>R?6W~o7Pi#MSiU5{~G7YCw2OJx`5a5qZy znrTh!27_nGE|wf1R3JQ_$RSSN(84oU$4GTfdPz-@WMaLU`~6=(atd%64SVULO1 ze%@$p$~FJ`_HEId-^*UHhiXv*gKAwr>P2JHr!jf*26DM&2+TH0|KgOaS6>>uWJfQ= zafpIlYGKG^&%r(bi+FIz&fYJLsBj2%PtrccL)q^A?|R6e1N_gS2XdzG;rl$zD*kD` z_`hbuf7va{+c^9)q!SaYWM}1&20vU{EzYT6Z|GP_ClMRNO36BUVuldni9-;eLfsbu z5X9Qy+J}(5i6n{$(yw2UFBYBgInw@E5A< zHGr={gA*<$@+!s%kyB^u!g;j;v%T6fQ>4IIVDJXEY-rbugKXEZGB<}NX0?GMLvWSV zzbg`>WB#~_$q>PX_6)3OReO@xkn-hT=E`-)FwpKnCgA#X&*%f*w_ayewD{>91519 z)Kg_y(yA59hQ~AH;8;+UN!F6A~bxNizXE9d>W{M};f8M^kM0C7zbs|nCK<2(5C<=JB8 zaXp>=1Q%HW6v`vJ5cLvMUSI#3b^hewKiP?=nYvf}$OLa-sp!^x2XZW#FB;A6TF#^8j%;>X%(yD)}n7ix>{>6$SRP50q$MKfe5 zVh|-z+>WvzW@H?)+ccg}>TY^{N$!_G!A2X!3%5f-R7Z%nL{^ikPFA^M3upR)JVx$H zFeM+`;6%2bi=9h>$1=1#(nU(Sw~Qz@Dtpket(4DaecQ#x1i_LHv6^AQJ}>NBrfK75 z)R70h0!9vuRG|N)e;Qhyf5smxv-<&#_{{h|8dwibtJUb)(HHW2SB;(DogcuGOJz z5^1*lSsx8L+mN@5tfJfQ8ULVu!$W}ErwBW{GGO|W+}=R1sIeNuOwD!oQB*(2LZbdd zk+0QY+ylAcRC+Pt6s3};7bsqW1Z#;!aWl zEk$S7RVRW0#;fs{xRC3|;jn8O4{6COCz`1`h#5059rR&MM-75by!3flyt_ww1Krmp zp1AZ7#A_&oVQ?d{O_EGEj7ZKV(Uc9fHP~bn@|2zIBf-It)67Xz1t{@}rz@Qsd9g1h z;o$`~;JT@dIZI{<8?yTWAqRvZO{a=E9(+v5cYqm0-Pop~THA`uId$H3S2PO4Gqhnj z^l*6NtEuLQwSA#txM_P3c^bTv?jd7;c>y6xc%e3D5;qWPJdFohAi68;V;8sZhWQ-+ z#-dRaZ^?y)=umOY2|JrJctPOo{w5u~(hG15 z|0-MmN%wyS0`1q#AIG0FG&sorLw@~tApGr$`+vnkyp_cqAKc(ayrea)ndRy4?q{Xa zjB{-nD9~$Z<*NLVZROHLKic>;g+`+0ls%BnL_Y<&tFMpQeamRLMONHIRgA5_K5TxN zxO95G+<|sktvTY^7WTh{B8rx3p2y*T{xuF z(kN22sa#BPfoOg{LDRj421BG@QmOD{ln}t+4j)iGx1*2L*UDdT*QUV~u1bO0#9y`G zuO$r9nDl937UIv9^lI{J%9SX5d@svY67G}`8P-Td?Oe3CZ_Y4rzxFDkDzu?dnUL ze^2>;GUlILvh(x7{r#Ctqd)mX{r@Ye{^773DJL!YDd9a8XDxG;OI4K5lnJHpO zVl;93r3<%UqHL(xF%twnZR_Uk(jWvMHCqy+LLBPcA1@VoFf+W*rIQZtU4r1YS=Tt6 zrYMT`TE}JlAZHBh*)zSl2l6EQ`*HN5+XfTgcj~74AXCD(F#>wCeoA{^I-mpQm8lD6 zC4`H?2aM3s19kiA?@8)U)c%R*-NAbjp3{}r6=wO6cr+nm z8-_ljvwXthP>A1w%;5td1WhFL3q}H6QjN%cnYzy#ZkTxdcJp2Tx-J)G!kV4H^p#PE zNq1t|q2o4vz4kb>v(xKq7v++SAi_og9&G8&dHOdCj53QW9e-%xVhTjehH>?F89jkX zK$KZL1`eXgv_<(IxG7rWr2~JK21Sq?iU?M8o1{e(JEX}T67Vs-n*Bv68R=R0dfK3T z3N-yMH+c;cRL&Gwo23?2;(98y8wqg(ZaSrXONmhrNXUu$!+tio@9%ND)%LkR7~W%3 zXxxG%I)vB1j$oSwPvo)LSNSeKuJA0>5Ha4+^rL9CtJJM+*)6M=&G1lyK`J5Ou~Cj* zPqQW+H)wTE%ne}=t&=-vWN3*IeE1^FH&>{%6c>xQgsj{boNAJe(Xcypa}~=i8afH> zC}ls_XM>)!kkrfERP$$YF(RPwVotZPji=4OlDyb#XU6u}U$cm)oOJIs1~~`2HDJOG zN`{M!APV^9M5@8sDn;|=DD~UehFfvk^SscS*vgBT=s^uIlNoJ&wG=mu>$>}0E2)R) zb_+h%zpoU9(R1JFW~|E=9A#-EXUx$dA2W-r^=lha*RFD&ctY}U%7F4+zj?cbKcm9M z%h$k01U8D?Q4rXTuXplBDXxq92$WBXUqhdyuLI5|cnS8aPYFFGkf14SZ^%uw$ZJ!m zsccrdP+Kln{5j66bhq}ApZiHP5G|U!EOElYS1?aJPFsy+9l|SWMvl&{zRF%Nw!*UN^m_-wy_s5%_|ezN8SD5scNST>#D|~OU$tiZI4!YepU%4_GIepNd@pIs~d$x=s8GDWb z50vXiz{c6s;e&L&3D>)goamk#8`@$5?9$4jUq^l&7*E_!lrUr>=Cn7f;U`JB7d+r3 zFJS2tNOe=mD(;6dB5DlJRI_eRzB`}Kg$Vw?DNdUP%4-HUQ<<;5G z&!MC2q{qwqPslD}C50n?`oP{~xt%ry)P$xY6dLmL8U)q2rj$Nr=tae&9%y2c_@?3k zO$=*`rrxPtNLhP#Vb>1F^uk+4C`;dMyS{tcpFtRHn>%i>XJq^F?Rx0f3Iju^FOYq7S zBk?5dcs5%Dfm=W|VUc8}ei`*x!a2BgJN0q}ZJ8BPP}Ak?#C9 zT$t=h#)}3#4C5KoPsMFqt5bgCa*#ET>LE=1D90}t7v{+`bmiH7Q<6j&3DY@Oo;rxI z+}Bzi`pGLM#V$Uoz_J|70z3vSQG`zM6; zJ7}D0y0Mrbeda*;rhqrFX!M(pO?;?8&xE*wgKBM~bb^@CXyL?bPvd2CSraE^V6OulmxR>E=w9W;Y>&zA0chkQbDmc&Qevu<$?} zeB6#+G+f)seGROwwS)vRdx=Dq3Ud{ntz6D5XXegMzjgK8zh0gfb#9=Hq!{_JV)SJ9 zM4CKYtgnuif0G9Xxu`V1kg2Xm^}oZwQJF+}jvauV*Mi=(x~6Y)-ahk53N z%#1;M2}3$wad(WcA}G$u55(r}ZTqA<1L(PZ?LWm%}vIfSYfChL8 z3egEZJN0>yEd~VXN2(xz4=_cTvz6k%2>QNjOgmSQ2}-Q5tI#+>6f#Wgkte!{6~MNM zns6w;`&F2vPLap@9}5z(OucQpkjPKl9~IE83XcYG@qae_p%eM?tICHyU8j>uda$=7 z^9B5`RP|?A{xe{+_v+bGKWhXTpA{_b|B$NweGKeVg*lp8JL&&*5=_a=%Gk!q@&Ah6 zbR|vMIXSrZi4FCUem}es1LOefW+Y@GH9p7OVUlnzJ~7ubXG(Xm#{QX-k3m&jrdZ;C zRSYJ~!eiFQgB}?e({IPeSQ!uR9x`z|zm(~bLNdb!8Nj4W-3n0cRVDYv(f!5(1bU?n z(q-J~gUJS}!5c7#o2Zx38;u8TvjN8ORAnPzgRC(psykFUtED>o=-_ZWp;MSg4fT+N zq-Jk0t<&{u%v+?_8O@n5ST|1##;FGvU3wM6#x3oGUsj<+%@a7Tn#)rw48LWN#(Zxx zYxezkjyFqxUUQO2hoWegK!QbAFmAM_hf;1f6efa=NU;ia)|#z?g^mutT>5o``5K|$ zZn0oLXTI#@aRCyfH`g75Z-vo~o}bdHFAL>42+8<4fKxi3N2&$w@ zau+WVUXk+Jgyx!c>lLm%fqqs;SVkYH3_E+laf#9eU8~T{2(aTaA=8r0o>H>fPd_D} zW|ku=GZX|fARz~an^z7=%#jI?mkxT*`83LD5!ffT)Yshe!rw+Q0w+XEw8b=pviN95 z3yQ7!esPl6ZlRL`sT~(#=Vs2%^e$Y#vSD7lv>nz;Tfe>g^w1+)lBhGtz8R@?UK&|U zXQ~aRbBo2q^^n^%;`ngwvvE!L1|ApFk2W0FPb4VaOO&3o$Q#8;M0#|}h(DXBYtGvp zMH3SfPn}1iK%KV_r4HFM6en+rPx=r$E#UPI{I=4=PE>9i1!P6w6xD5$K;+v>G}sgH zP#s}bX7CNuH2`~TN9WNWB3vH<6tAuTY*;{YN;&|5mj*@6uMVeDR2@x+;sWLM zrpkoKf!a%;01^^T$3;Yt-mTz%WxlwDZm@~Yb(K%;T554+8ItnycUOWxx&F^6kW$us zJ@{ll_oq(!Pq(iXO`RN#J`Y9yQz&`HbV_{X|2)wadM%UdheDvjg0j+t;#@3*00#pC zJ9B9@(4=p}x-l-2Io|XAD%;P!yLZCio$fZ(Cg^Fy!waaXS3XKU${#B@ApV|tgsbf( zSgsNaauU2zH4wbs+)-J*cr(Ec&|Y+tM0MU{!TLnkhJg9{=q7@eh|dyKxIn*MM+&(L z;cjgWa4QEtoSY6X|M^2xlfC1CC**=iqepm}e#ER(ZuUr8b>U(fl9hJlD%tjFQ~Hgh z=Q?vjvEGOc^F$eiha)f|D`dFW&gDpo}C+rE)i}&?$@-ZN407HMSvm{ z81}Gk1g6Q-YS#+?YJu|#^iF11Ck7A82)ps!=3w{s9J`AcMlnM1tdI@wj0H=wRHgK% zv{;RY4BCf+ONnuhIAD`zKAfV=Ub;G@yXl7no3i#`g%?=IE}X7O*~<@V9=9I#ds>Hi zOihR61KF9DE6<|G6*Y1;iuUlc9capF+75?++mS|LIgQjM9@Io;1G0BC@ObI|b{%_U z@IlOyx{c}?fG9{0A4%+GJidMiHJ@$3-S@_7!Z0mjcc1pZMbe+B{10AtpPSMbAIeq) zpCW1SQzQ}p2fRd$9TkinY(IO(82@|6=)aVaWgKyt5C0y4fLz}=LI`S`Zx#rDE)cDn z8p;OCu#%Sfa%5|`a>o;~moKaav0T2ghYzmtG9xCa_!r%RLicCKOm=Q&UT@D$AUfZC zA`bd#KctF~{Svi`(0w;x*0>Nuf&RQIMT6#I1C9QOr40o;&Hl2mwyOh#ruZ%{|B>{E zHD`-7{VX--MTZP^3ia;iR;}fRCd9pi(?dn5>XgHUSC9*axSxRc;&55v3vGZK>>W3XRDo<&x+aOS7U2vUd>?(AS6##3KQUQ>@^u%E(7n7EdFtXZp;)xI7sK(cUH7SGasDKtOJ9fW;FHTLZD#f zreRmBvMUp)FJ+U^BLAix`7sQOj+L@mi3-Dc!5+dEbhLPsCo7CE$(XAx5h1OSl2*sW zRbv-pD>lm^v>_@4N4RQY>5rb98iKYgEfiTTO(v356S}0z5xEsHgil2$z&()*%CQoY zo$<|$KCJdeFg}qk!og<^oJ8sZBq?MKoJGDF(F2JCH`@(A6-zx9m$3u?X5VJF2}&nU zx{fY;BjATP5k~j)+tzS_o_{i{U*g-AhoUWtp>$XEsIqEtv(1sWfmK1a7cGDxXY}C~r`kNI2*=2mzc^Q~~j=bfb>van#JpNM(rM4{b zHX@Wtv57^sE=;PP1Sr`csuL*XwLwrVqA2(gBqy5LG+!d&7Vt%Xz~)~<=g-jkXVCfV zRQ-zl6gu~xLWlN01f8OTrLeV$nYHn!)cIj%;$*M?KPOZ_r41rK(tANdMS=jN>sNR< z$a_Dk4czBEXtH78P~xLgN6rM_bE)NY;;S><8P@%7T)kK6f!fs|1b6}IwI7FL&7OxX zZ`Y@HoIZ!Hi33O%k+YuGXyRN|bT-@gy)mWp6_!CAddW0wFRvlEs}g9OU|g*#4l2ru z6!PR3ba|@L+S4owrCkCU-8&`K?W9P(gMPawfb&~7?UaS=b2kMt!$siAU7hoREs>W* z1Kb9v;Sy^(bM;`QRQ*z#S1X+dF@_7%BzMlWB=}8alJN{Ev=Prhw7pi5M=18_#uMm_ zOF*KozU!*2zA8&JdeE>Wbx|`j_H%_=yga(1H*^)&PsEWIIrL=&PKFqzJB$3f?Q12p zAG=@;gUYiykcpU~&5adB9oiRRVS#~ADAyrjp1Jkl5tFN!J!i)vG1A#F{)zQ+V|ao8 zhp=~yjy!$0hP$JVZQHhOyJA~ivD2}gPSRn=w$ZU|+qTiko00p{`b$s`l@ulsE-AE#{P!w$yKTn&w`8czf5PH z)1-zg$Se35cSWSzLJjNStY27i7>ewddd?g47&GaLUP{)Af2$ey` z%i)MJJKhpZLW zuRn8Chqt&^%rZ0Ip7?ehfB2^)S*s2;c9)5(**Mq6)BdW4JTgb|R?8c43NU^KN4nXj*+H$4*} zu~S47I<>ZJos;iU%)u@!Ekp1zmOUy7Ry|d_0&Jwl%P0phe+JoBnz1<~>mFLJ8#0qt zxlzM|?39`F+!=C6pCj}KKw1kMLx&*kuXNi1>02mmv1U-PZ}h2A72M4m3OrIH3a8a# z-g1S>B$5N529Yn{YFn^0M!Re^h)tRsG~Mgl)V_&ul%%cPu^m5)mG?{&LJY)bcPlCR zpq}YcYteO;pTc~TOq(_sxguUhI}F^!Bv;eOaUKXq02t~A((^7Wr#{;mS)inN&%vcP zOx3Cqm9n#{)|DnYV-&^Kus6`dTZskJG?1u+EZIE!Gh1VAu#i1ZV~j#t1!mz{x0;RJ zKm-UKWzmxXNR3~W2O#+C!-;i5SQW9ku%Q{EK?tNSA4r)M2ZfN5plH)qr9fsRKyPxY zBQz0zIF>x%O9kgf;Fn@Bbb# zx0A^!Ju~3^$OX@63c?c9;Z4Yh0QHKoxw;cW6vQ)*UXehlHYp4gXnci|HGF$(DP|91z8N^%UKLYO`U>dA9C7TzdO%7M*IY93c{ zlBxGuM_slqvRDl~^*m@kNibmn1e+3Ju8nYEF#$d8`Zv52{1>AuFC#R*-en#@#aqSh zvIs7W8+vrinlIe54a1D8>sCyhA^XBiva?P_$8FJ-IR%%Xsj_pCs6sNL+(%zT2K0`8 z_$}leT}nQ-H)LqjgO&@A#HecDf_R$kM%9Fn+nkK(k(Px~!{$0nCJf3pyU?A3Atdg3 z1Ig^;qh?aGFL!=)@w6wGSl2@tV?@mUOwl8q3zOF=e|UYfB50w~O`ke*JW58W_ zKjJKZ#(CQ&4?3UUDl1kMeDCI zfAQ?1c8P41ip{*UQM-St4AaidwKNT+4v-X=`n;CA+ zp;l%6fXUCG*#AAP5bHcp(46{R*fZZ$ZftoRU1y-GVZh-epcEwA(o+V*Vhks# zy{bcdHp8^sLYXwKQ6{yygbSkMr7O187%>3H8EaHykF3pvN4uHt=V-iM!x*4NBrk`@ zWvRYSH_R&>hUj7`TBghq1n+K;dBGrj;GX*@*Ls3g5lrDNyL_B~(Mrq77bh#WIPBZu zv)160F&xw6LH0O}5UJh;nJh(iKm@`4FG9~~N6*Z5kTHoQ$EfkBT0|o)x|3B)e7pfZ z?nRzkDoY7~;)zp|PN&DwK zs+N!6`QLSEw%lHFS`?bvWcjowP|5YG9x~$jt$~fn6YK6Gzw|bZK&7eavtmMojz>*| zme}E8FDEN=Kr^WM#gzLN7FDm{+SM*Ipy9;O5}Fu*?FF6RcPzfp2KdK^)7ixPQ#g~&-Y<4z&)C$^BN%Rx@#0J2T8djI6I8PHnpB(;RrhqO^|bC0=5g!woYUy>xM6XT zEqHF99;^2PDXw>?xAJON05QvTwwj{pi01Y2);wS8)*g9jxmlhaZ8!4fwor8?>e|aQ zH$+ztl;FUQ4APsRd7b+q7JjqXq$0pSUS=oLFS57Ttsn{dkLA5^clk`?=0Ae#V?($4PWb5QnP{^ozBdxEDt5-sw-lv<=EZXz;NV;BoD z4gE}Dl*GNWiXLMK9_IljAi?tc8MC-&qypLI3X0imcpyEG93)=70DsXo$N2#AhcdWI zo;Chr7D9tKS7sm@gjaw?%L$wj+hpLa+4p{?UPk%I^9-W=FFuE;GRfpe0XpKWaVkvD z4JmJMQ;neqZOvf?i#$aS(dTudE_0U=pA`22dLzf|Ol0Z>Qz%q$IE(4Ywz%E)m zfoPsdN@k*ZrDG@IQ|9lyP<{TlMA)_h5F)8(=rc)lfp7^?YKiKBU8~Hzv;pR^6OHe3 zva#w3b-9&WEjraljVOK4!FiV%f$@nvxi}9)=Z02AKUv$Q3W5e%C%hOOB8W*)n*%!~ zK6XAgm2XBX0s&o=QU0?}X*ReCyx?K(3d6iYU!6WrqwqK+w^x1L8s#C?19*o@+QLXg z!U5_LKJ<(_K~x;}0>1q@S@3sj^-nv-!o){R_)!*+{OE-Ln;rYhAN_}y`**kG_*Z9K z)l%i7f8vco3^QVcsK6`8YT-Y;9VCGWyA@8aXc|i`pqVg+D9+y6#8Z8%@2+YYruOz} zWW!`B0S-}7X*A?WcH(5Aveo>4C1$MhlbvCgC-g_c__W_dL88@rsVhB8<|crA z34B1R0UG9MD|Gic6!%K(K;`neqTXwDf(wH0Y|3pjGj&XT+Gpwg^EQ*=1US#S4{4HDJx$5TGUw)z^L@vgP(v5 z!IUN~u25wVejY8Zc(~!|`!NR)fU?R0+z^J}fxy@J(Mc*Yp^8`}8RTUwR8*gZoWFck z_2sw8HTLuXqeE4C?~+CA!0(baRUaZ9v4y;?oFug52JIf8JHh_i_mtls))^n})s**E zbvrDcx9e(Hg%YfN8K04q8jTD&!1a5Hlw~~NGA&kV1J*?REF5_ z{P2;j!_Uu->XNm zd$d8ca!)(}>0aPBIe3#N_|Dx<_;iW_eQ9Ab`c5eOr!Ghooa)*T*c~QIn zDT%p-Nzl_kF@k6U+-Y;$g`PG>0;B!2k{>^ULeCEbe&}%ivv2F{WNBmR z^gqiQ^9O#i zgP01`Hfp9zvcz*0u5%Un(Zz@NfCdIAMWeAsFG&J174!S%JOIay&M}I|qQn?s9hScu zoanm$BcpmDyg-GHMM!ttfuhdpY`@%gfF2FaDWgPFk0E(Iwb`GILU~5#w^XYI57oz- z?VH8SM4GEI5ZmnA@G~upvz)uKmc-iOk?m{)jp4MQGR+1tot4>i=hhqpFDCtE>F;AY z<1P*Bq$Sb1RT*u8s4c4U1S;gE1*z+sRCs;~DNY>hODp_#-ps9dauIL&-+ ziks<>+)#Nx;nk)aj>^S51ZeN?+uv}-2=y_Po$504c((KNop2p%eqD@ID_itxSENKM z&qIwzwqY3DuJg#I@n+sp9ZeW`CuI1IaSdXfq{35gL3@689(Zhu=6>9zk-o>US8Di9 zLYK+QoNvYTm9L?X?wp&(Qd%`|%CDKxA2Mhv5{OxDp~C2qof5h%k2l1K?|b2~q6q=b z%_n+=gM`x9u~0kUxNwc!*5JCQU8lo-L!0_KLw3E~hbZ9v*#}omIgi}~PZ&Q`W+MdB zn7Vx6Y_drieu2`pea5OTw;u^L_X4rK-MbD8B}5T!4{_PE4zd(G0hXUpNd#lTaH%dv zNniyY(JMAffwAB~Rx}Ygm^DbqQB+k2%>~o|Nl98q)=^Nlg~TPnpd}QN&y$5Tva=MM zj7O}hybEz1{Uc@90OL7$1!l>YM_JG&#Z^dpR=j|LCX9n#RVX`VWG6(MidRGuRrsnA$OX%tg@uACX%_TYDhgUrM*Y zk1v1@UxB6$PL`&QDlYWWa+;m8T`%rXuz&Bzhb%rnRdGQQhk%|YNTLtH7v?qoWDGM)bZ z3;+AK|3MvdeP?DA{BXxOAI5<9e;R|oEAoC2cRoC^-3OihqcKYQmxumixB*~j>GYRd zR@(reNT9w2huKI0vLLmr>ovOUh+C$pr;W-}rQyhx;UvBn%CoC5H>E_i))F7MEejM* zWU5dVBAj`?Qz~508u*g1KRbLIYjZt+7#ltBsC<9M=`>v>=p=-8ht0MqcXXHC`h|vZ zeW_G4FGfSZcg04}(-c3zTA{_Xvx)O%gZqawFltMYa9Wf(y%IucB}ObaTlS@xAW+(B zXFp=oQI+>VQ~ z_3?9~?&y{ThO44IkMqD}P@O zspmF?X@GGR&pf+YS`(}R$0OFN%{f@2rK?XJx7=22;=X~dn#y00e5ltcjNY;QAVPC7 z&B9&LY^?(g88#m<%nWPZI##*3@AP~FTln4>%?u#T#=F^vnfpz8YUNSw6lPd*5S9!x zvbJ36k`;s?)+$g%Leej1%wG+CX<)C_a0?fev~rQXf)fPIGIHo_b{H&9%9w77#@XM> zAHOV;JEU>e`Mr^yT*-0DXm7Mi0!%dHwqQ&>5I=>?cEE{e@QU_YHD0Y+#62 z0S#yR5xG>%8;$x6>>=(I*g8?{1TeDFFkT>J;Ac*!@gr(l_9AW{HE$R1lk+wBlUxnk z62stIVr2(Wk*`mBf3oP8xGK51l*lrjk*?kec=BYtbUyiFeN!9H$8@JmXow>YR}k;_ zKLh8#TdVBpolltbz4l1SoXof=xByJ< z8W@(^7)*^M!-YzwP|#tSnlcvVY?k|Nlik1%@GcB^9fNyJ0m3xKLZwGfL<}~f!`RAa1J$NWl zP+gJ_S6>{KSBfdjn0hft9rA8H#Wa$qwx;mH6IUI9Iu*o#(|A0`rSd$-ZTLwF z#GQf7R!ub~_tP9z+Bj=X-}=zgcUU#Rv{4t$bH&Eu8q7PQbM3AgNsFqhKQ+39VvMXi zKncdtuCm&ZSf8zEqgxdgsc?%kY?^XO>AxsHW{ysS{hekt2sEiBVLY`J3-Ea+8|a*r z0uXF3iZclbtROaca@8QOwa#566Xz~6J%XO50csM??ZY=25VsiO@(x7vAzQ1GbBGUf zp~ZkHnZo=+MVXsuNWbnO?^VOSK>%)Zv_QE zfs+$)d7iCg z9V2b6Z$+sg*agHkXRkviPNv$$obz8k7euHq;^2y#`B2J(^5DlhBW2NjxVDp~bp*0&BQ9Kmj%x+)L;LWSEE9vx!!EpMlKxnt%^bl`!Twy*qn@PzU(HvC0M zM5*(~j}(26OVY+VPBu>oLcZU#%T=-i4iRSK4>paQgg}e3Q+4l=yJR|wSP(6u%QCf) z?;1#wntuBD$i9i4>G;JS~F5V<1*F>$Ur3zoI z3zFy9Pmd*a+v+jNdCdxxQ6_F`wpVO0;jBR@!lwZb$-@t&4mGEA{p#S+rXFecTH}q^ z6N`xU%n~fEEr*0ecpI7p7>V!F^+{Zc82G(k))*v0WtA&%-Q2k>L+I*6uHtLVvJiel zcwB|~m1%j*I)Lk2RKfA~v4DzTvIF(P7&cYlqWzG0;nYCextqi7Ko_nOeV+vQ&_0zm z@WAByouTFx;u=#*xURYtwb)Jy`oaazZ{P{QXYWd&*L8Tl_+grW-nlN2a~fGIh`a4^ znK~QuVH))t3yJfxGe#S>6TBeMf~5kzSIjr?;EZcW_Gfj<0pJw`z~x7X>K-+qn9Nwu zlI+d;BK~-VD=y2ebK;b-W>QtWc%#yYk*UmnbrpET* zpWx%acs}_hcv5ZRep8>gT;TFk;f$~w@8NQwJKPJIjC6d5oDRZJZ}iT;#2Ewr*6YzOChe4&fyhrIqE=mI3 z@^y-+3d*<@JEZ4S-%}vRMg={=!4S5t7!O5maLq?{WC=e%|H&oU;9(uqHm;yo!$~68OKmz8u}6N0-bx$Ph$W zc*77B#7H=$cZnzKTd)%(TKK(q((0^)ze>aH#G?ki=+*V$H45fX9H~-eE`k$uK$-(`jx$)7w z`YZQPmXZNwLVcS)GCC=$KgXeLs&j@4-4wbaKF+69rE*J8fsjiXw~!5bqX8GY+(fvP z2xBM?oyS)VcE2EdN=lZ{+sM@aWMfDlf=XT^X*3;J3|qkR!w^%II8;q{7J-<~InA&Z zxmT`&cO$vQeJnsRT+(sr7j(1VI`rKB+}Cux;5uZEazz$YYPgH}ooo!+XCP+Y{9!eIvB7bXjox8>N6O}qc28U1uv@ajeE8pk zb>%O#bW-+l+sISNOrdDceoydG?Yssw#yvKsk;tkDD6PglRB5%UPoKkD6|U;mcGV}( zKJkNLi8C$-oH`{mdd3gXTD{`^QEvMC5&rXV#mB0`*Wkg78A2IuMX$ln#U0>DW*l{-Ljnq$-B?wK(iJ((BTtWr|jb z2%93B_oo$~iIh>LkfPEoi&1MJ{zYSsZ)d-!;LKG1$guH6P z?r|gDvV;_h1iO?S%{4No^|fbG0K4S%mCF7JZNTk|^;uuijmj{oOCTRBm9K{pO)hV= z%&7PeRj`=E?-lkv>UB2q0NPAug(l~cQFNObZ3}U;H$^ts3WfVKM%D2&%W=izN!WI+ zLGtGMa&qVCKom3SIagH~6l(=dO9CtR;47TKRZ@d|caPjo7%zF2X;im(A?fBWEONUH zj%qjQ;P4_&F^eme@B^DM)@$T_Opu0VQy7fkU<>_iNj@bsT{hpAGwgmwFUNs+g*FwiG1YDB{C393wVE~9IV?K{V1~JBTI!q- z9G!%-504ezi}D?&e;)8f?vAT6t7+G?LcB^<<%%8`^m;N8jZLDpe4&?oW2a*-;W9IO zn2MZ@T7G5zSH=EKy4@jvo4#S~eOy&C( z7js-?JK6;Z%)l=|_wjAt_M1p;67M$E3pO?s0p@b$L}K=Vc!;6J+fO|FX$1?E-a-&r zUZeO2OEypf@6X@fJFylqg!${@VY!ykRpZofvc(sm5hl;89{aw2vS&0p&*SS#B(xTH z^n3?Ah8G<&&5Y@z>ku!9?M!TVrcruwDm6^8@y|OyeA-b~;Pes;4+LD*k90x74J!bj8;1D5_*;wAn1*$a4&%*{Y{O zOK;rnoZW$J#CApAI)%LG$=k}wYvelIhdO;6RaH2{eZ1gcxtz{#%gM}mWtGJduC_k$ zrZy10Ue9S1Vhmr3fYaw=60~I9VV^3>{#Q$%6W;o7#W3IYqm;RfoMxKlSS!{ByM~kY zPfE27YnGlMwXE*~iodLH~auNVWgf#)k*t>?kb4@!$3iga>?fQA!b_BV6 z21b225{;SI?hm2~EL7zEano`&4jVcY_W4$Ou)SBm-2^5lQcLJWJYp``zk5wT)pClZNOiy!+C#*yV|KwD zWsot5@(&gE?;ehrd-qEOu7htXrHo1ojxi|u`p><|I5su9UsaAd$&@rxa(p&xCsbaS z(5GG&8$JBkH~fuy>t$f@LfCTyw9Vm@2f1&-iRvUnqKo)F&n@7`m`{M7$)Wpmn^1V% z5Z^sS^`N$B_r>nDA(tU8Q%$MK!mja*{m<(YP6Z!q1kfZe5ktyIrtKwS%C{2WSo6PGtm*=@B(TvK9~i1VpKAwqeG~xL1%i zT>1V7Cc)jvhtF&T4PKvIguAX=m;%T5Eww#lVVbhcb}dQFijZy%l6-VYJs-+sI#GP^ z+Mx8I;4p@E9_*#&_22#^{QezQ{{);U&MaZ}$7mWT{J*PG{29`G6jlFRmY@;>tePZ0CF&hAas^Ed!OEL` z@~lnP-(tATN2sSOaxQOoDSu0P3tsk?4;D4{ty0&&=Q20H`1;NBqE=!5;@kTpN~ilP zsyIcB@Tk~ikbAW@;dG#yc=FBwU+ znz&4zgwb9iw3V6`%^i(BAgRIjJX+HuyAuZ1mILqMJaR{)w%zt*1l{~FU3Oh7HRETh zwBA@=QiWN;Km~*8Oav7~l9>g*0npIs6IR5U*mi^R|mH`zqK!c`NT_8Bg>CfX{_@G z*QU=Bd*u_wDum&c}!PnUOxD=_^OQhEDR{5N##04gFmHZu^(%OQ-pnkVEu^Hsz4%L;K^Del;$B-aHb`mlRu-!-w6ejGwS)Feg~Mchs4+OAs0 zs?tIR9h8MdV#)X3pEg&iM{WCMdn#xLlP6dH0FP;1;6jt50e)R?82xp0h1)aKMnV^^ zXxL#>dEBfMxAWA-SGp#XlCPb**E45hq34bLmNG1ri#=5)=G3zpBz$o>i73**9iaPF zQD1HbYZ;e%fQw?A7MD{#>OyLVQV7kQIo{c8VH2f*QWk(VE96(aMJjLU24l|J%T%(( z>cN&S*ck4Ktuv{bvC1K_b!>Sk(ztkMeaR#Znq??TSYa$8q8utmbPjWc)^6716^nhV z-o8pa%YohA=Sq!l@rW;A@raa+2>}lx^9^c`hNaCb1cy~V;0rOk?1ebpnIUKWdn^m? z21>*;QvFkZVDpfp*ueICuL-U02#WHJn6lAzz2(DMhNglRdK6FJSNfCPSJz(VL^9fT zimq6e*)P^AjK`KS2Uz3kSEc@#$UV1lGhzg&aGc@BhY+6p0s?CUEDT%y9|9dCd{ z2!wdFzCd9&B8IzCYC{T;FL3{oyQWkEMN*{n;z2sh-xNW81qs6czTw0Si<}p<3e_Te z9&8^?8NS9NS}lJLrWy3hm-Rb_g?L-ItD26YecV(C0-oOF*GfteCj$Z?H<9;8I6VWx712 z|9o8{#lfB3?s8JiJT?uND^Y(P+dgS5D33!PSG9-#t-R%Ri*_*7=?*=kmaYjmK0BH+ z?R}OAM;1|dxY!@}Jh!3vuCac^+|N|gOk{5krBFu~$PtJ#6{O@8U#g=|t&;oD0{6w!4 z3KOsiCps0>bO<%gX(63zh0T}#r+i>24`7_}g6Z;#PygYIFSrL%4y3Mdyc(d;tsL&7 zwwpA5KO7kLo) zHm~I(Lvr#VxAA-hO>(AmdgGr+A^SF$PlAa3D9=LMy&%lv1d|bK-$crI`+52i?vF?D z_dop4N0BeIsz>}0c$UC@`b7V~1)u-pQT*pYB&yr0eE2~hJIO^v^*Bjes`?zUATrGA zQ1mi%_u^leTAOxERu^5$QK+ zxLP#AWSVsRD(%U7`(X`^4q)tAvb&&(BJ)-oY3$KwX6B7u5Qbj*s?5{Yq9cEOjeojU2qi_ zCEAyJvD2tYsLLqPSxhXe>urU#Ym(T>Ee?4N%ip7u?zp%tSKCknbVs;n3d|qSZ9`!| z_5e3}{4#(CTZ1Zvp(%N>RV>#rviySh@6lKTWRI(&>oR6$I)1j1%?qaP<8?b@QJj`q z$e_IrqlR@cFsnASOz~;3!cgsp{uk80r#BQ_u08n${p zhObi%l++6S+AloB!Gk)nTbs0YAZa#RR_!RrUAiN3Iz1H`8jU_kTUJiX&EF}H2XTLF z5j%$Om6wa(%C_s|Hh8ia@*BIrdDK9?Cq4QrP-LL7sW=zI8w4-kWByWWDj}voXhnv>e1!CY(8;gX$dWbm?&&#ztQX)Rmb-AuiWyDJU@Yqju&7mFJ z5!7{dH_U{RMiRu_P0dJSgF6K5y+PP0uaJHCdBO?I7XT;!9}u~702+hBF&)AWkbxoAd7lotFz|J*(wq@ z_ODG|^>UsYz!H$*EvnrF@I*<@2<;FF!(5J)T1Yk#IZqZw_Sl2V=*QD^B6IfhnTpKX ztF^FOz6N(L9(61xZV0)X*k|Sr7cSECyptUAr?d2eP@nh+t$5oMxBlj7n9rj2ju$FF zhvXG^8(pNsH}I5bR>CQw+h}{?x5D4TgHsKsT^B17iJ+agQrHjE>R~5!vtrZFuTi)( zOr?Zq#nWEAS1iHMo{}j3%xn_7g=5qolCs4TDS=DD*gdDj|81hD>&JB++~;$)$qUHx z41-59N09F@j`vu@`IUXQvN;jyNYrR^kiP`$gU|77`LI3SvWpaaM4`Ld`!um$+Nc#p zm=(Ls7p)+ab*?oB>c4e4q93h=TJ5MdG zscZB-uhP0|6QpChLqc+mGCF_Xhl;lfFtQ+X{5p(ru$(~#6mcN3c*HRAxgf@jpl#r_ z^a&5&mv93ZWRlYi9>}MjnSA0|AT{xSfhQwR`9(ELB({mQ9zrXUQ3yKoJ=(IlG8c12`Pw;}xwE6uUrp$#BeeSv;qUr6TkIuz^u_t=c5N2!WRNee~`?f6~

    5Ry(oLH8)<6IjMs&3mzQj2u_^XO(BE`&}G$ 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%0A!Q6n{F)<5jOMS6M28Vlwdq4umVW?pUzCS^c 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 diff --git a/java-idea/lib/slf4j-api-1.7.26.jar b/java-idea/lib/slf4j-api-1.7.26.jar deleted file mode 100644 index d2f27aceabc93c899bc4a39ba393aa74ec41d7b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41139 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 QpuGMdynfID0rTjs+W-In diff --git a/java-idea/src/EmitLog.java b/java-idea/src/EmitLog.java deleted file mode 120000 index 32bc0191..00000000 --- a/java-idea/src/EmitLog.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLog.java \ No newline at end of file diff --git a/java-idea/src/EmitLogDirect.java b/java-idea/src/EmitLogDirect.java deleted file mode 120000 index bc74d66c..00000000 --- a/java-idea/src/EmitLogDirect.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogDirect.java \ No newline at end of file diff --git a/java-idea/src/EmitLogHeader.java b/java-idea/src/EmitLogHeader.java deleted file mode 120000 index 0f9a266f..00000000 --- a/java-idea/src/EmitLogHeader.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogHeader.java \ No newline at end of file diff --git a/java-idea/src/EmitLogTopic.java b/java-idea/src/EmitLogTopic.java deleted file mode 120000 index 40c49659..00000000 --- a/java-idea/src/EmitLogTopic.java +++ /dev/null @@ -1 +0,0 @@ -../../java/EmitLogTopic.java \ No newline at end of file diff --git a/java-idea/src/NewTask.java b/java-idea/src/NewTask.java deleted file mode 120000 index 8e189155..00000000 --- a/java-idea/src/NewTask.java +++ /dev/null @@ -1 +0,0 @@ -../../java/NewTask.java \ No newline at end of file diff --git a/java-idea/src/PublisherConfirms.java b/java-idea/src/PublisherConfirms.java deleted file mode 120000 index 2b5eec02..00000000 --- a/java-idea/src/PublisherConfirms.java +++ /dev/null @@ -1 +0,0 @@ -../../java/PublisherConfirms.java \ No newline at end of file diff --git a/java-idea/src/RPCClient.java b/java-idea/src/RPCClient.java deleted file mode 120000 index 4f1d2e4d..00000000 --- a/java-idea/src/RPCClient.java +++ /dev/null @@ -1 +0,0 @@ -../../java/RPCClient.java \ No newline at end of file diff --git a/java-idea/src/RPCServer.java b/java-idea/src/RPCServer.java deleted file mode 120000 index 5559abc4..00000000 --- a/java-idea/src/RPCServer.java +++ /dev/null @@ -1 +0,0 @@ -../../java/RPCServer.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogHeader.java b/java-idea/src/ReceiveLogHeader.java deleted file mode 120000 index fd5d5b34..00000000 --- a/java-idea/src/ReceiveLogHeader.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogHeader.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogs.java b/java-idea/src/ReceiveLogs.java deleted file mode 120000 index 7eaab189..00000000 --- a/java-idea/src/ReceiveLogs.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogs.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsDirect.java b/java-idea/src/ReceiveLogsDirect.java deleted file mode 120000 index 033cd067..00000000 --- a/java-idea/src/ReceiveLogsDirect.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogsDirect.java \ No newline at end of file diff --git a/java-idea/src/ReceiveLogsTopic.java b/java-idea/src/ReceiveLogsTopic.java deleted file mode 120000 index 943ea267..00000000 --- a/java-idea/src/ReceiveLogsTopic.java +++ /dev/null @@ -1 +0,0 @@ -../../java/ReceiveLogsTopic.java \ No newline at end of file diff --git a/java-idea/src/Recv.java b/java-idea/src/Recv.java deleted file mode 120000 index bd95286c..00000000 --- a/java-idea/src/Recv.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Recv.java \ No newline at end of file diff --git a/java-idea/src/Send.java b/java-idea/src/Send.java deleted file mode 120000 index 38371d99..00000000 --- a/java-idea/src/Send.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Send.java \ No newline at end of file diff --git a/java-idea/src/Worker.java b/java-idea/src/Worker.java deleted file mode 120000 index 35bbea07..00000000 --- a/java-idea/src/Worker.java +++ /dev/null @@ -1 +0,0 @@ -../../java/Worker.java \ No newline at end of file From 046ea547878014834b67589223297bc15cbd065e Mon Sep 17 00:00:00 2001 From: hogimn Date: Thu, 2 Feb 2023 19:29:41 +0900 Subject: [PATCH 271/659] Use Enum instead of hard-corded String --- java/EmitLog.java | 3 ++- java/EmitLogTopic.java | 3 ++- java/ReceiveLogs.java | 7 ++----- java/ReceiveLogsTopic.java | 7 ++----- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/java/EmitLog.java b/java/EmitLog.java index 26d57b3c..84620577 100644 --- a/java/EmitLog.java +++ b/java/EmitLog.java @@ -1,3 +1,4 @@ +import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; @@ -11,7 +12,7 @@ public static void main(String[] argv) throws Exception { factory.setHost("localhost"); try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { - channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); String message = argv.length < 1 ? "info: Hello World!" : String.join(" ", argv); diff --git a/java/EmitLogTopic.java b/java/EmitLogTopic.java index 62544ab6..ad14701c 100644 --- a/java/EmitLogTopic.java +++ b/java/EmitLogTopic.java @@ -1,3 +1,4 @@ +import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; @@ -12,7 +13,7 @@ public static void main(String[] argv) throws Exception { try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { - channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); String routingKey = getRouting(argv); String message = getMessage(argv); diff --git a/java/ReceiveLogs.java b/java/ReceiveLogs.java index 14515479..5fdaa78a 100644 --- a/java/ReceiveLogs.java +++ b/java/ReceiveLogs.java @@ -1,7 +1,4 @@ -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.DeliverCallback; +import com.rabbitmq.client.*; public class ReceiveLogs { private static final String EXCHANGE_NAME = "logs"; @@ -12,7 +9,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, EXCHANGE_NAME, ""); diff --git a/java/ReceiveLogsTopic.java b/java/ReceiveLogsTopic.java index 6edaed30..0f484bb1 100644 --- a/java/ReceiveLogsTopic.java +++ b/java/ReceiveLogsTopic.java @@ -1,7 +1,4 @@ -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.DeliverCallback; +import com.rabbitmq.client.*; public class ReceiveLogsTopic { @@ -13,7 +10,7 @@ public static void main(String[] argv) throws Exception { Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); String queueName = channel.queueDeclare().getQueue(); if (argv.length < 1) { From ab7f7eedcf55bd07647bbc094362eccafc4c36be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 00:46:48 +0000 Subject: [PATCH 272/659] Bump tokio from 1.20.3 to 1.20.4 in /rust Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.20.3 to 1.20.4. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.20.3...tokio-1.20.4) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- rust/Cargo.lock | 4 ++-- rust/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 59f48b8b..83765a9e 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1104,9 +1104,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.3" +version = "1.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664cf6576f16c0ad68184998f3c2d4be9903ede6b291a5b5cfc97d29e0057283" +checksum = "eb78f30e4b41e98ca4cce5acb51168a033839a7af9e42b380355808e14e98ee0" dependencies = [ "autocfg", "bytes", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 68cd5541..e688a835 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -7,6 +7,6 @@ edition = "2018" [dependencies] futures = "0.3.21" lapin = "2.1.1" -tokio = { version = "1.20.3", features = ["full"] } +tokio = { version = "1.20.4", features = ["full"] } uuid = { version = "1.1.1", features = ["v4"] } tokio-stream = "0.1" From b3b70fb1b1887e78d2211f1f14e3cf9cea620c9c Mon Sep 17 00:00:00 2001 From: hogimn Date: Sat, 4 Feb 2023 11:36:58 +0900 Subject: [PATCH 273/659] Upgrade kotlin version --- kotlin/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kotlin/build.gradle b/kotlin/build.gradle index cc1b7245..82d1cf82 100644 --- a/kotlin/build.gradle +++ b/kotlin/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.2.31' + ext.kotlin_version = '1.8.10' repositories { mavenCentral() @@ -19,9 +19,9 @@ repositories { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "com.rabbitmq:amqp-client:latest.release" - compile "org.slf4j:slf4j-simple:1.7.25" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "com.rabbitmq:amqp-client:latest.release" + implementation "org.slf4j:slf4j-simple:1.7.25" } compileKotlin { From e8d06a646a45b66e94c8b0b693cea8340c576aad Mon Sep 17 00:00:00 2001 From: kuifir <64738525+kuifir@users.noreply.github.com> Date: Sat, 4 Mar 2023 18:08:29 +0800 Subject: [PATCH 274/659] Update PublisherConfirms.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator error,The variable should be incremented every time --- java/PublisherConfirms.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/PublisherConfirms.java b/java/PublisherConfirms.java index b32a06e5..a26d68f8 100644 --- a/java/PublisherConfirms.java +++ b/java/PublisherConfirms.java @@ -129,7 +129,7 @@ static boolean waitUntil(Duration timeout, BooleanSupplier condition) throws Int int waited = 0; while (!condition.getAsBoolean() && waited < timeout.toMillis()) { Thread.sleep(100L); - waited = +100; + waited += 100; } return condition.getAsBoolean(); } From 171239a0ec3d7cdfb81cd3379f0db0a47b044a8d Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 13 Apr 2023 00:28:52 +0400 Subject: [PATCH 275/659] Begin porting Rust tutorials to amqprs (in addition to Lapin) --- README.md | 3 +- rust-amqprs/Cargo.lock | 302 ++++++++++++++++++ rust-amqprs/Cargo.toml | 9 + rust-amqprs/README.md | 45 +++ {rust => rust-lapin}/.gitignore | 0 {rust => rust-lapin}/Cargo.lock | 0 {rust => rust-lapin}/Cargo.toml | 0 {rust => rust-lapin}/README.md | 4 +- {rust => rust-lapin}/src/bin/emit_log.rs | 0 .../src/bin/emit_log_direct.rs | 0 .../src/bin/emit_log_topic.rs | 0 {rust => rust-lapin}/src/bin/new_task.rs | 0 {rust => rust-lapin}/src/bin/receive.rs | 0 {rust => rust-lapin}/src/bin/receive_logs.rs | 0 .../src/bin/receive_logs_direct.rs | 0 .../src/bin/receive_logs_topic.rs | 0 {rust => rust-lapin}/src/bin/rpc_client.rs | 0 {rust => rust-lapin}/src/bin/rpc_server.rs | 0 {rust => rust-lapin}/src/bin/send.rs | 0 {rust => rust-lapin}/src/bin/worker.rs | 0 20 files changed, 360 insertions(+), 3 deletions(-) create mode 100644 rust-amqprs/Cargo.lock create mode 100644 rust-amqprs/Cargo.toml create mode 100644 rust-amqprs/README.md rename {rust => rust-lapin}/.gitignore (100%) rename {rust => rust-lapin}/Cargo.lock (100%) rename {rust => rust-lapin}/Cargo.toml (100%) rename {rust => rust-lapin}/README.md (92%) rename {rust => rust-lapin}/src/bin/emit_log.rs (100%) rename {rust => rust-lapin}/src/bin/emit_log_direct.rs (100%) rename {rust => rust-lapin}/src/bin/emit_log_topic.rs (100%) rename {rust => rust-lapin}/src/bin/new_task.rs (100%) rename {rust => rust-lapin}/src/bin/receive.rs (100%) rename {rust => rust-lapin}/src/bin/receive_logs.rs (100%) rename {rust => rust-lapin}/src/bin/receive_logs_direct.rs (100%) rename {rust => rust-lapin}/src/bin/receive_logs_topic.rs (100%) rename {rust => rust-lapin}/src/bin/rpc_client.rs (100%) rename {rust => rust-lapin}/src/bin/rpc_server.rs (100%) rename {rust => rust-lapin}/src/bin/send.rs (100%) rename {rust => rust-lapin}/src/bin/worker.rs (100%) diff --git a/README.md b/README.md index c34340b8..d0643422 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,8 @@ The following ports are available: * [Perl](./perl) * [Python (with Pika)](./python) * [Ruby (with Bunny)](./ruby) - * [Rust](./rust) + * [Rust with amqprs](./rust-amqprs) + * [Rust with Lapin](./rust-lapin) * [Scala](./scala) * [Swift](./swift) * [Spring AMQP](./spring-amqp) diff --git a/rust-amqprs/Cargo.lock b/rust-amqprs/Cargo.lock new file mode 100644 index 00000000..fea37449 --- /dev/null +++ b/rust-amqprs/Cargo.lock @@ -0,0 +1,302 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "amqp_serde" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b7d45071c5de7341789fbd161eac07fe3791a5f16220fd45132c079baf8400" +dependencies = [ + "bytes", + "serde", +] + +[[package]] +name = "amqprs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "966d3933b6e6d01b24e6f262bf6d9f12bf173c274bfb0aa7930e7dc406b0657d" +dependencies = [ + "amqp_serde", + "async-trait", + "bytes", + "serde", + "tokio", +] + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "libc" +version = "0.2.141" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rabbitmq-tutorials" +version = "1.0.0" +dependencies = [ + "amqprs", + "tokio", +] + +[[package]] +name = "serde" +version = "1.0.160" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.160" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tokio" +version = "1.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" diff --git a/rust-amqprs/Cargo.toml b/rust-amqprs/Cargo.toml new file mode 100644 index 00000000..098062b6 --- /dev/null +++ b/rust-amqprs/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rabbitmq-tutorials" +version = "1.0.0" +authors = ["Michael Klishin "] +edition = "2021" + +[dependencies] +amqprs = "1.2" +tokio = "1" \ No newline at end of file diff --git a/rust-amqprs/README.md b/rust-amqprs/README.md new file mode 100644 index 00000000..525a2452 --- /dev/null +++ b/rust-amqprs/README.md @@ -0,0 +1,45 @@ +# Rust code for RabbitMQ tutorials (using amqprs) + +Here you can find the Rust code examples for [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +The examples use [amqprs](https://github.com/gftea/amqprs) client library. + +These tutorials assume a RabbitMQ server node running locally using default ports. + +## Requirements + +* [Rust and Cargo](https://www.rust-lang.org/tools/install) + +## Code +Each cargo command should be launched in a separate shell. + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html) + + cargo run --bin receive + cargo run --bin send + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html) + + cargo run --bin worker + cargo run --bin new_task "hi" # specify a custom message + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html) + + cargo run --bin receive_logs + cargo run --bin emit_log "hi" # specify a custom message + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html) + + cargo run --bin receive_logs_direct info error # specify log levels + cargo run --bin emit_log_direct error "help!" # specify severity and custom message + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html) + + cargo run --bin receive_logs_topic kern.* # specify topic filter + cargo run --bin emit_log_topic kern.mem "No memory left!" # specify topic and message + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html) + + cargo run --bin rpc_server + cargo run --bin rpc_client diff --git a/rust/.gitignore b/rust-lapin/.gitignore similarity index 100% rename from rust/.gitignore rename to rust-lapin/.gitignore diff --git a/rust/Cargo.lock b/rust-lapin/Cargo.lock similarity index 100% rename from rust/Cargo.lock rename to rust-lapin/Cargo.lock diff --git a/rust/Cargo.toml b/rust-lapin/Cargo.toml similarity index 100% rename from rust/Cargo.toml rename to rust-lapin/Cargo.toml diff --git a/rust/README.md b/rust-lapin/README.md similarity index 92% rename from rust/README.md rename to rust-lapin/README.md index 525e2009..6299778a 100644 --- a/rust/README.md +++ b/rust-lapin/README.md @@ -1,11 +1,11 @@ -# Rust code for RabbitMQ tutorials +# Rust code for RabbitMQ tutorials (using Lapin) Here you can find the Rust code examples for [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). The examples use [lapin](https://github.com/CleverCloud/lapin) client library. -You should have a RabbitMQ server running on default port. +These tutorials assume a RabbitMQ server node running locally using default ports. ## Requirements diff --git a/rust/src/bin/emit_log.rs b/rust-lapin/src/bin/emit_log.rs similarity index 100% rename from rust/src/bin/emit_log.rs rename to rust-lapin/src/bin/emit_log.rs diff --git a/rust/src/bin/emit_log_direct.rs b/rust-lapin/src/bin/emit_log_direct.rs similarity index 100% rename from rust/src/bin/emit_log_direct.rs rename to rust-lapin/src/bin/emit_log_direct.rs diff --git a/rust/src/bin/emit_log_topic.rs b/rust-lapin/src/bin/emit_log_topic.rs similarity index 100% rename from rust/src/bin/emit_log_topic.rs rename to rust-lapin/src/bin/emit_log_topic.rs diff --git a/rust/src/bin/new_task.rs b/rust-lapin/src/bin/new_task.rs similarity index 100% rename from rust/src/bin/new_task.rs rename to rust-lapin/src/bin/new_task.rs diff --git a/rust/src/bin/receive.rs b/rust-lapin/src/bin/receive.rs similarity index 100% rename from rust/src/bin/receive.rs rename to rust-lapin/src/bin/receive.rs diff --git a/rust/src/bin/receive_logs.rs b/rust-lapin/src/bin/receive_logs.rs similarity index 100% rename from rust/src/bin/receive_logs.rs rename to rust-lapin/src/bin/receive_logs.rs diff --git a/rust/src/bin/receive_logs_direct.rs b/rust-lapin/src/bin/receive_logs_direct.rs similarity index 100% rename from rust/src/bin/receive_logs_direct.rs rename to rust-lapin/src/bin/receive_logs_direct.rs diff --git a/rust/src/bin/receive_logs_topic.rs b/rust-lapin/src/bin/receive_logs_topic.rs similarity index 100% rename from rust/src/bin/receive_logs_topic.rs rename to rust-lapin/src/bin/receive_logs_topic.rs diff --git a/rust/src/bin/rpc_client.rs b/rust-lapin/src/bin/rpc_client.rs similarity index 100% rename from rust/src/bin/rpc_client.rs rename to rust-lapin/src/bin/rpc_client.rs diff --git a/rust/src/bin/rpc_server.rs b/rust-lapin/src/bin/rpc_server.rs similarity index 100% rename from rust/src/bin/rpc_server.rs rename to rust-lapin/src/bin/rpc_server.rs diff --git a/rust/src/bin/send.rs b/rust-lapin/src/bin/send.rs similarity index 100% rename from rust/src/bin/send.rs rename to rust-lapin/src/bin/send.rs diff --git a/rust/src/bin/worker.rs b/rust-lapin/src/bin/worker.rs similarity index 100% rename from rust/src/bin/worker.rs rename to rust-lapin/src/bin/worker.rs From 00957bb434504ccafaf2d6112e4493528c1cadc8 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 15 Apr 2023 00:56:30 +0400 Subject: [PATCH 276/659] Rust with amqprs: port tutorials one and two --- .gitignore | 4 ++- rust-amqprs/src/bin/new_task.rs | 41 +++++++++++++++++++++++++++++ rust-amqprs/src/bin/receive.rs | 46 +++++++++++++++++++++++++++++++++ rust-amqprs/src/bin/send.rs | 40 ++++++++++++++++++++++++++++ rust-amqprs/src/bin/worker.rs | 46 +++++++++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 rust-amqprs/src/bin/new_task.rs create mode 100644 rust-amqprs/src/bin/receive.rs create mode 100644 rust-amqprs/src/bin/send.rs create mode 100644 rust-amqprs/src/bin/worker.rs diff --git a/.gitignore b/.gitignore index 3a5fb830..23d431f2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ erlang/rabbit_common* erlang/recon* python/venv dotnet/*.exe +dotnet/*/bin/* dotnet/lib java/*.class java/*.jar @@ -23,7 +24,8 @@ java*/.idea/encodings.xml .vscode/ obj/ -bin/ +bin/* +!src/bin/* target/ .DS_Store *.iml diff --git a/rust-amqprs/src/bin/new_task.rs b/rust-amqprs/src/bin/new_task.rs new file mode 100644 index 00000000..07e5652c --- /dev/null +++ b/rust-amqprs/src/bin/new_task.rs @@ -0,0 +1,41 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{QueueDeclareArguments, BasicPublishArguments}, BasicProperties +}; +use tokio::{io::Error as TError}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let q_name = "task_queue"; + let q_args = QueueDeclareArguments::new(q_name).durable(true).finish(); + let (_, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + let args: Vec<_> = std::env::args().skip(1).collect(); + let payload = match args.len() { + 0 => "hello".to_string(), + _ => args.join(" ").to_string(), + }; + + let publish_args = BasicPublishArguments::new("", &q_name); + // publish messages as persistent + let props = BasicProperties::default().with_delivery_mode(2).finish(); + ch.basic_publish(props, payload.clone().into_bytes(), publish_args).await.unwrap(); + + println!(" [x] Sent {:?}", payload); + + ch.close().await.unwrap(); + conn.close().await.unwrap(); + + Ok(()) +} \ No newline at end of file diff --git a/rust-amqprs/src/bin/receive.rs b/rust-amqprs/src/bin/receive.rs new file mode 100644 index 00000000..486c177c --- /dev/null +++ b/rust-amqprs/src/bin/receive.rs @@ -0,0 +1,46 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, channel::{QueueDeclareArguments, BasicConsumeArguments} +}; +use tokio::{self, sync::Notify}; +use tokio::io::Error as TError; +use std::str; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest", + )) + .await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let q_args = QueueDeclareArguments::default() + .queue(String::from("hello")) + .durable(true) + .finish(); + let (queue_name, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + let consumer_args = BasicConsumeArguments::new(&queue_name, "receive.rs"); + let (_ctag, mut rx) = ch.basic_consume_rx(consumer_args).await.unwrap(); + + tokio::spawn(async move { + while let Some(msg) = rx.recv().await { + if let Some(payload) = msg.content { + println!(" [x] Received {:?}", str::from_utf8(&payload).unwrap()); + } + }; + + }); + + println!(" [*] Waiting for messages. To exit press CTRL+C"); + + let guard = Notify::new(); + guard.notified().await; + + Ok(()) +} diff --git a/rust-amqprs/src/bin/send.rs b/rust-amqprs/src/bin/send.rs new file mode 100644 index 00000000..b645b760 --- /dev/null +++ b/rust-amqprs/src/bin/send.rs @@ -0,0 +1,40 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, channel::{QueueDeclareArguments, BasicPublishArguments}, BasicProperties +}; +use tokio; +use tokio::io::Error as TError; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest", + )) + .await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let q_args = QueueDeclareArguments::default() + .queue(String::from("hello")) + .durable(true) + .finish(); + let (queue_name, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + let payload = String::from("Hello world!").into_bytes(); + let publish_args = BasicPublishArguments::new("", &queue_name); + // publish messages as persistent + let props = BasicProperties::default().with_delivery_mode(2).finish(); + ch.basic_publish(props, payload, publish_args).await.unwrap(); + + println!(" [x] Sent \"Hello World!\""); + + // in real applications connections are meant to be long lived + conn.close().await.unwrap(); + + Ok(()) +} diff --git a/rust-amqprs/src/bin/worker.rs b/rust-amqprs/src/bin/worker.rs new file mode 100644 index 00000000..cdad91c4 --- /dev/null +++ b/rust-amqprs/src/bin/worker.rs @@ -0,0 +1,46 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{QueueDeclareArguments, BasicConsumeArguments, BasicAckArguments} +}; +use tokio::{io::Error as TError, sync::Notify}; +use std::{time::Duration, thread}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let q_name = "task_queue"; + let q_args = QueueDeclareArguments::new(q_name).durable(true).finish(); + let (_, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + let consumer_args = BasicConsumeArguments::default().queue(String::from(q_name)).finish(); + let (_ctag, mut rx) = ch.basic_consume_rx(consumer_args).await.unwrap(); + + println!(" [*] Waiting for messages. To exit press CTRL+C"); + + tokio::spawn(async move { + while let Some(msg) = rx.recv().await { + if let Some(payload) = msg.content { + println!(" [x] Received {:?}", std::str::from_utf8(&payload).unwrap()); + thread::sleep(Duration::from_secs(payload.len() as u64)); + println!(" [x] Done"); + + ch.basic_ack(BasicAckArguments::new(msg.deliver.unwrap().delivery_tag(), false)).await.unwrap(); + } + } + }); + + let guard = Notify::new(); + guard.notified().await; + + Ok(()) +} \ No newline at end of file From 12384c94cbc2405459c887b06bb9890f6880812e Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 15 Apr 2023 01:20:11 +0400 Subject: [PATCH 277/659] Rust with amqprs: port tutorial 3 --- rust-amqprs/src/bin/emit_log.rs | 42 +++++++++++++++++++++++++ rust-amqprs/src/bin/receive_logs.rs | 49 +++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 rust-amqprs/src/bin/emit_log.rs create mode 100644 rust-amqprs/src/bin/receive_logs.rs diff --git a/rust-amqprs/src/bin/emit_log.rs b/rust-amqprs/src/bin/emit_log.rs new file mode 100644 index 00000000..4b7e80f6 --- /dev/null +++ b/rust-amqprs/src/bin/emit_log.rs @@ -0,0 +1,42 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{ExchangeDeclareArguments, BasicPublishArguments}, BasicProperties +}; +use tokio::{io::Error as TError}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "logs"; + let x_type = "fanout"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let args: Vec<_> = std::env::args().skip(1).collect(); + let payload = match args.len() { + 0 => "hello".to_string(), + _ => args.join(" ").to_string(), + }; + + let publish_args = BasicPublishArguments::new(x_name, ""); + // publish messages as persistent + let props = BasicProperties::default().with_delivery_mode(2).finish(); + ch.basic_publish(props, payload.clone().into_bytes(), publish_args).await.unwrap(); + + println!(" [x] Sent {:?}", payload); + + ch.close().await.unwrap(); + conn.close().await.unwrap(); + + Ok(()) +} \ No newline at end of file diff --git a/rust-amqprs/src/bin/receive_logs.rs b/rust-amqprs/src/bin/receive_logs.rs new file mode 100644 index 00000000..dca67fc1 --- /dev/null +++ b/rust-amqprs/src/bin/receive_logs.rs @@ -0,0 +1,49 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{QueueDeclareArguments, BasicConsumeArguments, BasicAckArguments, QueueBindArguments, ExchangeDeclareArguments} +}; +use tokio::{io::Error as TError, sync::Notify}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "logs"; + let x_type = "fanout"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let q_args = QueueDeclareArguments::new("").durable(false).exclusive(true).finish(); + let (q_name, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + ch.queue_bind(QueueBindArguments::new(&q_name, &x_name, "")).await.unwrap(); + + let consumer_args = BasicConsumeArguments::default().queue(String::from(q_name)).finish(); + let (_ctag, mut rx) = ch.basic_consume_rx(consumer_args).await.unwrap(); + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + tokio::spawn(async move { + while let Some(msg) = rx.recv().await { + if let Some(payload) = msg.content { + println!(" [x] Received {:?}", std::str::from_utf8(&payload).unwrap()); + + ch.basic_ack(BasicAckArguments::new(msg.deliver.unwrap().delivery_tag(), false)).await.unwrap(); + } + } + }); + + let guard = Notify::new(); + guard.notified().await; + + Ok(()) +} \ No newline at end of file From b412772268488b17f7db4ca0b4a00199c49ec5f1 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 15 Apr 2023 01:50:03 +0400 Subject: [PATCH 278/659] Rust with amqprs: port tutorial four --- rust-amqprs/src/bin/emit_log_topic.rs | 43 ++++++++++++++++ rust-amqprs/src/bin/receive_logs_topic.rs | 60 +++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 rust-amqprs/src/bin/emit_log_topic.rs create mode 100644 rust-amqprs/src/bin/receive_logs_topic.rs diff --git a/rust-amqprs/src/bin/emit_log_topic.rs b/rust-amqprs/src/bin/emit_log_topic.rs new file mode 100644 index 00000000..6e90dd46 --- /dev/null +++ b/rust-amqprs/src/bin/emit_log_topic.rs @@ -0,0 +1,43 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{ExchangeDeclareArguments, BasicPublishArguments}, BasicProperties +}; +use tokio::{io::Error as TError}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "topic_logs"; + let x_type = "topic"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let args: Vec<_> = std::env::args().skip(1).collect(); + let routing_key = args.first().map(String::as_str).unwrap_or("anonymous.info"); + let payload = match args.len() { + x if x < 2 => "Hello, world!".to_string(), + _ => args[1..].join(" ").to_string(), + }; + + let publish_args = BasicPublishArguments::new(x_name, routing_key); + // publish messages as persistent + let props = BasicProperties::default().with_delivery_mode(2).finish(); + ch.basic_publish(props, payload.clone().into_bytes(), publish_args).await.unwrap(); + + println!(" [x] Sent {:?}", payload); + + ch.close().await.unwrap(); + conn.close().await.unwrap(); + + Ok(()) +} \ No newline at end of file diff --git a/rust-amqprs/src/bin/receive_logs_topic.rs b/rust-amqprs/src/bin/receive_logs_topic.rs new file mode 100644 index 00000000..6335047c --- /dev/null +++ b/rust-amqprs/src/bin/receive_logs_topic.rs @@ -0,0 +1,60 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{QueueDeclareArguments, BasicConsumeArguments, BasicAckArguments, QueueBindArguments, ExchangeDeclareArguments} +}; +use tokio::{io::Error as TError, sync::Notify}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let binding_keys: Vec<_> = std::env::args().skip(1).collect(); + if binding_keys.is_empty() { + eprintln!( + "Usage: {} [binding_key]...\n", + std::env::args().next().unwrap_or_else(|| "receive-topic".into()) + ); + std::process::exit(1); + } + + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "topic_logs"; + let x_type = "topic"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let q_args = QueueDeclareArguments::new("").durable(false).exclusive(true).finish(); + let (q_name, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + for bk in binding_keys { + ch.queue_bind(QueueBindArguments::new(&q_name, &x_name, &bk)).await.unwrap(); + } + + let consumer_args = BasicConsumeArguments::default().queue(String::from(q_name)).finish(); + let (_ctag, mut rx) = ch.basic_consume_rx(consumer_args).await.unwrap(); + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + tokio::spawn(async move { + while let Some(msg) = rx.recv().await { + if let Some(payload) = msg.content { + println!(" [x] Received {:?}", std::str::from_utf8(&payload).unwrap()); + + ch.basic_ack(BasicAckArguments::new(msg.deliver.unwrap().delivery_tag(), false)).await.unwrap(); + } + } + }); + + let guard = Notify::new(); + guard.notified().await; + + Ok(()) +} \ No newline at end of file From 71024e0dc29c18446fe967a93a69373dc0456e91 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 15 Apr 2023 02:06:36 +0400 Subject: [PATCH 279/659] Rust with amqprs: port tutorial three --- rust-amqprs/src/bin/emit_log_direct.rs | 48 +++++++++++++++++ rust-amqprs/src/bin/receive_logs_direct.rs | 60 ++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 rust-amqprs/src/bin/emit_log_direct.rs create mode 100644 rust-amqprs/src/bin/receive_logs_direct.rs diff --git a/rust-amqprs/src/bin/emit_log_direct.rs b/rust-amqprs/src/bin/emit_log_direct.rs new file mode 100644 index 00000000..c5967bce --- /dev/null +++ b/rust-amqprs/src/bin/emit_log_direct.rs @@ -0,0 +1,48 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{ExchangeDeclareArguments, BasicPublishArguments}, BasicProperties +}; +use tokio::{io::Error as TError}; +use std::str; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "direct_logs"; + let x_type = "direct"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let args: Vec<_> = std::env::args().skip(1).collect(); + let routing_key = args.first().map(String::as_str).unwrap_or("anonymous.info"); + let payload = match args.len() { + x if x < 2 => "Hello, world!".to_string(), + _ => args[1..].join(" ").to_string(), + }; + + let publish_args = BasicPublishArguments::new(x_name, routing_key); + // publish messages as persistent + let props = BasicProperties::default().with_delivery_mode(2).finish(); + ch.basic_publish(props, payload.clone().into_bytes(), publish_args).await.unwrap(); + + println!( + " [x] Sent {}:{:?}", + routing_key, + str::from_utf8(payload.as_bytes()).unwrap() + ); + + ch.close().await.unwrap(); + conn.close().await.unwrap(); + + Ok(()) +} \ No newline at end of file diff --git a/rust-amqprs/src/bin/receive_logs_direct.rs b/rust-amqprs/src/bin/receive_logs_direct.rs new file mode 100644 index 00000000..be4b333e --- /dev/null +++ b/rust-amqprs/src/bin/receive_logs_direct.rs @@ -0,0 +1,60 @@ +use amqprs::{ + connection::{Connection, OpenConnectionArguments}, + callbacks::{DefaultConnectionCallback, DefaultChannelCallback}, + channel::{QueueDeclareArguments, BasicConsumeArguments, BasicAckArguments, QueueBindArguments, ExchangeDeclareArguments} +}; +use tokio::{io::Error as TError, sync::Notify}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let severities: Vec<_> = std::env::args().skip(1).collect(); + if severities.is_empty() { + eprintln!( + "Usage: {} [info] [warning] [error]\n", + std::env::args().next().unwrap_or_else(|| "receive-direct".into()) + ); + std::process::exit(1); + } + + let conn = Connection::open(&OpenConnectionArguments::new( + "localhost", + 5672, + "guest", + "guest")).await.unwrap(); + conn.register_callback(DefaultConnectionCallback).await.unwrap(); + + let ch = conn.open_channel(None).await.unwrap(); + ch.register_callback(DefaultChannelCallback).await.unwrap(); + + let x_name = "direct_logs"; + let x_type = "direct"; + let x_args = ExchangeDeclareArguments::new(x_name, x_type).durable(true).finish(); + ch.exchange_declare(x_args).await.unwrap(); + + let q_args = QueueDeclareArguments::new("").durable(false).exclusive(true).finish(); + let (q_name, _, _) = ch.queue_declare(q_args).await.unwrap().unwrap(); + + for bk in severities { + ch.queue_bind(QueueBindArguments::new(&q_name, &x_name, &bk)).await.unwrap(); + } + + let consumer_args = BasicConsumeArguments::default().queue(String::from(q_name)).finish(); + let (_ctag, mut rx) = ch.basic_consume_rx(consumer_args).await.unwrap(); + + println!(" [*] Waiting for logs. To exit press CTRL+C"); + + tokio::spawn(async move { + while let Some(msg) = rx.recv().await { + if let Some(payload) = msg.content { + println!(" [x] Received {:?}", std::str::from_utf8(&payload).unwrap()); + + ch.basic_ack(BasicAckArguments::new(msg.deliver.unwrap().delivery_tag(), false)).await.unwrap(); + } + } + }); + + let guard = Notify::new(); + guard.notified().await; + + Ok(()) +} \ No newline at end of file From 2d871344a2d4c87f5ed9f371371bfd31520f2a10 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 15 Apr 2023 02:08:24 +0400 Subject: [PATCH 280/659] Rust with amqprs: tutorial six is not currently implemented --- rust-amqprs/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rust-amqprs/README.md b/rust-amqprs/README.md index 525a2452..be51ff21 100644 --- a/rust-amqprs/README.md +++ b/rust-amqprs/README.md @@ -38,8 +38,3 @@ Each cargo command should be launched in a separate shell. cargo run --bin receive_logs_topic kern.* # specify topic filter cargo run --bin emit_log_topic kern.mem "No memory left!" # specify topic and message - -#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html) - - cargo run --bin rpc_server - cargo run --bin rpc_client From 660fd305a4db244d0be035ebab099e257508a211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Ferr=C3=A3o=20Feodrippe?= Date: Sat, 29 Apr 2023 17:57:16 -0300 Subject: [PATCH 281/659] Fix to prevent a problem when not closing channel. - System hangs on "await InvokeAsync(n);" inside method Main * I don't know the detail, connection.Close should handle this close connection, but something since is using same main resources is causing a block on main thread when channel.Close is not called. --- dotnet/RPCClient/RPCClient.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index 30828c1e..bf2d56e9 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -56,6 +56,7 @@ public Task CallAsync(string message, CancellationToken cancellationToke public void Dispose() { + channel.Close(); connection.Close(); } } @@ -80,4 +81,4 @@ private static async Task InvokeAsync(string n) var response = await rpcClient.CallAsync(n); Console.WriteLine(" [.] Got '{0}'", response); } -} \ No newline at end of file +} From 98956e0dfe890d3c54d3f08c7bc2e7a6d5540ce8 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Mon, 1 May 2023 09:38:08 -0700 Subject: [PATCH 282/659] Update dependencies Fixes https://github.com/rabbitmq/rabbitmq-tutorials/security/dependabot/16 --- rust-lapin/Cargo.lock | 716 ++++++++++++++++++++++++++---------------- 1 file changed, 437 insertions(+), 279 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 83765a9e..852b8c7e 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "amq-protocol" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc7cad07d1b4533fcb46f0819a6126fa201fd0385469aba75e405424f3fe009" +checksum = "de7ec72218cc1c9063bdf559a60f40405980ee56bca469ad1e549cc0d76deb46" dependencies = [ "amq-protocol-tcp", "amq-protocol-types", @@ -18,9 +18,9 @@ dependencies = [ [[package]] name = "amq-protocol-tcp" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8b20aba8c35a0b885e1e978eff456ced925730a4e012e63e4ff89a1deb602b" +checksum = "09fae6d8a492462d268b48b7bc14d76a53e5310414f909c61cb3a509dbe7ca9b" dependencies = [ "amq-protocol-uri", "tcp-stream", @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "amq-protocol-types" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e245e0e9083b6a6db5f8c10013074cb382266eb9e2a37204d19c651b8d3b8114" +checksum = "7891a2fc253f8919d3caa49fccd06d721002e015940c8592f7824c0b4e80a485" dependencies = [ "cookie-factory", "nom", @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "amq-protocol-uri" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56987108bf48d2eb500cae8896cd9291564eedd8744776ecc5c3338a8b2ca5f8" +checksum = "da3649e6751a8fb43330f2a442409970f10f51c79b987fcbbfc7093f4edb6a5e" dependencies = [ "amq-protocol-types", "percent-encoding", @@ -52,9 +52,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ "concurrent-queue", "event-listener", @@ -63,23 +63,23 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" dependencies = [ + "async-lock", "async-task", "concurrent-queue", "fastrand", "futures-lite", - "once_cell", "slab", ] [[package]] name = "async-global-executor" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ "async-channel", "async-executor", @@ -103,28 +103,29 @@ dependencies = [ [[package]] name = "async-io" -version = "1.7.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ + "async-lock", + "autocfg", + "cfg-if", "concurrent-queue", "futures-lite", - "libc", "log", - "once_cell", "parking", "polling", + "rustix", "slab", "socket2", "waker-fn", - "winapi", ] [[package]] name = "async-lock" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", ] @@ -143,26 +144,26 @@ dependencies = [ [[package]] name = "async-task" -version = "4.2.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" +checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" [[package]] name = "async-trait" -version = "0.1.56" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "atomic-waker" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "autocfg" @@ -172,9 +173,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.13.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "bitflags" @@ -184,53 +185,48 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "block-padding" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ "generic-array", ] [[package]] name = "blocking" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" dependencies = [ "async-channel", + "async-lock", "async-task", "atomic-waker", "fastrand", "futures-lite", - "once_cell", + "log", ] [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" [[package]] name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "cache-padded" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cbc" @@ -243,9 +239,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -255,9 +251,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -265,11 +261,11 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ - "cache-padded", + "crossbeam-utils", ] [[package]] @@ -290,24 +286,33 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -324,9 +329,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", @@ -339,11 +344,32 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "executor-trait" @@ -356,40 +382,39 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] [[package]] name = "flume" -version = "0.10.13" +version = "0.10.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ceeb589a3157cac0ab8cc585feb749bd2cea5cb55a6ee802ad72d9fd38303da" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" dependencies = [ "futures-core", "futures-sink", "pin-project", - "spin 0.9.3", + "spin 0.9.8", ] [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "futures" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -402,9 +427,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -412,15 +437,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -429,15 +454,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ "fastrand", "futures-core", @@ -450,32 +475,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -491,9 +516,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -501,24 +526,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hmac" version = "0.12.1" @@ -530,11 +561,10 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -558,17 +588,28 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] @@ -603,15 +644,21 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.142" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" + +[[package]] +name = "linux-raw-sys" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -626,12 +673,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -646,21 +687,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "wasi", + "windows-sys 0.45.0", ] [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -668,19 +709,19 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "once_cell" -version = "1.12.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "openssl-probe" @@ -707,9 +748,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -723,41 +764,41 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -786,31 +827,34 @@ dependencies = [ [[package]] name = "polling" -version = "2.2.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ + "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "winapi", + "pin-project-lite", + "windows-sys 0.48.0", ] [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -848,9 +892,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -870,28 +914,42 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustix" +version = "0.37.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + [[package]] name = "rustls" -version = "0.20.6" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +checksum = "07180898a28ed6a7f7ba2311594308f595e3dd2e3c3812fa0a80a47b45f17e5d" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] name = "rustls-connector" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6a18f8d10f71bce9bca6eaeb80429460e652f3bcf0381f0c5f8954abf7b3b8" +checksum = "692d857261c41e2915b8ee70e40265e51010ee5d3c7a9b7d50837bc5cee86207" dependencies = [ "log", "rustls", "rustls-native-certs", - "webpki", + "rustls-webpki", ] [[package]] @@ -908,27 +966,36 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ "base64", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -949,9 +1016,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ "bitflags", "core-foundation", @@ -962,9 +1029,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -972,29 +1039,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.137" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -1003,9 +1070,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", @@ -1014,30 +1081,33 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -1051,9 +1121,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] @@ -1066,9 +1136,20 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.96" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -1077,9 +1158,9 @@ dependencies = [ [[package]] name = "tcp-stream" -version = "0.24.4" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a4b0a70bac0a58ca6a7659d1328e34ee462339c70b0fa49f72bad1f278910a" +checksum = "6918876e41110757f36b734388e17834e69abf7ca4456ebe8a38af21f5a651d7" dependencies = [ "cfg-if", "p12", @@ -1098,20 +1179,19 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.20.4" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb78f30e4b41e98ca4cce5acb51168a033839a7af9e42b380355808e14e98ee0" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot", @@ -1119,25 +1199,25 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "tokio-stream" -version = "0.1.9" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", @@ -1146,9 +1226,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", @@ -1157,33 +1237,33 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.27" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] @@ -1196,21 +1276,20 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] [[package]] name = "uuid" -version = "1.1.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d5d669b51467dcf7b2f1a796ce0f955f05f01cafda6c19d6e95f730df29238" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" dependencies = [ "getrandom", ] @@ -1227,12 +1306,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1241,9 +1314,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1251,24 +1324,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1276,52 +1349,33 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1346,49 +1400,153 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "yasna" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346d34a236c9d3e5f3b9b74563f238f955bbd05fa0b8b4efa53c130c43982f4c" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" From 85a397004992902bcd192b40364f5950a7366c7e Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 20 May 2023 15:49:03 +0400 Subject: [PATCH 283/659] Rust Lapin: update dependencies --- rust-lapin/Cargo.lock | 157 ++++++++++++++++++++---------------------- 1 file changed, 73 insertions(+), 84 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 852b8c7e..3dab852b 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "amq-protocol" -version = "7.1.0" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de7ec72218cc1c9063bdf559a60f40405980ee56bca469ad1e549cc0d76deb46" +checksum = "1d40d8b2465c7959dd40cee32ba6ac334b5de57e9fca0cc756759894a4152a5d" dependencies = [ "amq-protocol-tcp", "amq-protocol-types", @@ -18,9 +18,9 @@ dependencies = [ [[package]] name = "amq-protocol-tcp" -version = "7.1.0" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fae6d8a492462d268b48b7bc14d76a53e5310414f909c61cb3a509dbe7ca9b" +checksum = "9cb2100adae7da61953a2c3a01935d86caae13329fadce3333f524d6d6ce12e2" dependencies = [ "amq-protocol-uri", "tcp-stream", @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "amq-protocol-types" -version = "7.1.0" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891a2fc253f8919d3caa49fccd06d721002e015940c8592f7824c0b4e80a485" +checksum = "156ff13c8a3ced600b4e54ed826a2ae6242b6069d00dd98466827cef07d3daff" dependencies = [ "cookie-factory", "nom", @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "amq-protocol-uri" -version = "7.1.0" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3649e6751a8fb43330f2a442409970f10f51c79b987fcbbfc7093f4edb6a5e" +checksum = "751bbd7d440576066233e740576f1b31fdc6ab86cfabfbd48c548de77eca73e4" dependencies = [ "amq-protocol-types", "percent-encoding", @@ -156,7 +156,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn", ] [[package]] @@ -218,9 +218,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.1" +version = "3.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" +checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" [[package]] name = "bytes" @@ -329,9 +329,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -481,7 +481,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn", ] [[package]] @@ -607,18 +607,18 @@ checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] [[package]] name = "lapin" -version = "2.1.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd03ea5831b44775e296239a64851e2fd14a80a363d202ba147009ffc994ff0f" +checksum = "acc13beaa09eed710f406201f46b961345b4d061dd90ec3d3ccc70721e70342a" dependencies = [ "amq-protocol", "async-global-executor-trait", @@ -644,15 +644,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.142" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "linux-raw-sys" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lock_api" @@ -783,22 +783,22 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -843,18 +843,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.18" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno", @@ -930,9 +930,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07180898a28ed6a7f7ba2311594308f595e3dd2e3c3812fa0a80a47b45f17e5d" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" dependencies = [ "log", "ring", @@ -942,9 +942,9 @@ dependencies = [ [[package]] name = "rustls-connector" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d857261c41e2915b8ee70e40265e51010ee5d3c7a9b7d50837bc5cee86207" +checksum = "67c8d6cf0e464eff7cee6ba0419f56a65d29999fc164dd719c8633fbb401365f" dependencies = [ "log", "rustls", @@ -1016,9 +1016,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -1029,9 +1029,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -1039,22 +1039,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn", ] [[package]] @@ -1130,26 +1130,15 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.109" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" dependencies = [ "proc-macro2", "quote", @@ -1158,9 +1147,9 @@ dependencies = [ [[package]] name = "tcp-stream" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6918876e41110757f36b734388e17834e69abf7ca4456ebe8a38af21f5a651d7" +checksum = "1322b18a9e329ba45e4430b19543045b85cd1dcb2892e77d27ab471ba2039bd1" dependencies = [ "cfg-if", "p12", @@ -1185,9 +1174,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" dependencies = [ "autocfg", "bytes", @@ -1210,7 +1199,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn", ] [[package]] @@ -1237,9 +1226,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" [[package]] name = "typenum" @@ -1287,9 +1276,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ "getrandom", ] @@ -1314,9 +1303,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1324,24 +1313,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1349,28 +1338,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", From 35ff26a5eaeb5154ac13230b45ed451b9cbb9dfd Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 20 May 2023 15:50:40 +0400 Subject: [PATCH 284/659] Rust amqprs: update dependencies --- rust-amqprs/Cargo.lock | 126 +++++++++++++++++++++++++++++++---------- 1 file changed, 96 insertions(+), 30 deletions(-) diff --git a/rust-amqprs/Cargo.lock b/rust-amqprs/Cargo.lock index fea37449..5a76ccc7 100644 --- a/rust-amqprs/Cargo.lock +++ b/rust-amqprs/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "amqp_serde" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b7d45071c5de7341789fbd161eac07fe3791a5f16220fd45132c079baf8400" +checksum = "19659fab053d9b2cd4fa17649609a3241b181fcd14189931ea5c0976502fe381" dependencies = [ "bytes", "serde", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "amqprs" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "966d3933b6e6d01b24e6f262bf6d9f12bf173c274bfb0aa7930e7dc406b0657d" +checksum = "b16f62ef427e90df82ba53de2bd2c9fdae10640b8b78538d8c63ac2bdf13dd80" dependencies = [ "amqp_serde", "async-trait", @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.141" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "log" @@ -87,7 +87,7 @@ dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -108,18 +108,18 @@ checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -134,18 +134,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", @@ -164,9 +164,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.14" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" dependencies = [ "proc-macro2", "quote", @@ -175,9 +175,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" dependencies = [ "autocfg", "bytes", @@ -187,14 +187,14 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", @@ -241,7 +241,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] @@ -250,13 +259,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -265,38 +289,80 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" From 38666db36f96184a2e76dfca37aab59e03c2c338 Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Wed, 26 Jul 2023 15:35:28 -0400 Subject: [PATCH 285/659] Update emit_log.py to use f strings --- python/emit_log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/emit_log.py b/python/emit_log.py index 4cb66d85..063b7618 100755 --- a/python/emit_log.py +++ b/python/emit_log.py @@ -10,5 +10,5 @@ message = ' '.join(sys.argv[1:]) or "info: Hello World!" channel.basic_publish(exchange='logs', routing_key='', body=message) -print(" [x] Sent %r" % message) +print(f" [x] Sent {message}") connection.close() From 2d7ce86c40c966ee3ec89f68617acc922e75de2f Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:03 -0400 Subject: [PATCH 286/659] Update emit_log_direct.py --- python/emit_log_direct.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index cc5b7a3a..7bed79a4 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -12,5 +12,5 @@ message = ' '.join(sys.argv[2:]) or 'Hello World!' channel.basic_publish( exchange='direct_logs', routing_key=severity, body=message) -print(" [x] Sent %r:%r" % (severity, message)) +print(f" [x] Sent {severity}:{message}") connection.close() From b13bca50eb02fd92be48017105fe3417eb1f498f Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:05 -0400 Subject: [PATCH 287/659] Update emit_log_topic.py --- python/emit_log_topic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/emit_log_topic.py b/python/emit_log_topic.py index e6c4b929..b21e66f3 100755 --- a/python/emit_log_topic.py +++ b/python/emit_log_topic.py @@ -12,5 +12,5 @@ message = ' '.join(sys.argv[2:]) or 'Hello World!' channel.basic_publish( exchange='topic_logs', routing_key=routing_key, body=message) -print(" [x] Sent %r:%r" % (routing_key, message)) +print(f" [x] Sent {routing_key}:{message}") connection.close() From da5266e82ddad6702940ea681577225e478c5180 Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:07 -0400 Subject: [PATCH 288/659] Update new_task.py --- python/new_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/new_task.py b/python/new_task.py index f040aea3..47c217ef 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -16,5 +16,5 @@ properties=pika.BasicProperties( delivery_mode=pika.spec.PERSISTENT_DELIVERY_MODE, )) -print(" [x] Sent %r" % message) +print(f" [x] Sent {message}") connection.close() From 27934f93eb8bb00b97e042237a1a1ea8d1f5482a Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:09 -0400 Subject: [PATCH 289/659] Update receive.py --- python/receive.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/receive.py b/python/receive.py index dee87434..24fcdfae 100755 --- a/python/receive.py +++ b/python/receive.py @@ -8,7 +8,7 @@ def main(): channel.queue_declare(queue='hello') def callback(ch, method, properties, body): - print(" [x] Received %r" % body.decode()) + print(f" [x] Received {body.decode()}") channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) From e1795214522bc5427f6644c8f8aee8860145a61c Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:10 -0400 Subject: [PATCH 290/659] Update receive_logs.py --- python/receive_logs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/receive_logs.py b/python/receive_logs.py index 5349c281..36849551 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -14,7 +14,7 @@ def main(): channel.queue_bind(exchange='logs', queue=queue_name) def callback(ch, method, properties, body): - print(" [x] %r" % body.decode()) + print(f" [x] {body.decode()}") print(' [*] Waiting for logs. To exit press CTRL+C') channel.basic_consume( From 7b998c8d2334e7d0cbb6d09f306a5c5895d18852 Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:12 -0400 Subject: [PATCH 291/659] Update receive_logs_direct.py --- python/receive_logs_direct.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index 725c0936..2eb713f1 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -24,7 +24,7 @@ def main(): def callback(ch, method, properties, body): - print(" [x] %r:%r" % (method.routing_key, body.decode())) + print(f" [x] {method.routing_key}:{body.decode()}") channel.basic_consume( From 1d31115b31f80121655fac7f62834ed086a3fb9f Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:14 -0400 Subject: [PATCH 292/659] Update receive_logs_topic.py --- python/receive_logs_topic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index 52e3932a..b454819e 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -24,7 +24,7 @@ def main(): def callback(ch, method, properties, body): - print(" [x] %r:%r" % (method.routing_key, body.decode())) + print(f" [x] {method.routing_key}:{body.decode()}") channel.basic_consume( From a2b6bab6e7984342c1d977cd2de7564b49fa9864 Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:17 -0400 Subject: [PATCH 293/659] Update rpc_client.py --- python/rpc_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/rpc_client.py b/python/rpc_client.py index 74f56652..466d2f90 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -45,4 +45,4 @@ def call(self, n): print(" [x] Requesting fib(30)") response = fibonacci_rpc.call(30) -print(" [.] Got %r" % response) +print(f" [.] Got {response}") From 107ba873f49c5ce6a4723da730bd3479766b034a Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:19 -0400 Subject: [PATCH 294/659] Update rpc_server.py --- python/rpc_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/rpc_server.py b/python/rpc_server.py index d5eb4ec3..20d890da 100755 --- a/python/rpc_server.py +++ b/python/rpc_server.py @@ -21,7 +21,7 @@ def fib(n): def on_request(ch, method, props, body): n = int(body) - print(" [.] fib(%s)" % n) + print(f" [.] fib({n})") response = fib(n) ch.basic_publish(exchange='', From e5822232cf65442f4937d24dd1d4e897dcb0dfdd Mon Sep 17 00:00:00 2001 From: Gerardo Tatzati Date: Thu, 27 Jul 2023 09:40:20 -0400 Subject: [PATCH 295/659] Update worker.py --- python/worker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/worker.py b/python/worker.py index 472a65ff..253caff1 100755 --- a/python/worker.py +++ b/python/worker.py @@ -11,7 +11,7 @@ def callback(ch, method, properties, body): - print(" [x] Received %r" % body.decode()) + print(f" [x] Received {body.decode()}") time.sleep(body.count(b'.')) print(" [x] Done") ch.basic_ack(delivery_tag=method.delivery_tag) From bdf00c9484b711bfc3d566ff7162782743ffccf1 Mon Sep 17 00:00:00 2001 From: Simon Unge Date: Mon, 7 Aug 2023 22:42:40 -0700 Subject: [PATCH 296/659] Update amqp client version --- erlang/rebar.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erlang/rebar.config b/erlang/rebar.config index 9bbaad68..79835e9f 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1 +1 @@ -{deps, [{amqp_client, "3.9.8"}]}. +{deps, [{amqp_client, "3.12.2"}]}. From 7a95f69e017594d899042514c5c58235fceb2264 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sun, 20 Aug 2023 10:47:14 +0400 Subject: [PATCH 297/659] Elixir: update RabbitMQ client to 3.3 To match rabbitmq/rabbitmq-website#1714 by @mkumm --- elixir/mix.exs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/elixir/mix.exs b/elixir/mix.exs index e3b725c7..44fcd6c0 100644 --- a/elixir/mix.exs +++ b/elixir/mix.exs @@ -3,8 +3,8 @@ defmodule RabbitmqTutorials.Mixfile do def project do [app: :rabbitmq_tutorials, - version: "0.0.1", - elixir: "~> 1.1", + version: "1.0.0", + elixir: "~> 1.5", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps()] @@ -28,7 +28,7 @@ defmodule RabbitmqTutorials.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:amqp, "~> 1.1"}, + {:amqp, "~> 3.3"}, ] end end From 827645eb6508b56c71e407655565ef045085ecf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 18:08:17 +0000 Subject: [PATCH 298/659] Bump rustls-webpki from 0.100.1 to 0.100.2 in /rust-lapin Bumps [rustls-webpki](https://github.com/rustls/webpki) from 0.100.1 to 0.100.2. - [Release notes](https://github.com/rustls/webpki/releases) - [Commits](https://github.com/rustls/webpki/compare/v/0.100.1...v/0.100.2) --- updated-dependencies: - dependency-name: rustls-webpki dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 3dab852b..6954b8d5 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -975,9 +975,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.100.1" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" dependencies = [ "ring", "untrusted", From cc2b44998482d791cff185b4c0d8c051007d010a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 18:27:22 +0000 Subject: [PATCH 299/659] Bump semver from 5.7.1 to 5.7.2 in /javascript-nodejs Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] --- javascript-nodejs/package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index cdf84714..e9c43104 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -8,7 +8,7 @@ "name": "rabbitmq-node-tutorial", "version": "1.0.0", "dependencies": { - "amqplib": "latest", + "amqplib": "*", "js-beautify": "^1.9.1", "url-parse": ">=1.5.9" } @@ -262,9 +262,9 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } From cc2110ef4c23fac683d510e42bdb39ed5c9dcbce Mon Sep 17 00:00:00 2001 From: Xiangzhuang Shen Date: Fri, 22 Sep 2023 15:40:12 +0800 Subject: [PATCH 300/659] fix:python pep8 --- python/emit_log.py | 3 ++- python/emit_log_direct.py | 3 ++- python/emit_log_topic.py | 3 ++- python/new_task.py | 3 ++- python/receive.py | 6 +++++- python/receive_logs.py | 5 ++++- python/receive_logs_direct.py | 9 +++++---- python/receive_logs_topic.py | 9 +++++---- python/rpc_client.py | 3 ++- python/rpc_server.py | 2 +- python/worker.py | 3 ++- 11 files changed, 32 insertions(+), 17 deletions(-) diff --git a/python/emit_log.py b/python/emit_log.py index 063b7618..16897769 100755 --- a/python/emit_log.py +++ b/python/emit_log.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import sys +import pika + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index 7bed79a4..0583ddfd 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import sys +import pika + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() diff --git a/python/emit_log_topic.py b/python/emit_log_topic.py index b21e66f3..7daea7fa 100755 --- a/python/emit_log_topic.py +++ b/python/emit_log_topic.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import sys +import pika + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() diff --git a/python/new_task.py b/python/new_task.py index 47c217ef..a825926b 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import sys +import pika + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() diff --git a/python/receive.py b/python/receive.py index 24fcdfae..85604372 100755 --- a/python/receive.py +++ b/python/receive.py @@ -1,5 +1,8 @@ #!/usr/bin/env python -import pika, sys, os +import os +import pika +import sys + def main(): connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) @@ -15,6 +18,7 @@ def callback(ch, method, properties, body): print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() + if __name__ == '__main__': try: main() diff --git a/python/receive_logs.py b/python/receive_logs.py index 36849551..de9dcb76 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -1,5 +1,8 @@ #!/usr/bin/env python -import pika, sys, os +import os +import pika +import sys + def main(): connection = pika.BlockingConnection( diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index 2eb713f1..274e9ceb 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -1,9 +1,12 @@ #!/usr/bin/env python -import pika, sys, os +import os +import pika +import sys + def main(): connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.exchange_declare(exchange='direct_logs', exchange_type='direct') @@ -22,11 +25,9 @@ def main(): print(' [*] Waiting for logs. To exit press CTRL+C') - def callback(ch, method, properties, body): print(f" [x] {method.routing_key}:{body.decode()}") - channel.basic_consume( queue=queue_name, on_message_callback=callback, auto_ack=True) diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index b454819e..9f2b1754 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -1,9 +1,12 @@ #!/usr/bin/env python -import pika, sys, os +import os +import pika +import sys + def main(): connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.exchange_declare(exchange='topic_logs', exchange_type='topic') @@ -22,11 +25,9 @@ def main(): print(' [*] Waiting for logs. To exit press CTRL+C') - def callback(ch, method, properties, body): print(f" [x] {method.routing_key}:{body.decode()}") - channel.basic_consume( queue=queue_name, on_message_callback=callback, auto_ack=True) diff --git a/python/rpc_client.py b/python/rpc_client.py index 466d2f90..b3b12bb5 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import uuid +import pika + class FibonacciRpcClient(object): diff --git a/python/rpc_server.py b/python/rpc_server.py index 20d890da..4bae2d18 100755 --- a/python/rpc_server.py +++ b/python/rpc_server.py @@ -26,7 +26,7 @@ def on_request(ch, method, props, body): ch.basic_publish(exchange='', routing_key=props.reply_to, - properties=pika.BasicProperties(correlation_id = \ + properties=pika.BasicProperties(correlation_id= \ props.correlation_id), body=str(response)) ch.basic_ack(delivery_tag=method.delivery_tag) diff --git a/python/worker.py b/python/worker.py index 253caff1..1cc15de2 100755 --- a/python/worker.py +++ b/python/worker.py @@ -1,7 +1,8 @@ #!/usr/bin/env python -import pika import time +import pika + connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() From 78a4fb2f9304745bb7884f6874c588d3f55f09c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 18:45:22 +0000 Subject: [PATCH 301/659] Bump rustix from 0.37.19 to 0.37.25 in /rust-lapin Bumps [rustix](https://github.com/bytecodealliance/rustix) from 0.37.19 to 0.37.25. - [Release notes](https://github.com/bytecodealliance/rustix/releases) - [Commits](https://github.com/bytecodealliance/rustix/compare/v0.37.19...v0.37.25) --- updated-dependencies: - dependency-name: rustix dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 6954b8d5..186ded75 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.19" +version = "0.37.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035" dependencies = [ "bitflags", "errno", From f4c2d129b9f6e7fd99d5ede86a7f19d476876dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C5=ABnas=20Dronga?= Date: Thu, 19 Oct 2023 20:46:26 +0300 Subject: [PATCH 302/659] fix: improve php library tutorial --- php/README.md | 10 +++++----- php/composer.json | 2 +- php/receive.php | 9 +++++---- php/receive_logs.php | 9 +++++---- php/receive_logs_direct.php | 9 +++++---- php/receive_logs_topic.php | 9 +++++---- php/rpc_client.php | 2 +- php/rpc_server.php | 13 +++++++------ php/worker.php | 13 +++++++------ 9 files changed, 41 insertions(+), 35 deletions(-) diff --git a/php/README.md b/php/README.md index 366ab927..e1dc73ff 100644 --- a/php/README.md +++ b/php/README.md @@ -7,12 +7,12 @@ To successfully use the examples you will need a running RabbitMQ server. ## Requirements -### PHP 7.0+ +### PHP 7.2+ -You need `PHP 7.0` and `php-amqplib`. To get these +You need `PHP 7.2` and `php-amqplib`. To get these dependencies on Ubuntu type: - sudo apt-get install git-core php5-cli + sudo apt-get install git-core php-cli ### Composer @@ -27,11 +27,11 @@ Then you can install `php-amqplib` using [Composer](https://getcomposer.org). To do that install Composer and add it to your path, then run the following command inside this project folder: - composer.phar install + php composer.phar install Or you can require it to the existing project using a command: - composer.phar require php-amqplib/php-amqplib + php composer.phar require php-amqplib/php-amqplib ## Code diff --git a/php/composer.json b/php/composer.json index d12e9460..a76e28f9 100644 --- a/php/composer.json +++ b/php/composer.json @@ -1,5 +1,5 @@ { "require": { - "php-amqplib/php-amqplib": ">=3.0" + "php-amqplib/php-amqplib": "^3.2" } } diff --git a/php/receive.php b/php/receive.php index 15c7c8f4..f4998a5e 100644 --- a/php/receive.php +++ b/php/receive.php @@ -11,15 +11,16 @@ echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] Received ', $msg->body, "\n"; + echo ' [x] Received ', $msg->getBody(), "\n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> diff --git a/php/receive_logs.php b/php/receive_logs.php index 1ce9471a..00e5e4d8 100644 --- a/php/receive_logs.php +++ b/php/receive_logs.php @@ -15,15 +15,16 @@ echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] ', $msg->body, "\n"; + echo ' [x] ', $msg->getBody(), "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> diff --git a/php/receive_logs_direct.php b/php/receive_logs_direct.php index 63a41758..6d5517d0 100644 --- a/php/receive_logs_direct.php +++ b/php/receive_logs_direct.php @@ -23,15 +23,16 @@ echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n"; + echo ' [x] ', $msg->getRoutingKey(), ':', $msg->getBody(), "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> diff --git a/php/receive_logs_topic.php b/php/receive_logs_topic.php index 6d5d4c89..a198e7f4 100644 --- a/php/receive_logs_topic.php +++ b/php/receive_logs_topic.php @@ -23,15 +23,16 @@ echo " [*] Waiting for logs. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n"; + echo ' [x] ', $msg->getRoutingKey(), ':', $msg->getBody(), "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> diff --git a/php/rpc_client.php b/php/rpc_client.php index 857c836b..d967de1b 100644 --- a/php/rpc_client.php +++ b/php/rpc_client.php @@ -45,7 +45,7 @@ public function __construct() public function onResponse($rep) { if ($rep->get('correlation_id') == $this->corr_id) { - $this->response = $rep->body; + $this->response = $rep->getBody(); } } diff --git a/php/rpc_server.php b/php/rpc_server.php index 1ebfc7fd..9d82c0d4 100644 --- a/php/rpc_server.php +++ b/php/rpc_server.php @@ -22,7 +22,7 @@ function fib($n) echo " [x] Awaiting RPC requests\n"; $callback = function ($req) { - $n = intval($req->body); + $n = intval($req->getBody()); echo ' [.] fib(', $n, ")\n"; $msg = new AMQPMessage( @@ -30,7 +30,7 @@ function fib($n) array('correlation_id' => $req->get('correlation_id')) ); - $req->delivery_info['channel']->basic_publish( + $req->getChannel()->basic_publish( $msg, '', $req->get('reply_to') @@ -38,13 +38,14 @@ function fib($n) $req->ack(); }; -$channel->basic_qos(null, 1, null); +$channel->basic_qos(null, 1, false); $channel->basic_consume('rpc_queue', '', false, false, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> diff --git a/php/worker.php b/php/worker.php index cbd6be81..6974fdd9 100644 --- a/php/worker.php +++ b/php/worker.php @@ -11,19 +11,20 @@ echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { - echo ' [x] Received ', $msg->body, "\n"; - sleep(substr_count($msg->body, '.')); + echo ' [x] Received ', $msg->getBody(), "\n"; + sleep(substr_count($msg->getBody(), '.')); echo " [x] Done\n"; $msg->ack(); }; -$channel->basic_qos(null, 1, null); +$channel->basic_qos(null, 1, false); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); -while ($channel->is_open()) { - $channel->wait(); +try { + $channel->consume(); +} catch (\Throwable $exception) { + echo $exception->getMessage(); } $channel->close(); $connection->close(); -?> From 68da8476160615e012717fdbd367984a5bba8713 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 01:54:09 +0000 Subject: [PATCH 303/659] Bump com.rabbitmq:amqp-client from 5.16.0 to 5.18.0 in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.16.0 to 5.18.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.16.0...v5.18.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c9377c48..4105e4c5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.16.0 + 5.18.0 org.slf4j From 4e87f189f679aa5bf15f1975b2b1fb342930a631 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 01:55:03 +0000 Subject: [PATCH 304/659] Bump com.rabbitmq:amqp-client from 5.5.1 to 5.18.0 in /soapui Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.5.1 to 5.18.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.5.1...v5.18.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- soapui/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soapui/pom.xml b/soapui/pom.xml index 02dea6b9..9849ce8f 100644 --- a/soapui/pom.xml +++ b/soapui/pom.xml @@ -37,7 +37,7 @@ com.rabbitmq amqp-client - 5.5.1 + 5.18.0 From 8497c5f6e597309e254d2b7416da730fc86f4bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Ferr=C3=A3o=20Feodrippe?= Date: Thu, 7 Dec 2023 05:44:30 -0300 Subject: [PATCH 305/659] fix: pika version 1.3.2 - When tested with most recent pika's version 1.3.2, spec didn't exists. Found pika.DeliveryMode.Persistent instead. --- python/new_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/new_task.py b/python/new_task.py index a825926b..f229e8a4 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -15,7 +15,7 @@ routing_key='task_queue', body=message, properties=pika.BasicProperties( - delivery_mode=pika.spec.PERSISTENT_DELIVERY_MODE, + delivery_mode=pika.DeliveryMode.Persistent, )) print(f" [x] Sent {message}") connection.close() From 336420b5ee69b0debe9ea884c9c9067bfdb338c6 Mon Sep 17 00:00:00 2001 From: mrKazzila Date: Tue, 9 Jan 2024 20:46:04 +0300 Subject: [PATCH 306/659] style: change double quotes to single quotes (where possible) style: sort imports & format parameters onto separate lines for better clarity Format all python files using `black` --- python/emit_log.py | 10 ++++++---- python/emit_log_direct.py | 15 ++++++++++----- python/emit_log_topic.py | 15 ++++++++++----- python/new_task.py | 15 +++++++++------ python/receive.py | 21 ++++++++++++++------- python/receive_logs.py | 23 ++++++++++++++--------- python/receive_logs_direct.py | 26 +++++++++++++++++--------- python/receive_logs_topic.py | 26 +++++++++++++++++--------- python/rpc_client.py | 16 +++++++++------- python/rpc_server.py | 19 ++++++++++--------- python/send.py | 8 +++++--- python/worker.py | 11 ++++++----- 12 files changed, 127 insertions(+), 78 deletions(-) diff --git a/python/emit_log.py b/python/emit_log.py index 16897769..5bd35d1f 100755 --- a/python/emit_log.py +++ b/python/emit_log.py @@ -4,12 +4,14 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.exchange_declare(exchange='logs', exchange_type='fanout') +channel.exchange_declare(exchange="logs", exchange_type="fanout") -message = ' '.join(sys.argv[1:]) or "info: Hello World!" -channel.basic_publish(exchange='logs', routing_key='', body=message) +message = " ".join(sys.argv[1:]) or "info: Hello World!" +channel.basic_publish(exchange="logs", routing_key="", body=message) print(f" [x] Sent {message}") + connection.close() diff --git a/python/emit_log_direct.py b/python/emit_log_direct.py index 0583ddfd..dfeca104 100755 --- a/python/emit_log_direct.py +++ b/python/emit_log_direct.py @@ -4,14 +4,19 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.exchange_declare(exchange='direct_logs', exchange_type='direct') +channel.exchange_declare(exchange="direct_logs", exchange_type="direct") -severity = sys.argv[1] if len(sys.argv) > 2 else 'info' -message = ' '.join(sys.argv[2:]) or 'Hello World!' +severity = sys.argv[1] if len(sys.argv) > 2 else "info" +message = " ".join(sys.argv[2:]) or "Hello World!" channel.basic_publish( - exchange='direct_logs', routing_key=severity, body=message) + exchange="direct_logs", + routing_key=severity, + body=message, +) print(f" [x] Sent {severity}:{message}") + connection.close() diff --git a/python/emit_log_topic.py b/python/emit_log_topic.py index 7daea7fa..8c9d0fc2 100755 --- a/python/emit_log_topic.py +++ b/python/emit_log_topic.py @@ -4,14 +4,19 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.exchange_declare(exchange='topic_logs', exchange_type='topic') +channel.exchange_declare(exchange="topic_logs", exchange_type="topic") -routing_key = sys.argv[1] if len(sys.argv) > 2 else 'anonymous.info' -message = ' '.join(sys.argv[2:]) or 'Hello World!' +routing_key = sys.argv[1] if len(sys.argv) > 2 else "anonymous.info" +message = " ".join(sys.argv[2:]) or "Hello World!" channel.basic_publish( - exchange='topic_logs', routing_key=routing_key, body=message) + exchange="topic_logs", + routing_key=routing_key, + body=message, +) print(f" [x] Sent {routing_key}:{message}") + connection.close() diff --git a/python/new_task.py b/python/new_task.py index f229e8a4..e7acf166 100755 --- a/python/new_task.py +++ b/python/new_task.py @@ -4,18 +4,21 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.queue_declare(queue='task_queue', durable=True) +channel.queue_declare(queue="task_queue", durable=True) -message = ' '.join(sys.argv[1:]) or "Hello World!" +message = " ".join(sys.argv[1:]) or "Hello World!" channel.basic_publish( - exchange='', - routing_key='task_queue', + exchange="", + routing_key="task_queue", body=message, properties=pika.BasicProperties( delivery_mode=pika.DeliveryMode.Persistent, - )) + ), +) print(f" [x] Sent {message}") + connection.close() diff --git a/python/receive.py b/python/receive.py index 85604372..18ca97f4 100755 --- a/python/receive.py +++ b/python/receive.py @@ -1,29 +1,36 @@ #!/usr/bin/env python import os -import pika import sys +import pika + def main(): - connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + connection = pika.BlockingConnection( + pika.ConnectionParameters(host="localhost"), + ) channel = connection.channel() - channel.queue_declare(queue='hello') + channel.queue_declare(queue="hello") def callback(ch, method, properties, body): print(f" [x] Received {body.decode()}") - channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) + channel.basic_consume( + queue="hello", + on_message_callback=callback, + auto_ack=True, + ) - print(' [*] Waiting for messages. To exit press CTRL+C') + print(" [*] Waiting for messages. To exit press CTRL+C") channel.start_consuming() -if __name__ == '__main__': +if __name__ == "__main__": try: main() except KeyboardInterrupt: - print('Interrupted') + print("Interrupted") try: sys.exit(0) except SystemExit: diff --git a/python/receive_logs.py b/python/receive_logs.py index de9dcb76..c48f3aac 100755 --- a/python/receive_logs.py +++ b/python/receive_logs.py @@ -1,36 +1,41 @@ #!/usr/bin/env python import os -import pika import sys +import pika + def main(): connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), + ) channel = connection.channel() - channel.exchange_declare(exchange='logs', exchange_type='fanout') + channel.exchange_declare(exchange="logs", exchange_type="fanout") - result = channel.queue_declare(queue='', exclusive=True) + result = channel.queue_declare(queue="", exclusive=True) queue_name = result.method.queue - channel.queue_bind(exchange='logs', queue=queue_name) + channel.queue_bind(exchange="logs", queue=queue_name) def callback(ch, method, properties, body): print(f" [x] {body.decode()}") - print(' [*] Waiting for logs. To exit press CTRL+C') + print(" [*] Waiting for logs. To exit press CTRL+C") channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) + queue=queue_name, + on_message_callback=callback, + auto_ack=True, + ) channel.start_consuming() -if __name__ == '__main__': +if __name__ == "__main__": try: main() except KeyboardInterrupt: - print('Interrupted') + print("Interrupted") try: sys.exit(0) except SystemExit: diff --git a/python/receive_logs_direct.py b/python/receive_logs_direct.py index 274e9ceb..fbbce12f 100755 --- a/python/receive_logs_direct.py +++ b/python/receive_logs_direct.py @@ -1,17 +1,19 @@ #!/usr/bin/env python import os -import pika import sys +import pika + def main(): connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), + ) channel = connection.channel() - channel.exchange_declare(exchange='direct_logs', exchange_type='direct') + channel.exchange_declare(exchange="direct_logs", exchange_type="direct") - result = channel.queue_declare(queue='', exclusive=True) + result = channel.queue_declare(queue="", exclusive=True) queue_name = result.method.queue severities = sys.argv[1:] @@ -21,24 +23,30 @@ def main(): for severity in severities: channel.queue_bind( - exchange='direct_logs', queue=queue_name, routing_key=severity) + exchange="direct_logs", + queue=queue_name, + routing_key=severity, + ) - print(' [*] Waiting for logs. To exit press CTRL+C') + print(" [*] Waiting for logs. To exit press CTRL+C") def callback(ch, method, properties, body): print(f" [x] {method.routing_key}:{body.decode()}") channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) + queue=queue_name, + on_message_callback=callback, + auto_ack=True, + ) channel.start_consuming() -if __name__ == '__main__': +if __name__ == "__main__": try: main() except KeyboardInterrupt: - print('Interrupted') + print("Interrupted") try: sys.exit(0) except SystemExit: diff --git a/python/receive_logs_topic.py b/python/receive_logs_topic.py index 9f2b1754..bf5b3b4f 100755 --- a/python/receive_logs_topic.py +++ b/python/receive_logs_topic.py @@ -1,17 +1,19 @@ #!/usr/bin/env python import os -import pika import sys +import pika + def main(): connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), + ) channel = connection.channel() - channel.exchange_declare(exchange='topic_logs', exchange_type='topic') + channel.exchange_declare(exchange="topic_logs", exchange_type="topic") - result = channel.queue_declare(queue='', exclusive=True) + result = channel.queue_declare(queue="", exclusive=True) queue_name = result.method.queue binding_keys = sys.argv[1:] @@ -21,24 +23,30 @@ def main(): for binding_key in binding_keys: channel.queue_bind( - exchange='topic_logs', queue=queue_name, routing_key=binding_key) + exchange="topic_logs", + queue=queue_name, + routing_key=binding_key, + ) - print(' [*] Waiting for logs. To exit press CTRL+C') + print(" [*] Waiting for logs. To exit press CTRL+C") def callback(ch, method, properties, body): print(f" [x] {method.routing_key}:{body.decode()}") channel.basic_consume( - queue=queue_name, on_message_callback=callback, auto_ack=True) + queue=queue_name, + on_message_callback=callback, + auto_ack=True, + ) channel.start_consuming() -if __name__ == '__main__': +if __name__ == "__main__": try: main() except KeyboardInterrupt: - print('Interrupted') + print("Interrupted") try: sys.exit(0) except SystemExit: diff --git a/python/rpc_client.py b/python/rpc_client.py index b3b12bb5..2ccc2469 100755 --- a/python/rpc_client.py +++ b/python/rpc_client.py @@ -5,20 +5,21 @@ class FibonacciRpcClient(object): - def __init__(self): self.connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), + ) self.channel = self.connection.channel() - result = self.channel.queue_declare(queue='', exclusive=True) + result = self.channel.queue_declare(queue="", exclusive=True) self.callback_queue = result.method.queue self.channel.basic_consume( queue=self.callback_queue, on_message_callback=self.on_response, - auto_ack=True) + auto_ack=True, + ) self.response = None self.corr_id = None @@ -31,13 +32,14 @@ def call(self, n): self.response = None self.corr_id = str(uuid.uuid4()) self.channel.basic_publish( - exchange='', - routing_key='rpc_queue', + exchange="", + routing_key="rpc_queue", properties=pika.BasicProperties( reply_to=self.callback_queue, correlation_id=self.corr_id, ), - body=str(n)) + body=str(n), + ) self.connection.process_data_events(time_limit=None) return int(self.response) diff --git a/python/rpc_server.py b/python/rpc_server.py index 4bae2d18..e4dbccd6 100755 --- a/python/rpc_server.py +++ b/python/rpc_server.py @@ -2,11 +2,11 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) - + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.queue_declare(queue='rpc_queue') +channel.queue_declare(queue="rpc_queue") def fib(n): @@ -24,16 +24,17 @@ def on_request(ch, method, props, body): print(f" [.] fib({n})") response = fib(n) - ch.basic_publish(exchange='', - routing_key=props.reply_to, - properties=pika.BasicProperties(correlation_id= \ - props.correlation_id), - body=str(response)) + ch.basic_publish( + exchange="", + routing_key=props.reply_to, + properties=pika.BasicProperties(correlation_id=props.correlation_id), + body=str(response), + ) ch.basic_ack(delivery_tag=method.delivery_tag) channel.basic_qos(prefetch_count=1) -channel.basic_consume(queue='rpc_queue', on_message_callback=on_request) +channel.basic_consume(queue="rpc_queue", on_message_callback=on_request) print(" [x] Awaiting RPC requests") channel.start_consuming() diff --git a/python/send.py b/python/send.py index 0ebbf696..dcaee6ac 100755 --- a/python/send.py +++ b/python/send.py @@ -2,11 +2,13 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.queue_declare(queue='hello') +channel.queue_declare(queue="hello") -channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') +channel.basic_publish(exchange="", routing_key="hello", body="Hello World!") print(" [x] Sent 'Hello World!'") + connection.close() diff --git a/python/worker.py b/python/worker.py index 1cc15de2..7e44fea3 100755 --- a/python/worker.py +++ b/python/worker.py @@ -4,21 +4,22 @@ import pika connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost')) + pika.ConnectionParameters(host="localhost"), +) channel = connection.channel() -channel.queue_declare(queue='task_queue', durable=True) -print(' [*] Waiting for messages. To exit press CTRL+C') +channel.queue_declare(queue="task_queue", durable=True) +print(" [*] Waiting for messages. To exit press CTRL+C") def callback(ch, method, properties, body): print(f" [x] Received {body.decode()}") - time.sleep(body.count(b'.')) + time.sleep(body.count(b".")) print(" [x] Done") ch.basic_ack(delivery_tag=method.delivery_tag) channel.basic_qos(prefetch_count=1) -channel.basic_consume(queue='task_queue', on_message_callback=callback) +channel.basic_consume(queue="task_queue", on_message_callback=callback) channel.start_consuming() From 1d9d896ee3df978f8114bcb8cdbd473baa3ca369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:45:47 +0000 Subject: [PATCH 307/659] Bump mio from 0.8.6 to 0.8.11 in /rust-amqprs Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.6 to 0.8.11. - [Release notes](https://github.com/tokio-rs/mio/releases) - [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/mio/compare/v0.8.6...v0.8.11) --- updated-dependencies: - dependency-name: mio dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-amqprs/Cargo.lock | 94 +++++++----------------------------------- 1 file changed, 14 insertions(+), 80 deletions(-) diff --git a/rust-amqprs/Cargo.lock b/rust-amqprs/Cargo.lock index 5a76ccc7..7b2d45e4 100644 --- a/rust-amqprs/Cargo.lock +++ b/rust-amqprs/Cargo.lock @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.144" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "log" @@ -80,14 +80,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -187,7 +187,7 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -235,37 +235,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] @@ -274,93 +250,51 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.0" From c82d42902a1d2833b1e37b055a1e0431cef0e515 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:46:21 +0000 Subject: [PATCH 308/659] Bump mio from 0.8.6 to 0.8.11 in /rust-lapin Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.6 to 0.8.11. - [Release notes](https://github.com/tokio-rs/mio/releases) - [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/mio/compare/v0.8.6...v0.8.11) --- updated-dependencies: - dependency-name: mio dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 186ded75..e56a4246 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -644,9 +644,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.144" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linux-raw-sys" @@ -687,14 +687,14 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] From 67160290d20a974da549f72c92a696459cc521fd Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Wed, 17 Apr 2024 10:36:29 +0200 Subject: [PATCH 309/659] update go version Signed-off-by: Gabriele Santomaggio --- go/go.mod | 2 +- go/go.sum | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/go/go.mod b/go/go.mod index 538d97cf..31d7a2c1 100644 --- a/go/go.mod +++ b/go/go.mod @@ -2,4 +2,4 @@ module github.com/rabbitmq/rabbitmq-tutorials go 1.17 -require github.com/rabbitmq/amqp091-go v1.4.0 +require github.com/rabbitmq/amqp091-go v1.9.0 diff --git a/go/go.sum b/go/go.sum index e8a0ad5c..de48a7f8 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,4 +1,5 @@ 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/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= @@ -7,10 +8,16 @@ github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf h1:EBDKctNpOEf github.com/rabbitmq/amqp091-go v0.0.0-20210609115249-03e0554a59cf/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= github.com/rabbitmq/amqp091-go v1.4.0 h1:T2G+J9W9OY4p64Di23J6yH7tOkMocgnESvYeBjuG9cY= github.com/rabbitmq/amqp091-go v1.4.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg= +github.com/rabbitmq/amqp091-go v1.9.0 h1:qrQtyzB4H8BQgEuJwhmVQqVHB9O4+MNDJCCAcpc3Aoo= +github.com/rabbitmq/amqp091-go v1.9.0/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 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/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -39,3 +46,4 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T 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.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= From 6dadc48ae2dd073b9b2839be16d8c4dbf496ffbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 19:48:01 +0000 Subject: [PATCH 310/659] Bump rustls from 0.21.1 to 0.21.11 in /rust-lapin Bumps [rustls](https://github.com/rustls/rustls) from 0.21.1 to 0.21.11. - [Release notes](https://github.com/rustls/rustls/releases) - [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md) - [Commits](https://github.com/rustls/rustls/compare/v/0.21.1...v/0.21.11) --- updated-dependencies: - dependency-name: rustls dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 50 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index e56a4246..b3af4088 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -909,11 +909,25 @@ dependencies = [ "libc", "once_cell", "spin 0.5.2", - "untrusted", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.37.25" @@ -930,13 +944,13 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.1" +version = "0.21.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" +checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" dependencies = [ "log", - "ring", - "rustls-webpki", + "ring 0.17.3", + "rustls-webpki 0.101.7", "sct", ] @@ -949,7 +963,7 @@ dependencies = [ "log", "rustls", "rustls-native-certs", - "rustls-webpki", + "rustls-webpki 0.100.2", ] [[package]] @@ -979,8 +993,18 @@ version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.3", + "untrusted 0.9.0", ] [[package]] @@ -1010,8 +1034,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -1263,6 +1287,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.3.1" From 34eed7bd723a610e3ab45a0bdfb77c4391e8c8f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 15:36:35 +0200 Subject: [PATCH 311/659] Bump Java client version to 5.21.0 --- java/README.md | 26 +++++++++++++------------- java/recompile.sh | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/java/README.md b/java/README.md index 5d9f1761..0896b9ef 100644 --- a/java/README.md +++ b/java/README.md @@ -10,16 +10,16 @@ To successfully use the examples you will need a RabbitMQ node running locally. You'll need to download the following JAR files from Maven Central: - * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0/amqp-client-5.16.0.jar) - * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar) - * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.36/slf4j-simple-1.7.36.jar) + * [RabbitMQ Java Client](https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.21.0/amqp-client-5.21.0.jar) + * [SLF4J API](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.13/slf4j-api-2.0.13.jar) + * [SLF4J Simple](https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.13/slf4j-simple-2.0.13.jar) For example, with `wget`: ``` shell -wget https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0/amqp-client-5.16.0.jar -wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar -wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.36/slf4j-simple-1.7.36.jar +wget https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.21.0/amqp-client-5.21.0.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.13/slf4j-api-2.0.13.jar +wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.13/slf4j-simple-2.0.13.jar ``` Copy those files in your working directory, along the tutorials Java files. @@ -30,14 +30,14 @@ To run them you'll need all the dependencies, see examples below. You can set an environment variable for the jar files on the classpath e.g. ``` -export CP=.:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar +export CP=.:amqp-client-5.21.0.jar:slf4j-api-2.0.13.jar:slf4j-simple-2.0.13.jar java -cp $CP Send ``` On Windows, use a semicolon instead of a colon to separate items in the classpath: ``` -set CP=.;amqp-client-5.16.0.jar;slf4j-api-1.7.36.jar;slf4j-simple-1.7.36.jar +set CP=.;amqp-client-5.21.0.jar;slf4j-api-2.0.13.jar;slf4j-simple-2.0.13.jar java -cp %CP% Send ``` @@ -46,19 +46,19 @@ java -cp %CP% Send #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java.html): ``` -javac -cp amqp-client-5.16.0.jar Send.java Recv.java +javac -cp amqp-client-5.21.0.jar Send.java Recv.java # terminal tab 1 -java -cp .:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar Recv +java -cp .:amqp-client-5.21.0.jar:slf4j-api-2.0.13.jar:slf4j-simple-2.0.13.jar Recv # terminal tab 2 -java -cp .:amqp-client-5.16.0.jar:slf4j-api-1.7.36.jar:slf4j-simple-1.7.36.jar Send +java -cp .:amqp-client-5.21.0.jar:slf4j-api-2.0.13.jar:slf4j-simple-2.0.13.jar Send ``` #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): ``` -javac -cp amqp-client-5.16.0.jar NewTask.java Worker.java +javac -cp $CP NewTask.java Worker.java # terminal tab 1 java -cp $CP NewTask @@ -70,7 +70,7 @@ java -cp $CP Worker #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) ``` shell -javac -cp amqp-client-5.16.0.jar EmitLog.java ReceiveLogs.java +javac -cp $CP EmitLog.java ReceiveLogs.java # terminal tab 1 java -cp $CP ReceiveLogs diff --git a/java/recompile.sh b/java/recompile.sh index e3ff2fd7..eb5509c6 100755 --- a/java/recompile.sh +++ b/java/recompile.sh @@ -1,3 +1,3 @@ #!/bin/sh -javac -cp .:amqp-client-5.7.1.jar:slf4j-api-1.7.26.jar:slf4j-simple-1.7.26.jar *.java +javac -cp .:amqp-client-5.21.0.jar:slf4j-api-2.0.13.jar:slf4j-simple-2.0.13.jar *.java From c7e8625b89d4895d4be40f6a786c21fe616624a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 15:41:51 +0200 Subject: [PATCH 312/659] Configure dependabot for Java projects --- .github/dependabot.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..27a79d07 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,23 @@ +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "maven" + directory: "/java-mvn" + schedule: + interval: "daily" + open-pull-requests-limit: 20 + target-branch: "main" + - package-ecosystem: "maven" + directory: "/spring-amqp" + schedule: + interval: "daily" + open-pull-requests-limit: 20 + target-branch: "main" + - package-ecosystem: "gradle" + directory: "/java-gradle" + schedule: + interval: "daily" + open-pull-requests-limit: 20 + target-branch: "main" + From f89d4a800f2fb9febe834d13d562ed39919787de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:22 +0000 Subject: [PATCH 313/659] Bump org.slf4j:slf4j-simple from 2.0.5 to 2.0.13 in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.5 to 2.0.13. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 14a60dff..b023e9a6 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.16.0' - implementation 'org.slf4j:slf4j-simple:2.0.5' + implementation 'org.slf4j:slf4j-simple:2.0.13' testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'org.mockito:mockito-core:4.3.1' testImplementation 'io.dropwizard.metrics:metrics-core:3.1.2' From bb3f69c4b7d4168b7c8250746cdbde59141cb8ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:27 +0000 Subject: [PATCH 314/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 2.1.1.RELEASE to 3.2.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v2.1.1.RELEASE...v3.2.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 9fd187e8..ff96de67 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.1.RELEASE + 3.2.5 From 6346a955e5d39350a001639c4bf12b278f7dd3b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:31 +0000 Subject: [PATCH 315/659] Bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.15 to 4.2.25. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.15...v4.2.25) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..c8638564 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ io.dropwizard.metrics metrics-core - 4.2.15 + 4.2.25 test From 26d3ea8e420bc5a3859c126d7af3e739e5d9f3bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:36 +0000 Subject: [PATCH 316/659] Bump org.junit.jupiter:junit-jupiter from 5.9.2 to 5.10.2 in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.9.2 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..43f10a71 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -31,7 +31,7 @@ org.junit.jupiter junit-jupiter - 5.9.2 + 5.10.2 test From de69cf20b30865a37eeb1b283b71efc67d5bd509 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:37 +0000 Subject: [PATCH 317/659] Bump org.slf4j:slf4j-simple from 1.7.36 to 2.0.13 in /java-mvn Bumps org.slf4j:slf4j-simple from 1.7.36 to 2.0.13. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..399061c5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -25,7 +25,7 @@ org.slf4j slf4j-simple - 1.7.36 + 2.0.13 From 292d63fe7dbb6a5574d195224982a7ca1935041d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:42 +0000 Subject: [PATCH 318/659] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 2.22.2 to 3.2.5. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-2.22.2...surefire-3.2.5) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..ba67341a 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -66,7 +66,7 @@ maven-surefire-plugin - 2.22.2 + 3.2.5 From bb97acacf0691271fbe2c8dfac5862a48529a474 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:45 +0000 Subject: [PATCH 319/659] Bump org.apache.maven.plugins:maven-compiler-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.10.1 to 3.13.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.10.1...maven-compiler-plugin-3.13.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..020c95cb 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -62,7 +62,7 @@ maven-compiler-plugin - 3.10.1 + 3.13.0 maven-surefire-plugin From fbe384e33cba8178477545fe75484a173deb7421 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:48 +0000 Subject: [PATCH 320/659] Bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 3.1.2 to 4.2.25. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v3.1.2...v4.2.25) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 14a60dff..f93c8a75 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.5' testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'org.mockito:mockito-core:4.3.1' - testImplementation 'io.dropwizard.metrics:metrics-core:3.1.2' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } From cd4c422308ff66282de9d4fbde8f4097c456db2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:49 +0000 Subject: [PATCH 321/659] Bump org.assertj:assertj-core from 3.24.2 to 3.25.3 in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.24.2 to 3.25.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.24.2...assertj-build-3.25.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..0e63552e 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ org.assertj assertj-core - 3.24.2 + 3.25.3 test From dbf53a41afc2832e75dd926b75365d8efe4fbf6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:54 +0000 Subject: [PATCH 322/659] Bump com.rabbitmq:amqp-client from 5.18.0 to 5.21.0 in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.18.0 to 5.21.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.18.0...v5.21.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..ce4e6d7f 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.18.0 + 5.21.0 org.slf4j From e2098c54d0888dc9567d1f349bef27e6758e62c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:42:59 +0000 Subject: [PATCH 323/659] Bump org.mockito:mockito-core from 4.11.0 to 5.11.0 in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 4.11.0 to 5.11.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v4.11.0...v5.11.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4105e4c5..8449ce40 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.mockito mockito-core - 4.11.0 + 5.11.0 test From 11ef95b829353611254bf187f9fe9bb24d2ad4db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:45:54 +0000 Subject: [PATCH 324/659] Bump org.mockito:mockito-core from 4.3.1 to 5.11.0 in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 4.3.1 to 5.11.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v4.3.1...v5.11.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 69e70685..27e38cfd 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.16.0' implementation 'org.slf4j:slf4j-simple:2.0.13' testImplementation 'org.assertj:assertj-core:3.21.0' - testImplementation 'org.mockito:mockito-core:4.3.1' + testImplementation 'org.mockito:mockito-core:5.11.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' From 92fc290761137314e5b99b965618ae7dd2418559 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:47:23 +0000 Subject: [PATCH 325/659] Bump com.rabbitmq:amqp-client from 5.16.0 to 5.21.0 in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.16.0 to 5.21.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.16.0...v5.21.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 27e38cfd..8f40bc6f 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.16.0' + implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.13' testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'org.mockito:mockito-core:5.11.0' From b3d5b7d4967b078896e02c80be7bf9f77ff28f2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:47:35 +0000 Subject: [PATCH 326/659] Bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.8.1 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 27e38cfd..0a0ada10 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'org.mockito:mockito-core:5.11.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } From 6b22ab5968cd98700ffd5dd06109669e3366e8b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:48:32 +0000 Subject: [PATCH 327/659] Bump org.assertj:assertj-core from 3.21.0 to 3.25.3 in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.21.0 to 3.25.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-core-3.21.0...assertj-build-3.25.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 8f40bc6f..1cc66a24 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.13' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.25.3' testImplementation 'org.mockito:mockito-core:5.11.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' From 966a7d822c2c9aae6cd466346d99d4c577448b3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:50:20 +0000 Subject: [PATCH 328/659] Bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.8.1 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index d230d3a3..c84c0b32 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.11.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' } test { From 61850f08ca72875c66dc5d7130e8a951307fb06d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 15:53:45 +0200 Subject: [PATCH 329/659] Fix a couple of warnings in pom.xml --- java-mvn/pom.xml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0664593c..9c40ba73 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -12,8 +12,8 @@ UTF-8 - 1.8 - 1.8 + 11 + 11 @@ -63,11 +63,28 @@ maven-compiler-plugin 3.13.0 + + 11 + maven-surefire-plugin 3.2.5 + + org.apache.maven.plugins + maven-clean-plugin + 3.3.2 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + ${project.build.sourceEncoding} + + From 97e5d03afd305c995dd0ee16ffddead3ab854c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 16:02:55 +0200 Subject: [PATCH 330/659] Fix more warnings in pom.xml --- java-mvn/pom.xml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 9c40ba73..fd0cc922 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -22,6 +22,13 @@ amqp-client 5.21.0 + + + org.slf4j + slf4j-api + 2.0.13 + + org.slf4j slf4j-simple @@ -70,6 +77,9 @@ maven-surefire-plugin 3.2.5 + + ${test-arguments} + org.apache.maven.plugins @@ -88,4 +98,20 @@ + + + + + jvm-test-arguments-java-21-and-more + + [21,) + + + -XX:+EnableDynamicAgentLoading + + + + + + From 60c81dccf12f95b5a1ca16deee03a131a5126935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 16:04:40 +0200 Subject: [PATCH 331/659] Bump Maven --- java-mvn/.mvn/wrapper/maven-wrapper.jar | Bin 58727 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 8 +- java-mvn/mvnw | 218 +++++++++--------- java-mvn/mvnw.cmd | 31 ++- 4 files changed, 133 insertions(+), 124 deletions(-) diff --git a/java-mvn/.mvn/wrapper/maven-wrapper.jar b/java-mvn/.mvn/wrapper/maven-wrapper.jar index c1dd12f17644411d6e840bd5a10c6ecda0175f18..cb28b0e37c7d206feb564310fdeec0927af4123a 100644 GIT binary patch delta 52871 zcmZ6x18`Bwr$(Cor!JRlVqa%o&P)M*8T6U>Z+$|ckQZP ztM}?&&(o)q;EQMA0*W%=5O5$MFd!g3?Uw2w|DOl;A1o)PDnu_OFV6TsZs`BG!TiUq z-PV=0{GZp-30MR`A-F*%WU-fkEhC2bLU&@V!bnK zsIRQ=bg&rfa`*$uUX>NH`e@8-J3gbI)Qu8gkUQhQatRIV-kVsECGN*fdlrrah#_}DVm2Hg?NK|>67eB+Yt6~K%8SzIiaO}tC8rpc1 z8em&=tyo!41RGqyzFrgdWsZEGb9;mRcc4j#po9?r6LAtFDEYrY6O{H}5C+QnFX#p3 z{1?1|QvVAmz=Zz=wqT0?f_||4|9~b_@H8ag|9nx%lC#_YpT(*D$B_Q9|91`L6;!1} z#C)e4;0Avo`0w*8Bq%{|ZrIzCaG__@afRt$5hTk8waT43U*8_!s8sOt>BL*nfeo#LN1e47YUk79(F_NJHE~L z<62wg#efT;Zd0bxyYvd2$aLBj)T z*m&cOVEB!tHaB*|MmT~=x0lPsn2n`M|71%*B*qrb9(T7sRv!E9N?ubVccf?5(wNhV zzEDd28-BGF!m>cai?N`Fu{gl*BJ8WkkJ{IwM6Kly58pHC?Nv7S=`{Ck$MjX-*Wq#Lz()q5Nt zb;Ggm-?pr3`4;jX4{6r10=J};d~TQIx;=R+^Ry}MO0U7@m!)V!m`@Y^B@lmASp8Hu z=E+33{CnV_)DVcTqh2Q(Yi!7Y0rVrC^v~Xpgn4?17xk)-o)|ACM4#2?v*l(ye-jT~ zEH$iEXbS;~dw!(~ot7z2jp}tJRT#bzB1#YR+U_N)G8&l`iGQ5MJ3rzh8TUW}$`v!J z)biVW%eqbQPPXo#n8J$2;fA+F<IVms<YT9Gt*==P~^a+ zIZ6#^sQDloymYq4g;eOQSfgFB-z2!IOZ$k7Gy!7wne`g`u(R%yO8rzu+K!m97}TpX zYxg$weY$7O>8(S6k%U7SJ`y93fPfiA+LVW9>y%^VMYAoH4iH#(Hpty)ko<3!S+rD_ z;mWKM%GAhCyfy|OB0f$YXz`RnGJ~g@A zl$5%p`%|&XO44Ct0eO#p2A?~C#wuOTdSZ{-7X8Bc-P8c+P{T+tgmg~|DX4xARr{8u z+>|C}PVcQx8at+fcirwb0hO#!1=}6oc4YL-F&C8|J9L7Ad#u$zIw-qJdGQFjEkHex z0vMlBuxTYel`|fv#-k(0{qwCW9E$Uq>679S=WmVyAV_Gn`h)Lr>FmKZITU1tIXp$? zp|!Os*NqKyq@nPEc6)C)tK^(M$!PTzp>;)K9D2&!sGZ>@y_`Z?FR6sqne%EP1&@=Q zsi8CD2kuoxtw_tP88m?rkZ*Y3mOa5C@!?31{Ls_E@w zY~6j3oUWN>88mdOwMBJSYeP{{IV>p0u69x}PCo$a(1i6f-acS0aAE^Z0EUnUJO(^> zDgvYo4Oq8#6&%=i41S|Zd#A6E9aMCGC(7d8Jq;ZpCx;PjGk$Cj+b!mZ*sL+sNAo^Z zwR_`ut2-KSG)I1kTH<7gQhoKa{IM9i4+^r$Z?fSctB;&#y>A$Jy=Ra1=vPn(J~Svk z_;3YUe5m^2STrVxipKwD-tI_y%wS#B>nq+zy3d7tny*K1Eh6dyY+jD&>*GLoq@MUv z1mQCRS@GxgL3NMXhF#WfdAyqUWfzs+{>Wsz=k!Gz?611=44!-u?($STQhz}8iG^#& z9eTX-gLa17y@G#9)(Wy4*;IdK*xV+ek{knhTJGSBVfVzu$p=%aybm)kUtSGQ< z42Bki?%}J_^M0mcK{ghMS|Ub)tvaUpc#H25g4qON_P5W(NiQ zksnpXKb~lV?ad^tNOIl=MCun3ek3VxvqP~ODJli53cKM zZ|uE8Xc8l#OW2%fAnsU5)Gax}UHw7)0NWNt6;2c0CFmzie-HV}$>R)H>l0W5^S)a5 z>kfrngch0T;rrIUclYD}+8p%%?Q?n^0gNnQARy!rARsLNDUO$Ts6b{06I&w}mlPE{ z2UH{AeoQ)RgBd1ibP`hEDSp3k-)S=Z21X(YhRkT-xg2)SmRy()wb{f8Q z-0qcI35zg?kpbb5;6SC&WtRZ6hPkj>4Rz9UnjK7@o>Aoc&e@-z!Hy|W;P4c()7bTN z!;UG$ZwW+>I&gCgKYD88a~BVC7lyyK5@Op1kS9&?pbik=$0{~`n6Rn01wfsWqe%vk zt2nG@kZvz@cw3C!riKxxaU``R_bEj93>`bJ)}Ds~D80xQQGmJe&~{0a7(deMy}qp2L(hFXoiRR}Z!1|z)5lozkU zAv`X%G==roCj&E@uRo+vg0wV5wow@g`l64hQ@ZDV^)-;|)Z!|NR1RKNwu185cSK>? z>{kHCmFdY}a%L5yzN1?7rKnveN?1lfqFjk&JEiCdUmPH`RGvoTp@u{nImTZ|&Fzoj zg*!-Pfj^v6tzr~^+=0be%EdOt3t__0<;85o;Hy*U)@e>WqPPe$y$d*95!BqY?!T5kS3TQ&;{B88MdT>i>I`@!Z#!+h}k>Wwj#N-qdVp58zLuCa7o9t$7 z895KHauksU!IlR|cM>?awi<*5;+gGPS6dw}H{2Gt(;pwt*U7P)6fc)WxuGAS(U94k7(; zhk_GISFV*esd^Dh8kr-jL!xlF+C|63(dqX&w`!#Z6-6%AE(ncE75PEuCm->mMw%+v zYLT-|Dg=R{3*%^pqGQnq?1M>!!KaD!PT-vMTa$+PXk|GPAnvt6(kkWTB@ny{7?F4w zSuK<^v2rL6{K=d&BW|JUft_U0>ih=17q)iN&*HYNT!*SbnU*#1#~Gg4vgf5(sQMb; zm#~^-(HXNZTT+9n#P$=rZCN;zA%3zcSTl2!?x#T5lCKMxKia>Q*xv?O2_|v|lA|?* zPfBiO)T|l|aI^ux()s&-7(MLTHQj|Xt;TuE-igT%@kzzLvIH^Bu%<}}RAZ;}`#*;S zLEPMVFiHCjBLG?TKyC{AP2j|)M@MM0*=^o#>vy>`M54LUa<+(T{YIX_w{`>zUD^>| zhnp4hn4^7|TMp7eXEPxq?im6!6tV%*U;c(a zrYQy-(J8Z}Sn4xknwkOtEowU6)ap7_9k8ejChH!Gk1Ik~d7 zO^ZNSSZ{m2KTlu2zr8OP83q4v`Kuj}Kzf3iIoafkE z$Ch2ZmdgmNAVhHJ=#`3lSm_-ac=OiAncRwtJ6#%a8(<-q2#fWMDC3Oumkh!nBXFu1 z7Dl1J-kO~`Edp{B&jzkeRxx9h+LELM=7LQp_ko06q_vI- zSz}L+Nl_p?1kIf2C&-0kL9#5Lz! z^rWRmJMk*Kg4z&pruyVymLgq&b~LrW!u&Hs6*MH8Y^;Kvl3EPqtzv=Au=!|uaGh$l zV=3$FXUOA*x;ab6%_jEdB%Li$Uw=%(`fq9>tcEgiIHrRM%?MzcNYaZ96$jnU9QeRIdiqz@o}ROk{iv zf2|1Z`pvLVQfF7e-sE&C$3hMl1A~={wBaEf$SV+hF+(3&(ob-OKhDrvtK-;re`9Np684>6yMNK*JCAJ zvyMze=vF0!vg6N5(=IlWb!Q&n$e}m9GA%H3k(F-&!<*UK!e(!|vFK{%Qry&G*VMm| zs8hU%p>3vbIXQ*nEa9*8h%rUT9uzKPMTH$u=jH#<9!3=%zh0IN5^ zs|*oq!3$mU>Q}=#`q!26M){s$Yi9J@rQc_Iin08Vvx_({k8qj$*pAc#gF z7@C`$b*p$(t;`MoPLn6%5e0)N1yT9hEJUlPaw2;4-F4#qkVb%5rQcy}TkoO#4>d-Z zQ*hGoUTAu%;eJ+*8dr`KiysUUEkJYxJNEvF-D-QJ{&D?)U{+YAqg}>zsYw60#+*G` zt7cv(`HHZZbN zLn^LdkQ%f(OTESNrsD;S9?2g){w1W~xt?LQ>a0*rWKfvqYVrFV^4CBbkPF4}`_4IswsXPX7U+1+o@V5Mwp_j6rEGKqeXvSD7 zOVZOrRsze_&3!2VMBL z-aGNDLSx{EDiL<1+6%6^!L#_x%GJD4ju;?#S^e+RsqCsz=Yo4q&khs2jp_hn`6a|^ zEZHV-G(LCWLj$Z!xr}QaP}X`T3g|OJ;vwL^Dz$L`hQ*7h$7vgaRZrt`JBN3%XUlCK z)alY$AIuwaI0|@Z>t5(~mKd)UM%sI61p5d`OISdxOFp%GO^Otpa!p+gQ!RKntjl)% zDH-(l;OX~nxBN8h>EPj*VE0E2Ax>ucN18tnRY5hYTm0>whynrneB`?`Diec%ZZHZU zH84dZ4_o|05%q>IrrsVkqc`@?pV=ohI+Kb4MnIBoJBd;g2?~Q=f~DgZ?bIt-c(4Kn zWMRDIZJdq>u0nNMn*8z8WJV_VdxcJtp@tU6=bONx^Z91KXh|7hV`Vc@q^EP4x`+&j zn8f31lS(|cQ#?n=2J+QD0|!?axZuH9l37bWN>P}H~HVY+HOGk(Jt?Lee}57D_f zbb4gn7;S)iZMx4nt@@aq)ui;uklSpWWZJ^U^|@UfpLqU5V=GZMr>L_5Y)n zB=i=9(EmbrsyA$_;mEHM#l<3-F!%EDU^32F2Y?VePKn#IjSc+Ze1S=O5cQvfq&jNK zw6z&O@M)|hpW>N5B=1S5HA;(79MOsgp70unJd#76-rwTC@;6);r`os#k{@b1qO!)4 zZjr_sopY&6X1v8tIUrB#7KWdyh6Wbr(KhH^TxkFqxTt!AH(Z zCtN?hVQ5DDP|c6pxtYCl(c74FGcHX(F4v$8TtJES5;&@e8pc1B+0*Kz%v?}qV@*^( z)VD5bQ;QiWe@W2@_8CJiQ$c-(BsOp)Q)LPTC*H-jFK0x+Q2#5xH=6rV)XvQk+op>{ z!xxcKFvz_1=O^Yetuq&J46pL}D<1VBZa;_kID#};C$eR2ILU|h`s`q{r5XQWT_o)` zzlHbwPS5q#9?S#DLwAH9*W-G>X|=%%o?k@XxHkQCub$Hm=&ATI%&roM}YVs zscOHNfr8(Nl8+0*F69WTLg6D*+n1>Qr`Dg9c!eXfx)*{m7ybbQ>7&oTur%jsf{-ZH zD4tm-n{HABDxhm~%Sxg5xOBrUbRw%LB&$h(p~5=jo}lc3M~@U=J?l=Z41wJc&m?rI z$Z*TkJ0%|vP6m>6XjA8w;N&}7a*88x4T%OQ)o7>pG8F3r%~eP|_GTLW^o6R)o>J-o z-72cYy92NdPP$-+>ne?srDa_E(+hk%QvCk-2a=9{fWI z{>ZmEJoDo1a5irg34d>-q=HcS&xIjv)N>_a>Ebb<0nT}bmgYzp>Vw#**w?;mmDUAJ zPZZ{k-1d#pJJ+z}jttE1m@`1I5+Ic3?%qD>>5jQaqjW4+t2vcC#lZurAwvG%g-7I$@z2T*H`1!$D82)T}{yb z6_1iV^)TB1(M8VxG3x)hn*c=}JnU^9j7-g(|7BLhVrQ%e6_G>cUa_*^-~<9;I?rvl zI_%&f3kuKtWW|$^ZxP!n&YRrkq0dAx>d4arj7}VTab|CKUy%GEp+L2RBitxcg$qUB z=&;yzxvAmYK5S`|bRw1^&ydA4bc0=(Dg6XZaZ`f*bV-BHZJ&*9@#sCyQ84VIJ&8%l6{GkWi-@H8dT3YfL7Bqm;*c?K+_O5ZiEDzO>T-@d#dG0C? zEp|Q5UN8yk{x8yh1C>&b58o5{s*;+U_Te(`=shc@lnOpr|ygBN6 z9%y3Nex+~eY&%WH39M8wcMIaFo7~r4! zZs{L4RQJ>Wr^sWnK+RZWXGUC%tb9cD5Hg>2dZXLM0hrc7;L*{2bqbNDH!tGt27Gf9g2 zn6w-vd}j{ks-93uZn(bHFb)~_EDcwfD!sreb7Vtu%6!yt-1ouwIF*RZ#aodm%qdQx ziPwBQd*X5@jkZu7Iva^-ErCoHdS<-5WkRjAY9~PG;T3bJ130ej_MO+mCeFR1&J-$x z&_%~fv^eEe`qP-)S3A7{N5|PZDaS{D4L!l=gf4W&3nI=bnzdPwxBV8Q=l2=ay{ikaodIt%8h6)vZzJ8G-IU4SHUMrP_W4{hhaw&~UclsjL8-ZpW49wvA!Hsm_s=o1Qk3kC~8Wd~4hf-WoUB|z$C57oZ6^Dz)>fK9~{dU_$<@^#8Ia2_JZsx%Q4 z0y#hUW(4Azgf^gkAsfQfz30Vq+Tq_}@yMSDbqgq}itsSm^LWojR@s0uu&;!luaIH) z(5QsFM95`!XZ``yj?&xax*`eb_M=+KhKXOiuJ#48g3aOYCEer8Zfp9rx%psWAIY?7 z>H-ezaBwUov01<({*n2P@EGS) znlbuVz;#{ZIYbfh6BaIJK|uxK1%(7sO!U?}8Z-&PYdYQA#HPa8H*4LEz&G@NpYl7B zSu213p>S{h5z%S>Q_iI9U0jW9ZOxp?{#PleQPomeR7C$`u(QGw9%$?!j)F<1&!@6( zi1a6w1(m3u+bP9r$4-<_B>BR%Sh^P@TEa=Y7xH}=AUXylhQbXgJ5I~qIH%t7o^H9^ z*6kYffnty4a9JZql2nrfYKIa|=`R8jE-!^Qk8}o?a)BG&n&_<@7Ca1`2u3f_%uAh@ z3+FiG@3wAX&4JhlN>nr#`7Exscl5Ox3k&Kc#LZ?MT5QAo+9$=NdQ%jyQdZKOL&z5j z$LM6gk;RH4RU}#1uAl#W;6G5oh_nY5)ChL1?tyx&E>`H`&satjs)^yrvo_yK+^-YC zm6^69Gyu;_Mp8OPB%09e|444SqFdl3zDr?LUU_0%xBt2*JZ|q@jBXB*ml7~Z7i3y$ zj23l~Y1-_h>Re!1te{~A=;qLL{+>bJeL&BJ6#0UQjEwH8rGF&Xu=MC4b(?dsmN-%^ zF+aN$lt(LeM%cHi`lZBfT0)H}ljUhtch`+&!2+~7-x_z)@p}J-{U#9i{ZgoaKyP*H1WvL~zf$^4z_2tFkw#wvzx7ontr!LRT0ZVWrfX#F{8)4+@%7 z&I4eEipg|lrxEvpt`71|r&_piVnNs6`>Jt(f=KrV%rw9*e>S7Ez6|k(Yfy-CI}V#4 zP~9-^eQJqO(DwsNNCCTsrMRv@3kUlHhT{%r{-wEUfE?Fm0tyhTkE=7KekLNgS4YyD z>$#fkN{Cse7k)ClhqZ+CDQbH54$am>Dg_)LlOd5kgvT{dmaT(1Y>C^}`cr9089(Sh zm(%|<6vlUL%n(l85``i~TyXo%A0Y5E)^ixtj2m(U=^gQ{ds_^nN^yhb2<*)$evZj+13XG|;%r@t+EQzvbr;+18tmKz;1MF~6NvqW zjHw)p(@!>v z4ej9Z;Sy2IaoLO=b_v3`fpZ@#3MFVB48++k-A0aHpWoX77@M2FJ(!Qx8!gtZ_ts2s z@6!=HGUY`LX!@4VVTZF9&xp$0s*?E;z++52p-=o_8diguMZ zJiCsd-sThOr?p_~hFc(ORxu-8z2I0IyUeBF_?0&)xmQBq0Y!=hEmE3KcU_mSwm3p< z0n7l^L}EsY4POhJ}@{E|L@5(yj4X=HaPVssCwV%BHiuO=GJ!;Fv~EHDey?≷S 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

    St0o*K217#e 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" fi if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" else - javaExecutable="`readlink -f \"$javaExecutable\"`" + javaExecutable="$(readlink -f "\"$javaExecutable\"")" fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') JAVA_HOME="$javaHome" export JAVA_HOME fi @@ -149,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`\\unset -f command; \\command -v java`" + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" fi fi @@ -163,12 +132,9 @@ if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" @@ -184,96 +150,99 @@ find_maven_basedir() { fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + wdir=$(cd "$wdir/.." || exit 1; pwd) fi # end of workaround done - echo "${basedir}" + printf '%s' "$(cd "$basedir" || exit 1; pwd)" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then exit 1; fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi + log "Couldn't find $wrapperJarPath, downloading it ..." + if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" else - jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") fi if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" # For Cygwin, switch paths to Windows format before running javac if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" fi fi fi @@ -282,35 +251,58 @@ fi # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi fi + MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi # Provide a "standardized" way to retrieve the CLI args that will # work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +# shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" \ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/java-mvn/mvnw.cmd b/java-mvn/mvnw.cmd index 23b7079a..f80fbad3 100644 --- a/java-mvn/mvnw.cmd +++ b/java-mvn/mvnw.cmd @@ -18,13 +18,12 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script +@REM Apache Maven Wrapper startup batch script, version 3.2.0 @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @REM @REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @@ -120,10 +119,10 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @@ -134,11 +133,11 @@ if exist %WRAPPER_JAR% ( ) ) else ( if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" ) if "%MVNW_VERBOSE%" == "true" ( echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% + echo Downloading from: %WRAPPER_URL% ) powershell -Command "&{"^ @@ -146,7 +145,7 @@ if exist %WRAPPER_JAR% ( "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ "}" if "%MVNW_VERBOSE%" == "true" ( echo Finished downloading %WRAPPER_JAR% @@ -154,6 +153,24 @@ if exist %WRAPPER_JAR% ( ) @REM End of extension +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + @REM Provide a "standardized" way to retrieve the CLI args that will @REM work with both Windows and non-Windows executions. set MAVEN_CMD_LINE_ARGS=%* From 64526d042d75d08bacb3fe91a811c29a016e017b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 22 Apr 2024 16:12:04 +0200 Subject: [PATCH 332/659] Update Spring AMQP tutorial --- .../.mvn/wrapper/MavenWrapperDownloader.java | 110 --------- spring-amqp/.mvn/wrapper/maven-wrapper.jar | Bin 48337 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 19 +- spring-amqp/README.md | 8 +- spring-amqp/mvnw | 228 ++++++++++-------- spring-amqp/mvnw.cmd | 88 +++++-- spring-amqp/pom.xml | 9 +- 7 files changed, 221 insertions(+), 241 deletions(-) delete mode 100755 spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java mode change 100755 => 100644 spring-amqp/.mvn/wrapper/maven-wrapper.jar mode change 100755 => 100644 spring-amqp/mvnw.cmd diff --git a/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java b/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100755 index 2e394d5b..00000000 --- a/spring-amqp/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: : " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/spring-amqp/.mvn/wrapper/maven-wrapper.jar b/spring-amqp/.mvn/wrapper/maven-wrapper.jar old mode 100755 new mode 100644 index 01e67997377a393fd672c7dcde9dccbedf0cb1e9..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 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 A?*IS* literal 48337 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" fi if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" else - javaExecutable="`readlink -f \"$javaExecutable\"`" + javaExecutable="$(readlink -f "\"$javaExecutable\"")" fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') JAVA_HOME="$javaHome" export JAVA_HOME fi @@ -146,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" fi fi @@ -160,12 +132,9 @@ if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" @@ -181,76 +150,99 @@ find_maven_basedir() { fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + wdir=$(cd "$wdir/.." || exit 1; pwd) fi # end of workaround done - echo "${basedir}" + printf '%s' "$(cd "$basedir" || exit 1; pwd)" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then exit 1; fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" fi - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi - wget "$jarUrl" -O "$wrapperJarPath" elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi - curl -o "$wrapperJarPath" "$jarUrl" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" fi fi fi @@ -259,28 +251,58 @@ fi # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi fi + MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +# shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-amqp/mvnw.cmd b/spring-amqp/mvnw.cmd old mode 100755 new mode 100644 index a5284c79..f80fbad3 --- a/spring-amqp/mvnw.cmd +++ b/spring-amqp/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM http://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an @@ -18,15 +18,14 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script +@REM Apache Maven Wrapper startup batch script, version 3.2.0 @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @REM @REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @REM e.g. to debug Maven itself, use @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -37,7 +36,7 @@ @echo off @REM set title of command window title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @REM set %HOME% to equivalent of $HOME @@ -46,8 +45,8 @@ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") @REM Execute a user defined script before this one if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* :skipRcPre @setlocal @@ -120,24 +119,69 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @REM This allows using the maven wrapper in projects that prohibit checking in binary data. if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) ) else ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" - echo Finished downloading %WRAPPER_JAR% + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) ) @REM End of extension -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end @@ -147,15 +191,15 @@ set ERROR_CODE=1 :end @endlocal & set ERROR_CODE=%ERROR_CODE% -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost @REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" :skipRcPost @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause +if "%MAVEN_BATCH_PAUSE%"=="on" pause -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% -exit /B %ERROR_CODE% +cmd /C exit /B %ERROR_CODE% diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index ff96de67..1f7e8599 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -21,7 +21,6 @@ UTF-8 UTF-8 - 1.8 @@ -42,6 +41,14 @@ ZIP + + + maven-compiler-plugin + 3.13.0 + + 21 + + From 5c5f50a94862c9166f231c06048038d47337d174 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Wed, 24 Apr 2024 11:35:30 +0200 Subject: [PATCH 333/659] add rust stream client example Signed-off-by: Gabriele Santomaggio --- rust-stream/Cargo.lock | 1189 ++++++++++++++++++++++++++++++++ rust-stream/Cargo.toml | 11 + rust-stream/README.md | 20 + rust-stream/src/bin/receive.rs | 55 ++ rust-stream/src/bin/send.rs | 35 + 5 files changed, 1310 insertions(+) create mode 100644 rust-stream/Cargo.lock create mode 100644 rust-stream/Cargo.toml create mode 100644 rust-stream/README.md create mode 100644 rust-stream/src/bin/receive.rs create mode 100644 rust-stream/src/bin/send.rs diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock new file mode 100644 index 00000000..2259e460 --- /dev/null +++ b/rust-stream/Cargo.lock @@ -0,0 +1,1189 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cc" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.5", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rabbitmq-stream-client" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88174e13a7d829a79af91437e439722bd6b095c819f7f2973c25e6ff2b94e173" +dependencies = [ + "async-trait", + "bytes", + "dashmap", + "futures", + "pin-project", + "rabbitmq-stream-protocol", + "rand", + "rustls-pemfile", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-stream", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "rabbitmq-stream-protocol" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31f750ab83e13e0e78d5b3aca6659e7e72049893fdcbd3166a5a61dfdc6fa57" +dependencies = [ + "byteorder", + "chrono", + "derive_more", + "num_enum", + "ordered-float", + "uuid", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rust-stream" +version = "0.1.0" +dependencies = [ + "futures", + "rabbitmq-stream-client", + "tokio", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.21.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.60", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] diff --git a/rust-stream/Cargo.toml b/rust-stream/Cargo.toml new file mode 100644 index 00000000..024d3084 --- /dev/null +++ b/rust-stream/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "rust-stream" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rabbitmq-stream-client = "0.4.2" +tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] } +futures = "0.3.30" diff --git a/rust-stream/README.md b/rust-stream/README.md new file mode 100644 index 00000000..43748b03 --- /dev/null +++ b/rust-stream/README.md @@ -0,0 +1,20 @@ +# Rust code for RabbitMQ tutorials (using rabbitmq-stream-client) + +Here you can find the Rust code examples for [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +The examples use [rabbitmq-stream-client](https://github.com/rabbitmq/rabbitmq-stream-rust-client) client library. + +These tutorials assume a RabbitMQ server node running locally using default ports and the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +## Requirements + +* [Rust and Cargo](https://www.rust-lang.org/tools/install) + +## Code +Each cargo command should be launched in a separate shell. + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) + + cargo run --bin receive + cargo run --bin send \ No newline at end of file diff --git a/rust-stream/src/bin/receive.rs b/rust-stream/src/bin/receive.rs new file mode 100644 index 00000000..5a32fb2d --- /dev/null +++ b/rust-stream/src/bin/receive.rs @@ -0,0 +1,55 @@ +use std::io::stdin; +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, OffsetSpecification, ResponseCode}; +use futures::{StreamExt}; +use tokio::task; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "hello-rust-stream"; + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(5)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + } + } + } + } + + let mut consumer = environment + .consumer() + .offset(OffsetSpecification::First) + .build(stream) + .await + .unwrap(); + + let handle = consumer.handle(); + task::spawn(async move { + while let Some(delivery) = consumer.next().await { + let d = delivery.unwrap(); + println!("Got message: {:#?} with offset: {}", + d.message().data().map(|data| String::from_utf8(data.to_vec()).unwrap()), + d.offset(),); + } + }); + + + println!("Press any key to close the consumer"); + _ = stdin().read_line(&mut "".to_string()); + + + handle.close().await?; + println!("consumer closed successfully"); + Ok(()) +} diff --git a/rust-stream/src/bin/send.rs b/rust-stream/src/bin/send.rs new file mode 100644 index 00000000..a842415c --- /dev/null +++ b/rust-stream/src/bin/send.rs @@ -0,0 +1,35 @@ +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, Message, ResponseCode}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "hello-rust-stream"; + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(5)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + } + } + } + } + + let producer = environment.producer().build(stream).await?; + + producer + .send_with_confirm(Message::builder().body("Hello, World!").build()) + .await?; + println!("Sent message to stream: {}", stream); + producer.close().await?; + Ok(()) +} From bfe6dd09fdbbb2aaa827bb43f9c1eadbd71c45d2 Mon Sep 17 00:00:00 2001 From: icappello Date: Thu, 9 May 2024 07:23:05 +0200 Subject: [PATCH 334/659] Hello World for nodejs stream client (#403) * add: simple publish/receive examples for the nodejs stream client --- javascript-nodejs-stream/.gitignore | 1 + javascript-nodejs-stream/README.md | 18 +++++ javascript-nodejs-stream/package-lock.json | 84 ++++++++++++++++++++++ javascript-nodejs-stream/package.json | 12 ++++ javascript-nodejs-stream/receive.js | 33 +++++++++ javascript-nodejs-stream/send.js | 34 +++++++++ 6 files changed, 182 insertions(+) create mode 100644 javascript-nodejs-stream/.gitignore create mode 100644 javascript-nodejs-stream/README.md create mode 100644 javascript-nodejs-stream/package-lock.json create mode 100644 javascript-nodejs-stream/package.json create mode 100644 javascript-nodejs-stream/receive.js create mode 100644 javascript-nodejs-stream/send.js diff --git a/javascript-nodejs-stream/.gitignore b/javascript-nodejs-stream/.gitignore new file mode 100644 index 00000000..30bc1627 --- /dev/null +++ b/javascript-nodejs-stream/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/javascript-nodejs-stream/README.md b/javascript-nodejs-stream/README.md new file mode 100644 index 00000000..1987d585 --- /dev/null +++ b/javascript-nodejs-stream/README.md @@ -0,0 +1,18 @@ +# Node.js code for RabbitMQ stream tutorials + +Here you can find JavaScript (Node) code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html) related to the [Stream plugin](https://www.rabbitmq.com/docs/stream). + +To successfully use the examples you will need a running RabbitMQ server. + +## Requirements + +Apart from [Node.js](https://nodejs.org/en/download/), these examples use the [`rabbitmq-stream-js-client`](https://github.com/coders51/rabbitmq-stream-js-client) client library. + +## Code + +Code examples are executed via `npm`: + + npm run publish + npm run receive + +To learn more, see [`coders51/rabbitmq-stream-js-client`](https://github.com/coders51/rabbitmq-stream-js-client). diff --git a/javascript-nodejs-stream/package-lock.json b/javascript-nodejs-stream/package-lock.json new file mode 100644 index 00000000..30d25692 --- /dev/null +++ b/javascript-nodejs-stream/package-lock.json @@ -0,0 +1,84 @@ +{ + "name": "rabbitmq-stream-node-tutorial", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "rabbitmq-stream-node-tutorial", + "version": "1.0.0", + "dependencies": { + "rabbitmq-stream-js-client": "^0.3.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rabbitmq-stream-js-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz", + "integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==", + "dependencies": { + "semver": "^7.5.4" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "rabbitmq-stream-js-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz", + "integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==", + "requires": { + "semver": "^7.5.4" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/javascript-nodejs-stream/package.json b/javascript-nodejs-stream/package.json new file mode 100644 index 00000000..d7fcb4cd --- /dev/null +++ b/javascript-nodejs-stream/package.json @@ -0,0 +1,12 @@ +{ + "name": "rabbitmq-stream-node-tutorial", + "version": "1.0.0", + "description": "Tutorial for the nodejs RabbitMQ stream client", + "scripts": { + "send": "node send.js", + "receive": "node receive.js" + }, + "dependencies": { + "rabbitmq-stream-js-client": "^0.3.1" + } +} diff --git a/javascript-nodejs-stream/receive.js b/javascript-nodejs-stream/receive.js new file mode 100644 index 00000000..83ff1377 --- /dev/null +++ b/javascript-nodejs-stream/receive.js @@ -0,0 +1,33 @@ +const rabbit = require("rabbitmq-stream-js-client") + +async function main() { + const streamName = "hello-nodejs-stream" + + console.log("Connecting..."); + const client = await rabbit.connect({ + hostname: "localhost", + port: 5552, + username: "guest", + password: "guest", + vhost: "/", + }) + + console.log("Making sure the stream exists..."); + const streamSizeRetention = 5 * 1e9 + await client.createStream({ stream: streamName, arguments: { "max-length-bytes": streamSizeRetention } }); + + console.log("Declaring the consumer with offset..."); + await client.declareConsumer({ stream: streamName, offset: rabbit.Offset.first() }, (message) => { + console.log(`Received message ${message.content.toString()}`) + }) + +} + +main() + .then(async () => { + await new Promise(function () { }) + }) + .catch((res) => { + console.log("Error while receiving message!", res) + process.exit(-1) + }) diff --git a/javascript-nodejs-stream/send.js b/javascript-nodejs-stream/send.js new file mode 100644 index 00000000..b86e02e0 --- /dev/null +++ b/javascript-nodejs-stream/send.js @@ -0,0 +1,34 @@ +const rabbit = require("rabbitmq-stream-js-client"); + +async function main() { + const streamName = "hello-nodejs-stream"; + + console.log("Connecting..."); + const client = await rabbit.connect({ + vhost: "/", + port: 5552, + hostname: "localhost", + username: "guest", + password: "guest", + }); + + console.log("Making sure the stream exists..."); + const streamSizeRetention = 5 * 1e9 + await client.createStream({ stream: streamName, arguments: { "max-length-bytes": streamSizeRetention } }); + + console.log("Creating the publisher..."); + const publisher = await client.declarePublisher({ stream: streamName }); + + console.log("Sending a message..."); + await publisher.send(Buffer.from("Test message")); + + console.log("Closing the connection..."); + await client.close(); +} + +main() + .then(() => console.log("done!")) + .catch((res) => { + console.log("Error in publishing message!", res); + process.exit(-1); + }); From 4cb1a81fd46a918d5e5f2ceecca9d01e6e3398e7 Mon Sep 17 00:00:00 2001 From: Daniele Date: Thu, 9 May 2024 07:23:46 +0200 Subject: [PATCH 335/659] Hello world for Python (rstream) stream client (#404) --- python-stream/README.md | 25 +++++++++++++++++++ python-stream/receive.py | 44 ++++++++++++++++++++++++++++++++++ python-stream/requirements.txt | 3 +++ python-stream/send.py | 27 +++++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 python-stream/README.md create mode 100644 python-stream/receive.py create mode 100644 python-stream/requirements.txt create mode 100644 python-stream/send.py diff --git a/python-stream/README.md b/python-stream/README.md new file mode 100644 index 00000000..5abecd85 --- /dev/null +++ b/python-stream/README.md @@ -0,0 +1,25 @@ +# Python code for RabbitMQ tutorials + + +Here you can find Python code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). + + +## Requirements + +These examples use the [`qweeze/rstream`](https://github.com/qweeze/rstream) client library. + +Get it first with the necessary dependencies: + + pip3 install -r requirements.txt + +## Code + +Code examples are executed via `python3`: + +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python-stream): + + python3 send.py + python3 receive.py + + +To learn more, see [`rqweeze/rstream`](https://github.com/qweeze/rstream). \ No newline at end of file diff --git a/python-stream/receive.py b/python-stream/receive.py new file mode 100644 index 00000000..f68e17da --- /dev/null +++ b/python-stream/receive.py @@ -0,0 +1,44 @@ +import asyncio +import signal + +from rstream import ( + AMQPMessage, + Consumer, + MessageContext, + ConsumerOffsetSpecification, + OffsetType, +) + +STREAM_NAME = "hello-python-stream" +# 5GB +STREAM_RETENTION = 5000000000 + + +async def receive(): + consumer = Consumer(host="localhost", username="guest", password="guest") + await consumer.create_stream( + STREAM_NAME, exists_ok=True, arguments={"MaxLengthBytes": STREAM_RETENTION} + ) + + loop = asyncio.get_event_loop() + loop.add_signal_handler( + signal.SIGINT, lambda: asyncio.create_task(consumer.close()) + ) + + async def on_message(msg: AMQPMessage, message_context: MessageContext): + stream = message_context.consumer.get_stream(message_context.subscriber_name) + print("Got message: {} from stream {}".format(msg, stream)) + + print("Press control +C to close") + await consumer.start() + await consumer.subscribe( + stream=STREAM_NAME, + callback=on_message, + offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), + ) + await consumer.run() + # give time to the consumer task to close the consumer + await asyncio.sleep(1) + + +asyncio.run(receive()) diff --git a/python-stream/requirements.txt b/python-stream/requirements.txt new file mode 100644 index 00000000..e439cc10 --- /dev/null +++ b/python-stream/requirements.txt @@ -0,0 +1,3 @@ +rstream +uamqp +mmh3 diff --git a/python-stream/send.py b/python-stream/send.py new file mode 100644 index 00000000..3e8e8e45 --- /dev/null +++ b/python-stream/send.py @@ -0,0 +1,27 @@ +import asyncio + +from rstream import Producer + +STREAM_NAME = "hello-python-stream" +# 5GB +STREAM_RETENTION = 5000000000 + + +async def send(): + async with Producer( + host="localhost", + username="guest", + password="guest", + ) as producer: + await producer.create_stream( + STREAM_NAME, exists_ok=True, arguments={"MaxLengthBytes": STREAM_RETENTION} + ) + + await producer.send(stream=STREAM_NAME, message=b"Hello, World!") + + print(" [x] Hello, World! message sent") + + input(" [x] Press Enter to close the producer ...") + + +asyncio.run(send()) From c3170b0f7e5b2cde623f11799b1d7bc0fd51169e Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Thu, 9 May 2024 07:25:59 +0200 Subject: [PATCH 336/659] tutorial java stream client (#384) * Hello world with Java Stream Client with Maven --- .github/dependabot.yml | 6 + java-stream-mvn/.gitignore | 40 +++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 18 + java-stream-mvn/README.md | 22 ++ java-stream-mvn/mvnw | 308 ++++++++++++++++++ java-stream-mvn/mvnw.cmd | 205 ++++++++++++ java-stream-mvn/pom.xml | 59 ++++ java-stream-mvn/src/main/java/Receive.java | 27 ++ java-stream-mvn/src/main/java/Send.java | 20 ++ java-stream-mvn/start-broker.sh | 77 +++++ 11 files changed, 782 insertions(+) create mode 100644 java-stream-mvn/.gitignore create mode 100644 java-stream-mvn/.mvn/wrapper/maven-wrapper.jar create mode 100644 java-stream-mvn/.mvn/wrapper/maven-wrapper.properties create mode 100644 java-stream-mvn/README.md create mode 100755 java-stream-mvn/mvnw create mode 100644 java-stream-mvn/mvnw.cmd create mode 100644 java-stream-mvn/pom.xml create mode 100644 java-stream-mvn/src/main/java/Receive.java create mode 100644 java-stream-mvn/src/main/java/Send.java create mode 100755 java-stream-mvn/start-broker.sh diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 27a79d07..06afb70d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,6 +8,12 @@ updates: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + - package-ecosystem: "maven" + directory: "/java-stream-mvn" + schedule: + interval: "daily" + open-pull-requests-limit: 20 + target-branch: "main" - package-ecosystem: "maven" directory: "/spring-amqp" schedule: diff --git a/java-stream-mvn/.gitignore b/java-stream-mvn/.gitignore new file mode 100644 index 00000000..454d7ea5 --- /dev/null +++ b/java-stream-mvn/.gitignore @@ -0,0 +1,40 @@ +target/ +rmq-conf/ + +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/java-stream-mvn/.mvn/wrapper/maven-wrapper.jar b/java-stream-mvn/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 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 A?*IS* literal 0 HcmV?d00001 diff --git a/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..346d645f --- /dev/null +++ b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/java-stream-mvn/README.md b/java-stream-mvn/README.md new file mode 100644 index 00000000..6b817dcc --- /dev/null +++ b/java-stream-mvn/README.md @@ -0,0 +1,22 @@ +# Java code for RabbitMQ tutorials + +Here you can find Java code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). + +## Requirements + +These examples use the [`rabbitmq-stream-java-client`](https://github.com/rabbitmq/rabbitmq-stream-java-client) client library. +This example uses Maven to manage dependencies. + +## Code + +Code examples are executed via the Maven wrapper `./mvnw`. +Remove the `-q` flag to get more information in case an example does not behave as expected. + +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java-stream.html): + +``` +./mvnw -q compile exec:java -Dexec.mainClass="Send" +./mvnw -q compile exec:java -Dexec.mainClass="Receive" +``` + +To learn more, see [`rabbitmq/rabbitmq-stream-java-client`](https://github.com/rabbitmq/rabbitmq-stream-java-client). diff --git a/java-stream-mvn/mvnw b/java-stream-mvn/mvnw new file mode 100755 index 00000000..8d937f4c --- /dev/null +++ b/java-stream-mvn/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/java-stream-mvn/mvnw.cmd b/java-stream-mvn/mvnw.cmd new file mode 100644 index 00000000..f80fbad3 --- /dev/null +++ b/java-stream-mvn/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml new file mode 100644 index 00000000..e2fc6615 --- /dev/null +++ b/java-stream-mvn/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + stream + java-stream-mvn + 1.0-SNAPSHOT + + + + com.rabbitmq + stream-client + 0.15.0 + + + org.slf4j + slf4j-api + 2.0.13 + + + org.slf4j + slf4j-simple + 2.0.13 + + + + + + + + maven-compiler-plugin + 3.13.0 + + 11 + 11 + 11 + + + + maven-clean-plugin + 3.3.2 + + + maven-resources-plugin + 3.3.1 + + + + + + + + + UTF-8 + UTF-8 + + diff --git a/java-stream-mvn/src/main/java/Receive.java b/java-stream-mvn/src/main/java/Receive.java new file mode 100644 index 00000000..003b7788 --- /dev/null +++ b/java-stream-mvn/src/main/java/Receive.java @@ -0,0 +1,27 @@ +import com.rabbitmq.stream.ByteCapacity; +import com.rabbitmq.stream.Consumer; +import com.rabbitmq.stream.Environment; +import com.rabbitmq.stream.OffsetSpecification; + +import java.io.IOException; + +public class Receive { + + public static void main(String[] args) throws IOException { + Environment environment = Environment.builder().build(); + String stream = "hello-java-stream"; + environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create(); + + Consumer consumer = environment.consumerBuilder() + .stream(stream) + .offset(OffsetSpecification.first()) + .messageHandler((unused, message) -> { + System.out.println("Received message: " + new String(message.getBodyAsBinary())); + }).build(); + + System.out.println(" [x] Press Enter to close the consumer..."); + System.in.read(); + consumer.close(); + environment.close(); + } +} diff --git a/java-stream-mvn/src/main/java/Send.java b/java-stream-mvn/src/main/java/Send.java new file mode 100644 index 00000000..fd235919 --- /dev/null +++ b/java-stream-mvn/src/main/java/Send.java @@ -0,0 +1,20 @@ +import com.rabbitmq.stream.*; +import java.io.IOException; + +public class Send { + + public static void main(String[] args) throws IOException { + Environment environment = Environment.builder().build(); + String stream = "hello-java-stream"; + environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create(); + + Producer producer = environment.producerBuilder().stream(stream).build(); + producer.send(producer.messageBuilder().addData("Hello, World!".getBytes()).build(), null); + System.out.println(" [x] 'Hello, World!' message sent"); + + System.out.println(" [x] Press Enter to close the producer..."); + System.in.read(); + producer.close(); + environment.close(); + } +} diff --git a/java-stream-mvn/start-broker.sh b/java-stream-mvn/start-broker.sh new file mode 100755 index 00000000..a5294f7b --- /dev/null +++ b/java-stream-mvn/start-broker.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +set -o errexit +set -o pipefail +# set -o xtrace + +script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +readonly script_dir +echo "[INFO] script_dir: '$script_dir'" + +readonly docker_name_prefix='java-stream-mvn' +readonly rmq_docker_name="$docker_name_prefix-rabbitmq" +readonly rmq_image=${RABBITMQ_IMAGE:-rabbitmq:3-management} +readonly rmq_config_dir="$script_dir/rmq-conf" + +if [[ $1 == 'pull' ]] +then + readonly docker_pull_args='--pull always' +else + readonly docker_pull_args='' +fi + +set -o nounset + +function config_rabbitmq +{ + mkdir -p "$rmq_config_dir" + echo '[rabbitmq_top,rabbitmq_management,rabbitmq_stream,rabbitmq_stream_management,rabbitmq_amqp1_0].' > "$rmq_config_dir/enabled_plugins" + echo 'loopback_users = none' > "$rmq_config_dir/rabbitmq.conf" +} + +function start_rabbitmq +{ + echo "[INFO] starting RabbitMQ server docker container" + docker rm --force "$rmq_docker_name" 2>/dev/null || echo "[INFO] $rmq_docker_name was not running" + # shellcheck disable=SC2086 + docker run --detach $docker_pull_args \ + --name "$rmq_docker_name" \ + --env 'RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_stream advertised_host localhost' \ + --network host \ + --volume "$rmq_config_dir:/etc/rabbitmq:ro" \ + "$rmq_image" +} + +function wait_rabbitmq +{ + set +o errexit + + declare -i count=12 + while (( count > 0 )) && [[ "$(docker inspect --format='{{.State.Running}}' "$rmq_docker_name")" != 'true' ]] + do + echo '[WARNING] RabbitMQ container is not yet running...' + sleep 5 + (( count-- )) + done + + declare -i count=12 + while (( count > 0 )) && ! docker exec "$rmq_docker_name" epmd -names | grep -F 'name rabbit' + do + echo '[WARNING] epmd is not reporting rabbit name just yet...' + sleep 5 + (( count-- )) + done + + docker exec "$rmq_docker_name" rabbitmqctl await_startup + + set -o errexit +} + +config_rabbitmq + +start_rabbitmq + +wait_rabbitmq + +docker exec "$rmq_docker_name" rabbitmq-diagnostics erlang_version +docker exec "$rmq_docker_name" rabbitmqctl version From 0f18bb786e4de38b23acc4d489c3af7594960bbd Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Thu, 9 May 2024 09:22:21 +0200 Subject: [PATCH 337/659] Dotnet stream client tutorial getting started (#382) * dotnet stream tutorial hello world --------- Signed-off-by: Gabriele Santomaggio --- dotnet-stream/.gitignore | 113 +++++++++++++++++++++++++++ dotnet-stream/README.md | 29 +++++++ dotnet-stream/Receive/Receive.cs | 30 +++++++ dotnet-stream/Receive/Receive.csproj | 15 ++++ dotnet-stream/Send/Send.csproj | 15 ++++ dotnet-stream/Send/Sends.cs | 21 +++++ dotnet-stream/dotnet-stream.sln | 22 ++++++ 7 files changed, 245 insertions(+) create mode 100644 dotnet-stream/.gitignore create mode 100644 dotnet-stream/README.md create mode 100644 dotnet-stream/Receive/Receive.cs create mode 100644 dotnet-stream/Receive/Receive.csproj create mode 100644 dotnet-stream/Send/Send.csproj create mode 100644 dotnet-stream/Send/Sends.cs create mode 100644 dotnet-stream/dotnet-stream.sln diff --git a/dotnet-stream/.gitignore b/dotnet-stream/.gitignore new file mode 100644 index 00000000..7c5f7a3b --- /dev/null +++ b/dotnet-stream/.gitignore @@ -0,0 +1,113 @@ +## Misc files +*.bak +.DS_Store +.idea +InternalTrace* +[Ll]ocal.dist +[Ll]ocal.props +*.lock.json +nunit-agent* +*.pyc +*.VisualState.xml +.vscode + +## Misc directories +.fake/ +gensrc/ +.ionide/ +NuGet/ +tmp/ +.vscode/ + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ +*.lock.json + +BenchmarkDotNet.Artifacts/* + +APIApproval.Approve.received.txt + +# Visual Studio 2015 cache/options directory +.vs/ + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# NuGet Packages Directory +packages/ +/packages + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# Unit tests +projects/Unit*/TestResult.xml + +# Development scripts +*.pcap + +# Vim +.sw? +.*.sw? diff --git a/dotnet-stream/README.md b/dotnet-stream/README.md new file mode 100644 index 00000000..900f4111 --- /dev/null +++ b/dotnet-stream/README.md @@ -0,0 +1,29 @@ +# Dotnet Stream C# code for RabbitMQ tutorials + +Here you can find the C# code examples for [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 8.0. + +To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +## Requirements + +### Requirements on Windows + +* [dotnet core](https://www.microsoft.com/net/core) + +We're using the command line (start->run cmd.exe) to +compile and run the code. + +### Requirements on Linux + +* [dotnet core](https://www.microsoft.com/net/core) + +### Code + +Each command is best run in a separate console/terminal instance run from the root +of the tutorial directory. + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet-stream.html) + + dotnet run --project Receive/Receive.csproj + dotnet run --project Send/Send.csproj diff --git a/dotnet-stream/Receive/Receive.cs b/dotnet-stream/Receive/Receive.cs new file mode 100644 index 00000000..b65a75d1 --- /dev/null +++ b/dotnet-stream/Receive/Receive.cs @@ -0,0 +1,30 @@ +// See https://aka.ms/new-console-template for more information + +using System.Text; +using RabbitMQ.Stream.Client; +using RabbitMQ.Stream.Client.Reliable; + +var streamSystem = await StreamSystem.Create(new StreamSystemConfig()); + +await streamSystem.CreateStream(new StreamSpec("hello-stream") +{ + MaxLengthBytes = 5_000_000_000 +}); + + +var consumer = await Consumer.Create(new ConsumerConfig(streamSystem, "hello-stream") +{ + OffsetSpec = new OffsetTypeFirst(), + MessageHandler = async (stream, _, _, message) => + { + Console.WriteLine($"Stream: {stream} - " + + $"Received message: {Encoding.UTF8.GetString(message.Data.Contents)}"); + await Task.CompletedTask; + } +}); + +Console.WriteLine(" [x] Press any key to exit"); +Console.ReadKey(); + +await consumer.Close(); +await streamSystem.Close(); \ No newline at end of file diff --git a/dotnet-stream/Receive/Receive.csproj b/dotnet-stream/Receive/Receive.csproj new file mode 100644 index 00000000..cdeff191 --- /dev/null +++ b/dotnet-stream/Receive/Receive.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + enable + enable + ReceiveHello + + + + + + + diff --git a/dotnet-stream/Send/Send.csproj b/dotnet-stream/Send/Send.csproj new file mode 100644 index 00000000..f1c5fe93 --- /dev/null +++ b/dotnet-stream/Send/Send.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + enable + enable + SendHello + + + + + + + diff --git a/dotnet-stream/Send/Sends.cs b/dotnet-stream/Send/Sends.cs new file mode 100644 index 00000000..55617e3d --- /dev/null +++ b/dotnet-stream/Send/Sends.cs @@ -0,0 +1,21 @@ +using System.Text; +using RabbitMQ.Stream.Client; +using RabbitMQ.Stream.Client.Reliable; + +var streamSystem = await StreamSystem.Create(new StreamSystemConfig()); + +await streamSystem.CreateStream(new StreamSpec("hello-stream") +{ + MaxLengthBytes = 5_000_000_000 +}); + +var producer = await Producer.Create(new ProducerConfig(streamSystem, "hello-stream")); + + +await producer.Send(new Message(Encoding.UTF8.GetBytes($"Hello, World"))); +Console.WriteLine(" [x] Sent 'Hello, World'"); + +Console.WriteLine(" [x] Press any key to exit"); +Console.ReadKey(); +await producer.Close(); +await streamSystem.Close(); \ No newline at end of file diff --git a/dotnet-stream/dotnet-stream.sln b/dotnet-stream/dotnet-stream.sln new file mode 100644 index 00000000..e1b05502 --- /dev/null +++ b/dotnet-stream/dotnet-stream.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Send", "Send\Send.csproj", "{C23444A1-BCB9-46A6-8D6D-7783C03E2A2E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Receive", "Receive\Receive.csproj", "{37F1D7F4-58B1-4A1B-BE76-178A9D7A91E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C23444A1-BCB9-46A6-8D6D-7783C03E2A2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C23444A1-BCB9-46A6-8D6D-7783C03E2A2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C23444A1-BCB9-46A6-8D6D-7783C03E2A2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C23444A1-BCB9-46A6-8D6D-7783C03E2A2E}.Release|Any CPU.Build.0 = Release|Any CPU + {37F1D7F4-58B1-4A1B-BE76-178A9D7A91E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37F1D7F4-58B1-4A1B-BE76-178A9D7A91E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37F1D7F4-58B1-4A1B-BE76-178A9D7A91E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37F1D7F4-58B1-4A1B-BE76-178A9D7A91E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal From 4cd212bb55b4af9100eb311e4952b490e6d6e027 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Thu, 9 May 2024 09:23:06 +0200 Subject: [PATCH 338/659] Hello world for Golang stream client (#383) --- go-stream/README.md | 24 +++++++++++++++++++++ go-stream/go.mod | 13 ++++++++++++ go-stream/go.sum | 12 +++++++++++ go-stream/receive.go | 50 ++++++++++++++++++++++++++++++++++++++++++++ go-stream/send.go | 47 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 146 insertions(+) create mode 100644 go-stream/README.md create mode 100644 go-stream/go.mod create mode 100644 go-stream/go.sum create mode 100644 go-stream/receive.go create mode 100644 go-stream/send.go diff --git a/go-stream/README.md b/go-stream/README.md new file mode 100644 index 00000000..5c49f3ff --- /dev/null +++ b/go-stream/README.md @@ -0,0 +1,24 @@ +# Go code for RabbitMQ tutorials + + +Here you can find Go code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). + + +## Requirements + +These examples use the [`rabbitmq/rabbitmq-stream-go-client`](https://github.com/rabbitmq/rabbitmq-stream-go-client) client library. +Get it first with + + go get -u github.com/rabbitmq/rabbitmq-stream-go-client + +## Code + +Code examples are executed via `go run`: + +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-go-stream.html): + + go run send.go + go run receive.go + + +To learn more, see [`rabbitmq/rabbitmq-stream-go-client`](https://github.com/rabbitmq/rabbitmq-stream-go-client). diff --git a/go-stream/go.mod b/go-stream/go.mod new file mode 100644 index 00000000..f546e959 --- /dev/null +++ b/go-stream/go.mod @@ -0,0 +1,13 @@ +module github.com/rabbitmq/rabbitmq-tutorials + +go 1.22.0 + +require github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1 + +require ( + github.com/golang/snappy v0.0.4 // indirect + github.com/klauspost/compress v1.17.8 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect +) diff --git a/go-stream/go.sum b/go-stream/go.sum new file mode 100644 index 00000000..f848b4c5 --- /dev/null +++ b/go-stream/go.sum @@ -0,0 +1,12 @@ +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1 h1:QWHiXPio2rhQU98TKFhyooGWH2Xviwwz9RFGdIpIlUg= +github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1/go.mod h1:CbFPhxC2+ctPq0FmWD3CiZWWGiP7sP4joRpw4YTlyL4= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= diff --git a/go-stream/receive.go b/go-stream/receive.go new file mode 100644 index 00000000..4a1db036 --- /dev/null +++ b/go-stream/receive.go @@ -0,0 +1,50 @@ +package main + +import ( + "bufio" + "fmt" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" + "os" +) + +func CheckErrReceive(err error) { + if err != nil { + fmt.Printf("%s ", err) + os.Exit(1) + } +} +func main() { + + env, err := stream.NewEnvironment( + stream.NewEnvironmentOptions(). + SetHost("localhost"). + SetPort(5552). + SetUser("guest"). + SetPassword("guest")) + CheckErrReceive(err) + + streamName := "hello-go-stream" + err = env.DeclareStream(streamName, + &stream.StreamOptions{ + MaxLengthBytes: stream.ByteCapacity{}.GB(2), + }, + ) + CheckErrReceive(err) + + messagesHandler := func(consumerContext stream.ConsumerContext, message *amqp.Message) { + fmt.Printf("Stream: %s - Received message: %s\n", consumerContext.Consumer.GetStreamName(), + message.Data) + } + + consumer, err := env.NewConsumer(streamName, messagesHandler, + stream.NewConsumerOptions().SetOffset(stream.OffsetSpecification{}.First())) + CheckErrReceive(err) + + reader := bufio.NewReader(os.Stdin) + fmt.Println(" [x] Waiting for messages. enter to close the consumer") + _, _ = reader.ReadString('\n') + err = consumer.Close() + CheckErrReceive(err) + +} diff --git a/go-stream/send.go b/go-stream/send.go new file mode 100644 index 00000000..3d41b18b --- /dev/null +++ b/go-stream/send.go @@ -0,0 +1,47 @@ +package main + +import ( + "bufio" + "fmt" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" + "os" +) + +func CheckErrSend(err error) { + if err != nil { + fmt.Printf("%s ", err) + os.Exit(1) + } +} +func main() { + env, err := stream.NewEnvironment( + stream.NewEnvironmentOptions(). + SetHost("localhost"). + SetPort(5552). + SetUser("guest"). + SetPassword("guest")) + CheckErrSend(err) + + streamName := "hello-go-stream" + err = env.DeclareStream(streamName, + &stream.StreamOptions{ + MaxLengthBytes: stream.ByteCapacity{}.GB(2), + }, + ) + CheckErrSend(err) + + producer, err := env.NewProducer(streamName, stream.NewProducerOptions()) + CheckErrSend(err) + + // Send a message + err = producer.Send(amqp.NewMessage([]byte("Hello world"))) + CheckErrSend(err) + fmt.Printf(" [x] 'Hello world' Message sent\n") + + reader := bufio.NewReader(os.Stdin) + fmt.Println(" [x] Press enter to close the producer") + _, _ = reader.ReadString('\n') + err = producer.Close() + CheckErrSend(err) +} From e332fa09f069a4e5ac4ebff7c2c463deec960213 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Thu, 9 May 2024 10:10:31 +0200 Subject: [PATCH 339/659] rename file from sends to send (#405) Signed-off-by: Gabriele Santomaggio --- dotnet-stream/Send/{Sends.cs => Send.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dotnet-stream/Send/{Sends.cs => Send.cs} (100%) diff --git a/dotnet-stream/Send/Sends.cs b/dotnet-stream/Send/Send.cs similarity index 100% rename from dotnet-stream/Send/Sends.cs rename to dotnet-stream/Send/Send.cs From abcd941a28afb890e74e211e3fed9aa7b605fd2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 17:27:57 +0000 Subject: [PATCH 340/659] Bump org.mockito:mockito-core from 5.11.0 to 5.12.0 in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.11.0 to 5.12.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.11.0...v5.12.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index fd0cc922..4b2f1622 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.11.0 + 5.12.0 test From 3d31d0439adcf38c2600e1a0685f9b34551f7073 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 17:38:28 +0000 Subject: [PATCH 341/659] Bump org.mockito:mockito-core from 5.11.0 to 5.12.0 in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.11.0 to 5.12.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.11.0...v5.12.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c84c0b32..6d7dfee5 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.13' testImplementation 'org.assertj:assertj-core:3.25.3' - testImplementation 'org.mockito:mockito-core:5.11.0' + testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' From 3845ab8d298e030a96edddd9ca391c35104eaae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 14 May 2024 09:00:07 +0200 Subject: [PATCH 342/659] Require at least Java 17 for Spring AMQP tutorial --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 1f7e8599..a66e5963 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -46,7 +46,7 @@ maven-compiler-plugin 3.13.0 - 21 + 17 From fdc7b9ffb64e1bb89eff8358599f404a0f0fef0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 14 May 2024 11:02:31 +0200 Subject: [PATCH 343/659] Make processing shorter in Spring AMQP tutorial 2 Or the consumer application may stop before all messages are processed, making the user believe some messages have been lost. --- .../org/springframework/amqp/tutorials/tut2/Tut2Receiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java index a3396ee9..07c845ae 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/tut2/Tut2Receiver.java @@ -45,7 +45,7 @@ public void receive(String in) throws InterruptedException { private void doWork(String in) throws InterruptedException { for (char ch : in.toCharArray()) { if (ch == '.') { - Thread.sleep(1000); + Thread.sleep(500); } } } From b70518412fcb4b1d32ec8ffbdcbf4036fb4735cf Mon Sep 17 00:00:00 2001 From: hogimn Date: Sun, 19 May 2024 15:34:57 +0900 Subject: [PATCH 344/659] Upgrade gradle version to 8.5 --- java-gradle/gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/gradle/wrapper/gradle-wrapper.properties b/java-gradle/gradle/wrapper/gradle-wrapper.properties index ae04661e..a5952066 100644 --- a/java-gradle/gradle/wrapper/gradle-wrapper.properties +++ b/java-gradle/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From e60d6bcd431533a0f9ec8a999cd52c5645815dde Mon Sep 17 00:00:00 2001 From: hogimn Date: Sun, 19 May 2024 15:12:37 +0900 Subject: [PATCH 345/659] Update README.md --- dotnet/README.md | 87 ++++++++++++++++++++++++++++++++++++------- java-gradle/README.md | 57 ++++++++++++++++------------ 2 files changed, 107 insertions(+), 37 deletions(-) diff --git a/dotnet/README.md b/dotnet/README.md index 0afbfda4..7f098640 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -28,34 +28,95 @@ of the tutorial directory. #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html) - dotnet run --project Receive/Receive.csproj - dotnet run --project Send/Send.csproj +```bash +# terminal tab 1 +dotnet run --project Receive/Receive.csproj + +# terminal tab 2 +dotnet run --project Send/Send.csproj +``` #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html) - dotnet run --project Worker/Worker.csproj - dotnet run --project NewTask/NewTask.csproj +```bash +# terminal tab 1 +dotnet run --project Worker/Worker.csproj + +# terminal tab 2 +dotnet run --project Worker/Worker.csproj + +# terminal tab 3 +dotnet run --project NewTask/NewTask.csproj "First Message" +dotnet run --project NewTask/NewTask.csproj "Second Message" +dotnet run --project NewTask/NewTask.csproj "Third Message" +dotnet run --project NewTask/NewTask.csproj "Fourth Message" +dotnet run --project NewTask/NewTask.csproj "Fifth Message" +``` #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html) - dotnet run --project ReceiveLogs/ReceiveLogs.csproj - dotnet run --project EmitLog/EmitLog.csproj +```bash +# terminal tab 1 +dotnet run --project ReceiveLogs/ReceiveLogs.csproj + +# terminal tab 2 +dotnet run --project ReceiveLogs/ReceiveLogs.csproj + +# terminal tab 3 +dotnet run --project EmitLog/EmitLog.csproj +``` #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html) - dotnet run --project ReceiveLogsDirect/ReceiveLogsDirect.csproj info - dotnet run --project EmitLogDirect/EmitLogDirect.csproj +```bash +# terminal tab 1 +dotnet run --project ReceiveLogsDirect/ReceiveLogsDirect.csproj warning error + +# terminal tab 2 +dotnet run --project ReceiveLogsDirect/ReceiveLogsDirect.csproj info warning error + +# terminal tab 3 +dotnet run --project EmitLogDirect/EmitLogDirect.csproj info "Run. Run. Or it will explode." +dotnet run --project EmitLogDirect/EmitLogDirect.csproj warning "Run. Run. Or it will explode." +dotnet run --project EmitLogDirect/EmitLogDirect.csproj error "Run. Run. Or it will explode." +``` #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html) - dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj anonymous.info - dotnet run --project EmitLogTopic/EmitLogTopic.csproj +```bash +# terminal tab 1 +# To receive all the logs: +dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj "#" + +# To receive all logs from the facility "kern": +dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj "kern.*" + +# Or if you want to hear only about "critical" logs: +dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj "*.critical" + +# You can create multiple bindings: +dotnet run --project ReceiveLogsTopic/ReceiveLogsTopic.csproj "kern.*" "*.critical" + +# terminal tab 2 +# And to emit a log with a routing key "kern.critical" type: +dotnet run --project EmitLogTopic/EmitLogTopic.csproj kern.critical "A critical kernel error" +``` #### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html) - dotnet run --project RPCServer/RPCServer.csproj - dotnet run --project RPCClient/RPCClient.csproj +```bash +# terminal tab 1 +# Our RPC service is now ready. We can start the server: +dotnet run --project RPCServer/RPCServer.csproj + +# terminal tab 2 +# To request a fibonacci number run the client: +dotnet run --project RPCClient/RPCClient.csproj +``` #### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-dotnet.html) - dotnet run --project PublisherConfirms/PublisherConfirms.csproj +```bash +# terminal tab 1 +dotnet run --project PublisherConfirms/PublisherConfirms.csproj +``` diff --git a/java-gradle/README.md b/java-gradle/README.md index 0bed78b6..42bbe06a 100644 --- a/java-gradle/README.md +++ b/java-gradle/README.md @@ -16,7 +16,7 @@ To successfully use the examples you will need a RabbitMQ node running locally. - Run pull-source-files.bat to replace symbolic link to the actual source file. ```shell -.\pull-source-files.bat +./pull-source-files.bat ``` ## Code @@ -25,82 +25,91 @@ To successfully use the examples you will need a RabbitMQ node running locally. ```shell # terminal tab 1 -gradle -Pmain=Recv run +./gradlew -Pmain=Recv run # terminal tab 2 -gradle -Pmain=Send run +./gradlew -Pmain=Send run ``` #### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): ```shell # terminal tab 1 -gradle -Pmain=Worker run -gradle -Pmain=Worker run +./gradlew -Pmain=Worker run +./gradlew -Pmain=Worker run # terminal tab 2 -gradle -Pmain=NewTask run --args "First Message" -gradle -Pmain=NewTask run --args "Second Message" -gradle -Pmain=NewTask run --args "Third Message" -gradle -Pmain=NewTask run --args "Fourth Message" -gradle -Pmain=NewTask run --args "Fifth Message" +./gradlew -Pmain=NewTask run --args "First Message" +./gradlew -Pmain=NewTask run --args "Second Message" +./gradlew -Pmain=NewTask run --args "Third Message" +./gradlew -Pmain=NewTask run --args "Fourth Message" +./gradlew -Pmain=NewTask run --args "Fifth Message" ``` #### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) ```shell # terminal tab 1 -gradle -Pmain=ReceiveLogs run +./gradlew -Pmain=ReceiveLogs run # terminal tab 2 -gradle -Pmain=EmitLog run +./gradlew -Pmain=ReceiveLogs run + +# terminal tab 3 +./gradlew -Pmain=EmitLog run ``` #### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-java.html) ```shell # terminal tab 1 -gradle -Pmain=ReceiveLogsDirect run --args "warning error" +./gradlew -Pmain=ReceiveLogsDirect run --args "warning error" # terminal tab 2 -gradle -Pmain=ReceiveLogsDirect run --args "info warning error" +./gradlew -Pmain=ReceiveLogsDirect run --args "info warning error" # terminal tab 3 -gradle -Pmain=EmitLogDirect run --args "error Run. Run. Or it will explode" +./gradlew -Pmain=EmitLogDirect run --args 'info "Run. Run. Or it will explode"' +./gradlew -Pmain=EmitLogDirect run --args 'warning "Run. Run. Or it will explode"' +./gradlew -Pmain=EmitLogDirect run --args 'error "Run. Run. Or it will explode"' ``` #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-java.html) ```shell +# terminal tab 1 # To receive all the logs: -gradle -Pmain=ReceiveLogsTopic run --args "#" +./gradlew -Pmain=ReceiveLogsTopic run --args "#" # To receive all logs from the facility "kern": -gradle -Pmain=ReceiveLogsTopic run --args "kern.*" +./gradlew -Pmain=ReceiveLogsTopic run --args "kern.*" # Or if you want to hear only about "critical" logs: -gradle -Pmain=ReceiveLogsTopic run --args "*.critical" +./gradlew -Pmain=ReceiveLogsTopic run --args "*.critical" # You can create multiple bindings: -gradle -Pmain=ReceiveLogsTopic run --args "kern.* *.critical" +./gradlew -Pmain=ReceiveLogsTopic run --args "kern.* *.critical" +# terminal tab 2 # And to emit a log with a routing key "kern.critical" type: -gradle -Pmain=EmitLogTopic run --args "kern.critical A critical kernel error" +./gradlew -Pmain=EmitLogTopic run --args "kern.critical A critical kernel error" ``` #### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-java.html) ```shell +# terminal tab 1 # Our RPC service is now ready. We can start the server: -gradle -Pmain=RPCServer run +./gradlew -Pmain=RPCServer run +# terminal tab 2 # To request a fibonacci number run the client: -gradle -Pmain=RPCClient run +./gradlew -Pmain=RPCClient run ``` #### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-java.html) ```shell -# -gradle -Pmain=PublisherConfirms run +# terminal tab 1 +./gradlew -Pmain=PublisherConfirms run ``` From 4a7ccd74671a65c8f20f0c762c4a05f956b8d617 Mon Sep 17 00:00:00 2001 From: hogimn Date: Sun, 19 May 2024 16:57:56 +0900 Subject: [PATCH 346/659] Update README.md Delete non-existent projects --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index d0643422..208a8ece 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,6 @@ more about various [installation options](https://www.rabbitmq.com/download.html The following ports are available: * [C#](./dotnet) - * [C# (with Visual Studio)](./dotnet-visual-studio) - * [C# (.NET 6.0)](./dotnet-6) * [Clojure](./clojure) * [Common Lisp](./common-lisp) * [Dart](./dart) From d9704835f28dfc949c7fd8778a0023c7a3221571 Mon Sep 17 00:00:00 2001 From: hogimn Date: Mon, 20 May 2024 22:15:01 +0900 Subject: [PATCH 347/659] Create README.md for java-mvn --- java-mvn/README.md | 119 +++++++++++++++++++++++++++++++++ java-mvn/pull-source-files.bat | 1 + 2 files changed, 120 insertions(+) create mode 100644 java-mvn/README.md create mode 100644 java-mvn/pull-source-files.bat diff --git a/java-mvn/README.md b/java-mvn/README.md new file mode 100644 index 00000000..1786eecb --- /dev/null +++ b/java-mvn/README.md @@ -0,0 +1,119 @@ +# Java code for RabbitMQ tutorials + +Here you can find the Java code examples from [RabbitMQ +tutorials](https://www.rabbitmq.com/getstarted.html). + +To successfully use the examples you will need a RabbitMQ node running locally. + +You can easily set this up by [installing RabbitMQ](https://www.rabbitmq.com/docs/download). + +## Requirements + +### Linux + +- Note the source files are symbolic links to the [java](https://github.com/rabbitmq/rabbitmq-tutorials/tree/main/java) directory. + +### Windows + +- Run pull-source-files.bat to replace symbolic link to the actual source file. + +```shell +./pull-source-files.bat +``` + +## Code + +#### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java.html): + +```shell +# terminal tab 1 +./mvnw compile exec:java -D"exec.mainClass=Recv" + +# terminal tab 2 +./mvnw compile exec:java -D"exec.mainClass=Send" +``` + +#### [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-java.html): + +```shell +# terminal tab 1 +./mvnw compile exec:java -D"exec.mainClass=Worker" + +# terminal tab 2 +./mvnw compile exec:java -D"exec.mainClass=Worker" + +# terminal tab 3 +./mvnw compile exec:java -D"exec.mainClass=NewTask" -D"exec.args='First Message'" +./mvnw compile exec:java -D"exec.mainClass=NewTask" -D"exec.args='Second Message'" +./mvnw compile exec:java -D"exec.mainClass=NewTask" -D"exec.args='Third Message'" +./mvnw compile exec:java -D"exec.mainClass=NewTask" -D"exec.args='Fourth Message'" +./mvnw compile exec:java -D"exec.mainClass=NewTask" -D"exec.args='Fifth Message'" +``` + +#### [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-java.html) + +```shell +# terminal tab 1 +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogs" + +# terminal tab 2 +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogs" + +# terminal tab 3 +./mvnw compile exec:java -D"exec.mainClass=EmitLog" +``` + +#### [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-java.html) + +```shell +# terminal tab 1 +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsDirect" -D"exec.args=warning error" + +# terminal tab 2 +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsDirect" -D"exec.args=info warning error" + +# terminal tab 3 +./mvnw compile exec:java -D"exec.mainClass=EmitLogDirect" -D"exec.args=info 'Run. Run. Or it will explode'" +./mvnw compile exec:java -D"exec.mainClass=EmitLogDirect" -D"exec.args=warning 'Run. Run. Or it will explode'" +./mvnw compile exec:java -D"exec.mainClass=EmitLogDirect" -D"exec.args=error 'Run. Run. Or it will explode'" +``` + +#### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-java.html) + +```shell +# terminal tab 1 +# To receive all the logs: +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsTopic" -D"exec.args=#" + +# To receive all logs from the facility "kern": +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsTopic" -D"exec.args=kern.*" + +# Or if you want to hear only about "critical" logs: +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsTopic" -D"exec.args=*.critical" + +# You can create multiple bindings: +./mvnw compile exec:java -D"exec.mainClass=ReceiveLogsTopic" -D"exec.args=kern.* *.critical" + +# terminal tab 2 +# And to emit a log with a routing key "kern.critical" type: +./mvnw compile exec:java -D"exec.mainClass=EmitLogTopic" -D"exec.args=kern.critical A critical kernel error" +``` + +#### [Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-java.html) + +```shell +# terminal tab 1 +# Our RPC service is now ready. We can start the server: +./mvnw compile exec:java -D"exec.mainClass=RPCServer" + +# terminal tab 2 +# To request a fibonacci number run the client: +./mvnw compile exec:java -D"exec.mainClass=RPCClient" +``` + +#### [Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-java.html) + +```shell +# terminal tab 1 +./mvnw compile exec:java -D"exec.mainClass=PublisherConfirms" +``` diff --git a/java-mvn/pull-source-files.bat b/java-mvn/pull-source-files.bat new file mode 100644 index 00000000..f414b47a --- /dev/null +++ b/java-mvn/pull-source-files.bat @@ -0,0 +1 @@ +copy ..\java\*.java src\main\java\ \ No newline at end of file From d95d58f3d73ca59d667aa9eb405e027e1c31fe29 Mon Sep 17 00:00:00 2001 From: hogimn Date: Mon, 20 May 2024 22:15:22 +0900 Subject: [PATCH 348/659] Update README.md --- dotnet/README.md | 2 ++ java-gradle/README.md | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/dotnet/README.md b/dotnet/README.md index 7f098640..e5c4feb5 100644 --- a/dotnet/README.md +++ b/dotnet/README.md @@ -7,6 +7,8 @@ You will also find a solution file for Visual Studio 2022. To successfully use the examples you will need a running RabbitMQ server. +You can easily set this up by [installing RabbitMQ](https://www.rabbitmq.com/docs/download). + ## Requirements ### Requirements on Windows diff --git a/java-gradle/README.md b/java-gradle/README.md index 42bbe06a..1d0319f2 100644 --- a/java-gradle/README.md +++ b/java-gradle/README.md @@ -5,6 +5,8 @@ tutorials](https://www.rabbitmq.com/getstarted.html). To successfully use the examples you will need a RabbitMQ node running locally. +You can easily set this up by [installing RabbitMQ](https://www.rabbitmq.com/docs/download). + ## Requirements ### Linux @@ -36,9 +38,11 @@ To successfully use the examples you will need a RabbitMQ node running locally. ```shell # terminal tab 1 ./gradlew -Pmain=Worker run -./gradlew -Pmain=Worker run # terminal tab 2 +./gradlew -Pmain=Worker run + +# terminal tab 3 ./gradlew -Pmain=NewTask run --args "First Message" ./gradlew -Pmain=NewTask run --args "Second Message" ./gradlew -Pmain=NewTask run --args "Third Message" @@ -69,9 +73,9 @@ To successfully use the examples you will need a RabbitMQ node running locally. ./gradlew -Pmain=ReceiveLogsDirect run --args "info warning error" # terminal tab 3 -./gradlew -Pmain=EmitLogDirect run --args 'info "Run. Run. Or it will explode"' -./gradlew -Pmain=EmitLogDirect run --args 'warning "Run. Run. Or it will explode"' -./gradlew -Pmain=EmitLogDirect run --args 'error "Run. Run. Or it will explode"' +./gradlew -Pmain=EmitLogDirect run --args "info 'Run. Run. Or it will explode'" +./gradlew -Pmain=EmitLogDirect run --args "warning 'Run. Run. Or it will explode'" +./gradlew -Pmain=EmitLogDirect run --args "error 'Run. Run. Or it will explode'" ``` #### [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-java.html) From 54b902ff334e85320c75e898f515a87baee46e50 Mon Sep 17 00:00:00 2001 From: hogimn Date: Tue, 21 May 2024 21:00:09 +0900 Subject: [PATCH 349/659] Update JAR file path in usage instructions Changed instances of 'java -jar rabbit-tutorials.jar' to 'java -jar target/rabbitmq-tutorials.jar' to ensure users execute the correct JAR file from the appropriate directory. --- .../RabbitAmqpTutorialsApplication.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java index 5b760151..b7240775 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -37,18 +37,18 @@ public CommandLineRunner usage() { return args -> { System.out.println("This app uses Spring Profiles to control its behavior.\n"); System.out.println("Options are: "); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=hello-world,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=work-queues,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=pub-sub,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=routing,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,receiver"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=topics,sender"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,client"); - System.out.println("java -jar rabbit-tutorials.jar --spring.profiles.active=rpc,server"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,receiver"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,sender"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,receiver"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,receiver"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,sender"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,receiver"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,sender"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,receiver"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,sender"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,client"); + System.out.println("java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,server"); }; } From ee29bd433cb2683835d8047976bb2efa3c613568 Mon Sep 17 00:00:00 2001 From: hogimn Date: Tue, 21 May 2024 21:17:54 +0900 Subject: [PATCH 350/659] Update README.md --- spring-amqp/README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/spring-amqp/README.md b/spring-amqp/README.md index 2a9708d7..0e48400b 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -51,6 +51,32 @@ java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sen For tutorial 6, run the server followed by the client. +You can find more usage instructions by running the following command: + +``` +java -jar target/rabbitmq-tutorials.jar +``` + +This will display the following message: + +``` +This app uses Spring Profiles to control its behavior. + +Options are: +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,receiver +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,sender +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,receiver +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,receiver +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,sender +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,receiver +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,sender +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,receiver +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,sender +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,client +java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,server +``` + ## Configuration When running receivers/servers it's useful to set the duration the app runs to a longer time. Do this by setting From ab667da5af5b8b4644cc830535488ab02fc6bc47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 17:41:21 +0000 Subject: [PATCH 351/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.2.5...v3.3.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index a66e5963..c2217171 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.5 + 3.3.0 From 611bc599b93ae1ec2f3f1108b7c44bdbeb74173b Mon Sep 17 00:00:00 2001 From: hogimn Date: Sat, 25 May 2024 20:05:58 +0900 Subject: [PATCH 352/659] Added RabbitMQ streams setup to README --- dotnet-stream/README.md | 2 ++ go-stream/README.md | 4 +++- java-stream-mvn/README.md | 4 ++++ javascript-nodejs-stream/README.md | 4 +++- rust-stream/README.md | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dotnet-stream/README.md b/dotnet-stream/README.md index 900f4111..95572ba4 100644 --- a/dotnet-stream/README.md +++ b/dotnet-stream/README.md @@ -5,6 +5,8 @@ tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 8.0. To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). +You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). + ## Requirements ### Requirements on Windows diff --git a/go-stream/README.md b/go-stream/README.md index 5c49f3ff..b31bc6a8 100644 --- a/go-stream/README.md +++ b/go-stream/README.md @@ -1,8 +1,10 @@ # Go code for RabbitMQ tutorials - Here you can find Go code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). +To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). ## Requirements diff --git a/java-stream-mvn/README.md b/java-stream-mvn/README.md index 6b817dcc..a550b40a 100644 --- a/java-stream-mvn/README.md +++ b/java-stream-mvn/README.md @@ -2,6 +2,10 @@ Here you can find Java code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). +To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). + ## Requirements These examples use the [`rabbitmq-stream-java-client`](https://github.com/rabbitmq/rabbitmq-stream-java-client) client library. diff --git a/javascript-nodejs-stream/README.md b/javascript-nodejs-stream/README.md index 1987d585..95c7837b 100644 --- a/javascript-nodejs-stream/README.md +++ b/javascript-nodejs-stream/README.md @@ -2,7 +2,9 @@ Here you can find JavaScript (Node) code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html) related to the [Stream plugin](https://www.rabbitmq.com/docs/stream). -To successfully use the examples you will need a running RabbitMQ server. +To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). ## Requirements diff --git a/rust-stream/README.md b/rust-stream/README.md index 43748b03..d3ce0c85 100644 --- a/rust-stream/README.md +++ b/rust-stream/README.md @@ -7,6 +7,8 @@ The examples use [rabbitmq-stream-client](https://github.com/rabbitmq/rabbitmq-s These tutorials assume a RabbitMQ server node running locally using default ports and the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). +You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). + ## Requirements * [Rust and Cargo](https://www.rust-lang.org/tools/install) From ac7b262a0432e3b3d406b0c1d3f5ab65ef7a55a5 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 25 May 2024 13:20:04 -0400 Subject: [PATCH 353/659] Wording --- dotnet-stream/README.md | 6 +++--- go-stream/README.md | 2 +- java-stream-mvn/README.md | 4 ++-- javascript-nodejs-stream/README.md | 2 +- rust-stream/README.md | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dotnet-stream/README.md b/dotnet-stream/README.md index 95572ba4..8175f5d0 100644 --- a/dotnet-stream/README.md +++ b/dotnet-stream/README.md @@ -5,7 +5,7 @@ tutorials](https://www.rabbitmq.com/getstarted.html) using .NET 8.0. To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). -You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), [Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and [how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). ## Requirements @@ -13,8 +13,8 @@ You can easily set this up by [starting RabbitMQ with Streams Enabled](https://w * [dotnet core](https://www.microsoft.com/net/core) -We're using the command line (start->run cmd.exe) to -compile and run the code. +We're using the command line (`Start` -> `Run cmd.exe`) to +compile and run the code. ### Requirements on Linux diff --git a/go-stream/README.md b/go-stream/README.md index b31bc6a8..a1d5211a 100644 --- a/go-stream/README.md +++ b/go-stream/README.md @@ -4,7 +4,7 @@ Here you can find Go code examples from [RabbitMQ tutorials](https://www.rabbitm To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). -You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), [Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and [how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). ## Requirements diff --git a/java-stream-mvn/README.md b/java-stream-mvn/README.md index a550b40a..63d3865c 100644 --- a/java-stream-mvn/README.md +++ b/java-stream-mvn/README.md @@ -4,12 +4,12 @@ Here you can find Java code examples from [RabbitMQ tutorials](https://www.rabbi To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). -You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), [Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and [how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). ## Requirements These examples use the [`rabbitmq-stream-java-client`](https://github.com/rabbitmq/rabbitmq-stream-java-client) client library. -This example uses Maven to manage dependencies. +This example uses Maven to manage dependencies. ## Code diff --git a/javascript-nodejs-stream/README.md b/javascript-nodejs-stream/README.md index 95c7837b..433bb3e3 100644 --- a/javascript-nodejs-stream/README.md +++ b/javascript-nodejs-stream/README.md @@ -4,7 +4,7 @@ Here you can find JavaScript (Node) code examples from [RabbitMQ tutorials](http To successfully use the examples you will need a running RabbitMQ server with the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). -You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), [Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and [how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). ## Requirements diff --git a/rust-stream/README.md b/rust-stream/README.md index d3ce0c85..a02e81a5 100644 --- a/rust-stream/README.md +++ b/rust-stream/README.md @@ -7,7 +7,7 @@ The examples use [rabbitmq-stream-client](https://github.com/rabbitmq/rabbitmq-s These tutorials assume a RabbitMQ server node running locally using default ports and the [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). -You can easily set this up by [starting RabbitMQ with Streams Enabled](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application). +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), [Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and [how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). ## Requirements From 4590ab5e86fa16074fb9c02b96c3c8d9ef2ca85f Mon Sep 17 00:00:00 2001 From: hogimn Date: Sun, 26 May 2024 10:03:43 +0900 Subject: [PATCH 354/659] Add Spring AMQP stream tutorial --- .github/dependabot.yml | 6 + .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 18 + spring-amqp-stream/README.md | 71 ++++ spring-amqp-stream/mvnw | 308 ++++++++++++++++++ spring-amqp-stream/mvnw.cmd | 205 ++++++++++++ spring-amqp-stream/pom.xml | 60 ++++ .../RabbitAmqpTutorialsApplication.java | 34 ++ .../tutorials/RabbitAmqpTutorialsRunner.java | 22 ++ .../amqp/tutorials/tut1/Tut1Config.java | 56 ++++ .../amqp/tutorials/tut1/Tut1Receiver.java | 13 + .../amqp/tutorials/tut1/Tut1Sender.java | 18 + .../src/main/resources/application-remote.yml | 5 + .../src/main/resources/application.yml | 11 + .../src/main/resources/banner.txt | 4 + 15 files changed, 831 insertions(+) create mode 100644 spring-amqp-stream/.mvn/wrapper/maven-wrapper.jar create mode 100755 spring-amqp-stream/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-amqp-stream/README.md create mode 100755 spring-amqp-stream/mvnw create mode 100644 spring-amqp-stream/mvnw.cmd create mode 100644 spring-amqp-stream/pom.xml create mode 100644 spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java create mode 100644 spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java create mode 100644 spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java create mode 100644 spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java create mode 100644 spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java create mode 100644 spring-amqp-stream/src/main/resources/application-remote.yml create mode 100644 spring-amqp-stream/src/main/resources/application.yml create mode 100644 spring-amqp-stream/src/main/resources/banner.txt diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 06afb70d..cb605079 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,6 +20,12 @@ updates: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + - package-ecosystem: "maven" + directory: "/spring-amqp-stream" + schedule: + interval: "daily" + open-pull-requests-limit: 20 + target-branch: "main" - package-ecosystem: "gradle" directory: "/java-gradle" schedule: diff --git a/spring-amqp-stream/.mvn/wrapper/maven-wrapper.jar b/spring-amqp-stream/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 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 A?*IS* literal 0 HcmV?d00001 diff --git a/spring-amqp-stream/.mvn/wrapper/maven-wrapper.properties b/spring-amqp-stream/.mvn/wrapper/maven-wrapper.properties new file mode 100755 index 00000000..346d645f --- /dev/null +++ b/spring-amqp-stream/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/spring-amqp-stream/README.md b/spring-amqp-stream/README.md new file mode 100644 index 00000000..3acbcd75 --- /dev/null +++ b/spring-amqp-stream/README.md @@ -0,0 +1,71 @@ +# RabbitMQ Stream Tutorial Using Spring AMQP + +It is a CLI app that uses Spring Profiles to control its behavior. Each tutorial is a trio of classes: +sender, receiver, and configuration. + +## Prerequisites + +To successfully use the examples you will need a running RabbitMQ server with the + [stream plugin enabled](https://www.rabbitmq.com/docs/stream#enabling-plugin). + +See [First Application With RabbitMQ Streams](https://www.rabbitmq.com/blog/2021/07/19/rabbitmq-streams-first-application), +[Stream plugin documentation](https://www.rabbitmq.com/docs/stream) and +[how to preconfigure plugins](https://www.rabbitmq.com/docs/plugins#enabled-plugins-file). + +## Usage + +These tutorials use Maven. To build them run + +``` +./mvnw clean package +``` +The app uses Spring Profiles to control what tutorial it's running, and if it's a +Sender or Receiver. Choose which tutorial to run by using these profiles: + +- {tut1|hello-world},{sender|receiver} + +You can find usage instructions by running the following command: + +```bash +java -jar target/rabbitmq-stream-tutorials.jar +``` + +This will display the following message: + +```bash +This app uses Spring Profiles to control its behavior. + +Options are: +java -jar target/rabbitmq-stream-tutorials.jar --spring.profiles.active=hello-world,receiver +java -jar target/rabbitmq-stream-tutorials.jar --spring.profiles.active=hello-world,sender +``` + +## Configuration + +When running receivers/servers it's useful to set the duration the app runs to a longer time. Do this by setting +the `tutorial.client.duration` property. + +``` +java -jar target/rabbitmq-stream-tutorials.jar --spring.profiles.active=tut1,receiver,remote --tutorial.client.duration=60000 +``` + +By default, Spring AMQP uses localhost to connect to RabbitMQ. In the +sample, the `remote` profile causes Spring to load the properties in +`application-remote.yml` that are used for testing with a non-local +server. Set your own properties in the one in the project, or provide +your own on the command line when you run it. + +To use to a remote RabbitMQ installation set the following properties: + +``` +spring: + rabbitmq: + host: + username: + password: +``` + +To use this at runtime create a file called `application-remote.yml` (or properties) and set the properties in there. Then set the +remote profile as in the example above. See the [Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) +and [Spring AMQP documentation](https://docs.spring.io/spring-amqp/reference/html/) for more information on setting application +properties and AMQP properties specifically. diff --git a/spring-amqp-stream/mvnw b/spring-amqp-stream/mvnw new file mode 100755 index 00000000..8d937f4c --- /dev/null +++ b/spring-amqp-stream/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-amqp-stream/mvnw.cmd b/spring-amqp-stream/mvnw.cmd new file mode 100644 index 00000000..f80fbad3 --- /dev/null +++ b/spring-amqp-stream/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml new file mode 100644 index 00000000..fe2e11ae --- /dev/null +++ b/spring-amqp-stream/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.springframework.amqp + rabbitmq-tutorials + 2.0.0.RELEASE + jar + + rabbitmq-tutorials + Spring AMQP Implementations for RabbitMQ Tutorials + + + org.springframework.boot + spring-boot-starter-parent + 3.3.0 + + + + + UTF-8 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.amqp + spring-rabbit-stream + 3.1.5 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + org.springframework.amqp.tutorials.RabbitAmqpTutorialsApplication + rabbitmq-stream-tutorials + ZIP + + + + + maven-compiler-plugin + 3.13.0 + + 17 + + + + + + diff --git a/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java new file mode 100644 index 00000000..c6c949f4 --- /dev/null +++ b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsApplication.java @@ -0,0 +1,34 @@ +package org.springframework.amqp.tutorials; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class RabbitAmqpTutorialsApplication { + + @Profile("usage_message") + @Bean + public CommandLineRunner usage() { + return args -> { + System.out.println("This app uses Spring Profiles to control its behavior.\n"); + System.out.println("Options are: "); + System.out.println("java -jar target/rabbitmq-stream-tutorials.jar --spring.profiles.active=hello-world,receiver"); + System.out.println("java -jar target/rabbitmq-stream-tutorials.jar --spring.profiles.active=hello-world,sender"); + }; + } + + @Profile("!usage_message") + @Bean + public CommandLineRunner tutorial() { + return new RabbitAmqpTutorialsRunner(); + } + + public static void main(String[] args) { + SpringApplication.run(RabbitAmqpTutorialsApplication.class, args); + } +} diff --git a/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java new file mode 100644 index 00000000..ea9d624d --- /dev/null +++ b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/RabbitAmqpTutorialsRunner.java @@ -0,0 +1,22 @@ +package org.springframework.amqp.tutorials; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.ConfigurableApplicationContext; + +public class RabbitAmqpTutorialsRunner implements CommandLineRunner { + + @Value("${tutorial.client.duration:0}") + private int duration; + + @Autowired + private ConfigurableApplicationContext ctx; + + @Override + public void run(String... arg0) throws Exception { + System.out.println("Ready ... running for " + duration + "ms"); + Thread.sleep(duration); + ctx.close(); + } +} diff --git a/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java new file mode 100644 index 00000000..4ed59f29 --- /dev/null +++ b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Config.java @@ -0,0 +1,56 @@ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.rabbit.stream.config.StreamRabbitListenerContainerFactory; +import org.springframework.rabbit.stream.listener.StreamListenerContainer; +import org.springframework.rabbit.stream.producer.RabbitStreamTemplate; + +import com.rabbitmq.stream.ByteCapacity; +import com.rabbitmq.stream.Environment; +import com.rabbitmq.stream.OffsetSpecification; + +@Profile({"tut1","hello-world"}) +@Configuration +public class Tut1Config { + + private final String stream = "hello-spring-stream"; + + @Bean + public Environment rabbitStreamEnvironment() { + Environment environment = Environment.builder().build(); + environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create(); + return environment; + } + + @Bean + RabbitStreamTemplate streamTemplate(Environment env) { + return new RabbitStreamTemplate(env, stream); + } + + @Bean + RabbitListenerContainerFactory nativeFactory(Environment env) { + StreamRabbitListenerContainerFactory factory = new StreamRabbitListenerContainerFactory(env); + factory.setNativeListener(true); + factory.setConsumerCustomizer((id, builder) -> { + builder.stream(stream) + .offset(OffsetSpecification.first()) + .build(); + }); + return factory; + } + + @Profile("receiver") + @Bean + public Tut1Receiver receiver() { + return new Tut1Receiver(); + } + + @Profile("sender") + @Bean + public Tut1Sender sender() { + return new Tut1Sender(); + } +} diff --git a/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java new file mode 100644 index 00000000..8e56f311 --- /dev/null +++ b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Receiver.java @@ -0,0 +1,13 @@ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; + +import com.rabbitmq.stream.Message; + +public class Tut1Receiver { + + @RabbitListener(queues="hello-spring-stream", containerFactory="nativeFactory") + public void listen(Message message) { + System.out.println("Received message: " + new String(message.getBodyAsBinary())); + } +} diff --git a/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java new file mode 100644 index 00000000..3b01c0c1 --- /dev/null +++ b/spring-amqp-stream/src/main/java/org/springframework/amqp/tutorials/tut1/Tut1Sender.java @@ -0,0 +1,18 @@ +package org.springframework.amqp.tutorials.tut1; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.rabbit.stream.producer.RabbitStreamTemplate; +import org.springframework.scheduling.annotation.Scheduled; + +public class Tut1Sender { + + @Autowired + private RabbitStreamTemplate template; + + @Scheduled(fixedDelay = 1000, initialDelay = 500) + public void send() { + String message = "Hello World!"; + this.template.convertAndSend(message); + System.out.println(" [x] Sent '" + message + "'"); + } +} diff --git a/spring-amqp-stream/src/main/resources/application-remote.yml b/spring-amqp-stream/src/main/resources/application-remote.yml new file mode 100644 index 00000000..6914dca2 --- /dev/null +++ b/spring-amqp-stream/src/main/resources/application-remote.yml @@ -0,0 +1,5 @@ +spring: + rabbitmq: + host: rabbitserver + username: tutorial + password: tutorial diff --git a/spring-amqp-stream/src/main/resources/application.yml b/spring-amqp-stream/src/main/resources/application.yml new file mode 100644 index 00000000..452d6169 --- /dev/null +++ b/spring-amqp-stream/src/main/resources/application.yml @@ -0,0 +1,11 @@ +spring: + profiles: + active: usage_message + +logging: + level: + org: ERROR + +tutorial: + client: + duration: 10000 diff --git a/spring-amqp-stream/src/main/resources/banner.txt b/spring-amqp-stream/src/main/resources/banner.txt new file mode 100644 index 00000000..576a98ea --- /dev/null +++ b/spring-amqp-stream/src/main/resources/banner.txt @@ -0,0 +1,4 @@ + __ __ ___ +|__)_ |_ |_ .|_|\/|/ \ | |_ _ _. _ | _ +| \(_||_)|_)||_| |\_\/ | |_||_(_)| |(_||_) + \ No newline at end of file From b16db0a0f811bc13acdd851d8c9aaa87029a16dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 17:40:17 +0000 Subject: [PATCH 355/659] Bump org.assertj:assertj-core from 3.25.3 to 3.26.0 in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.25.3 to 3.26.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.25.3...assertj-build-3.26.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4b2f1622..685ae2db 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.25.3 + 3.26.0 test From 21eb496b324cd9b43417b740bdbb6beeecc2b78e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 18:02:35 +0000 Subject: [PATCH 356/659] Bump org.assertj:assertj-core from 3.25.3 to 3.26.0 in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.25.3 to 3.26.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.25.3...assertj-build-3.26.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 6d7dfee5..a5bc6427 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.13' - testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'org.assertj:assertj-core:3.26.0' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' From 2b1e447f92b292ac4a36b493bdff43fe1d2ff129 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 17:26:12 +0000 Subject: [PATCH 357/659] Bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.15.0 to 0.16.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Changelog](https://github.com/rabbitmq/rabbitmq-stream-java-client/blob/main/release-versions.txt) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.15.0...v0.16.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index e2fc6615..440f7f9f 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.15.0 + 0.16.0 org.slf4j From 4e3dbf5909f04aa8225d9dd8c13572342b781803 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:29:49 +0000 Subject: [PATCH 358/659] Bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.25 to 4.2.26. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.25...v4.2.26) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index a5bc6427..63067b1a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.13' testImplementation 'org.assertj:assertj-core:3.26.0' testImplementation 'org.mockito:mockito-core:5.12.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.25' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' } From 3f64afd212a092e8c5573f4fbe65feed6e8c357e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 18:05:30 +0000 Subject: [PATCH 359/659] Bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.25 to 4.2.26. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.25...v4.2.26) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 685ae2db..371a4905 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.25 + 4.2.26 test From f370984010a8ff9a241ee93f3e024edc8b369b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 11 Jun 2024 09:32:33 +0200 Subject: [PATCH 360/659] Fix POM for stream tutorial The plugins were defined in plugin management, which is not necessary. --- .../.mvn/wrapper/maven-wrapper.properties | 2 +- java-stream-mvn/pom.xml | 40 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties index 346d645f..11f58680 100644 --- a/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties +++ b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties @@ -14,5 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 440f7f9f..373629b3 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -27,28 +27,26 @@ - - - - maven-compiler-plugin - 3.13.0 - - 11 - 11 - 11 - - - - maven-clean-plugin - 3.3.2 - - - maven-resources-plugin - 3.3.1 - - - + + + maven-compiler-plugin + 3.13.0 + + 11 + 11 + 11 + + + + maven-clean-plugin + 3.3.2 + + + maven-resources-plugin + 3.3.1 + + From 0250cc24249838b9fb3286e1d5e28a54ad60b7e8 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Tue, 11 Jun 2024 11:23:55 -0700 Subject: [PATCH 361/659] Adjust mvnw quoting so that it will work on bash as well as PowerShell --- java-stream-mvn/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-stream-mvn/README.md b/java-stream-mvn/README.md index 63d3865c..b609efcb 100644 --- a/java-stream-mvn/README.md +++ b/java-stream-mvn/README.md @@ -19,8 +19,8 @@ Remove the `-q` flag to get more information in case an example does not behave [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-java-stream.html): ``` -./mvnw -q compile exec:java -Dexec.mainClass="Send" -./mvnw -q compile exec:java -Dexec.mainClass="Receive" +./mvnw -q compile exec:java '-Dexec.mainClass=Send' +./mvnw -q compile exec:java '-Dexec.mainClass=Receive' ``` To learn more, see [`rabbitmq/rabbitmq-stream-java-client`](https://github.com/rabbitmq/rabbitmq-stream-java-client). From 4657f312bdd8f18aa53ea672ab4c1e9616371d1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 17:44:20 +0000 Subject: [PATCH 362/659] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.5...surefire-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 371a4905..15a1b67c 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.2.5 + 3.3.0 ${test-arguments} From d65a266ead5ce05bdea20537e162a81562e65ea7 Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Tue, 18 Jun 2024 23:18:54 +0900 Subject: [PATCH 363/659] Update README.md with corrected links --- erlang/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erlang/README.md b/erlang/README.md index 02e8e71c..55fc65f3 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -4,18 +4,18 @@ Here you can find a Erlang code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). This code is using [RabbitMQ Erlang -Client](https://hg.rabbitmq.com/rabbitmq-erlang-client/) ([User +Client](https://github.com/rabbitmq/rabbitmq-server/tree/main/deps/amqp_client) ([User Guide](https://www.rabbitmq.com/erlang-client-user-guide.html)). ## Requirements To run this code you need at least [Erlang -R13B03](https://www.erlang.org/download.html), on Ubuntu you can get it +R13B03](https://www.erlang.org/downloads), on Ubuntu you can get it using apt: sudo apt-get install erlang -You also need rebar3: https://rebar3.readme.io/docs/getting-started +You also need rebar3: https://www.rebar3.org/docs/getting-started/ You need Erlang Client binaries: From 96d773f0fb9a093c78d20b84a06bee43da87c45c Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Tue, 18 Jun 2024 23:41:04 +0900 Subject: [PATCH 364/659] Replace jsx with thoas in escript This change aligns with the migration to `thoas` starting from RabbitMQ 3.11.0, as announced in https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.11.0 --- erlang/emit_log.erl | 2 +- erlang/emit_log_direct.erl | 2 +- erlang/emit_log_topic.erl | 2 +- erlang/new_task.erl | 2 +- erlang/receive.erl | 2 +- erlang/receive_logs.erl | 2 +- erlang/receive_logs_direct.erl | 2 +- erlang/receive_logs_topic.erl | 2 +- erlang/send.erl | 2 +- erlang/worker.erl | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/erlang/emit_log.erl b/erlang/emit_log.erl index 88297c3a..032a842c 100755 --- a/erlang/emit_log.erl +++ b/erlang/emit_log.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_direct.erl b/erlang/emit_log_direct.erl index e363a4f2..f3148837 100755 --- a/erlang/emit_log_direct.erl +++ b/erlang/emit_log_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/emit_log_topic.erl b/erlang/emit_log_topic.erl index 0934d9ef..1b9a7bad 100755 --- a/erlang/emit_log_topic.erl +++ b/erlang/emit_log_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/new_task.erl b/erlang/new_task.erl index 0ab63fc9..276de1e4 100755 --- a/erlang/new_task.erl +++ b/erlang/new_task.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive.erl b/erlang/receive.erl index 57cc0c5a..fe439499 100755 --- a/erlang/receive.erl +++ b/erlang/receive.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs.erl b/erlang/receive_logs.erl index 4043c292..decda979 100755 --- a/erlang/receive_logs.erl +++ b/erlang/receive_logs.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_direct.erl b/erlang/receive_logs_direct.erl index a03be869..63f67db0 100755 --- a/erlang/receive_logs_direct.erl +++ b/erlang/receive_logs_direct.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/receive_logs_topic.erl b/erlang/receive_logs_topic.erl index 0366a14a..203753aa 100755 --- a/erlang/receive_logs_topic.erl +++ b/erlang/receive_logs_topic.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/send.erl b/erlang/send.erl index eb39a748..ce0ffc2a 100755 --- a/erlang/send.erl +++ b/erlang/send.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). diff --git a/erlang/worker.erl b/erlang/worker.erl index 3b33f6d6..cdc33469 100755 --- a/erlang/worker.erl +++ b/erlang/worker.erl @@ -1,5 +1,5 @@ #!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/jsx/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin -include_lib("amqp_client/include/amqp_client.hrl"). From 5160cba875ed97f5f8320f7b6d3f8d7d6dc61bb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 17:58:05 +0000 Subject: [PATCH 365/659] Bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.1.5 to 3.1.6. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.1.5...v3.1.6) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index fe2e11ae..4a30d1d7 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.1.5 + 3.1.6 From 85f7e55d5666235cec2fdd54a872bc5346b3d7f2 Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Wed, 19 Jun 2024 19:42:47 +0900 Subject: [PATCH 366/659] Switch from escript to rebar3 for build management --- erlang/.gitignore | 22 ++++++++++++-- erlang/Makefile | 5 ---- erlang/README.md | 22 +++++++------- erlang/rebar.config | 11 ++++++- erlang/rebar.lock | 22 ++++++++++++++ erlang/{ => src}/emit_log.erl | 6 ++-- erlang/{ => src}/emit_log_direct.erl | 6 ++-- erlang/{ => src}/emit_log_topic.erl | 6 ++-- erlang/src/erlang.app.src | 14 +++++++++ erlang/src/erlang_app.erl | 18 ++++++++++++ erlang/src/erlang_sup.erl | 37 ++++++++++++++++++++++++ erlang/{ => src}/new_task.erl | 6 ++-- erlang/{ => src}/receive_logs.erl | 6 ++-- erlang/{ => src}/receive_logs_direct.erl | 6 ++-- erlang/{ => src}/receive_logs_topic.erl | 6 ++-- erlang/{receive.erl => src/recv.erl} | 6 ++-- erlang/{ => src}/send.erl | 6 ++-- erlang/{ => src}/worker.erl | 6 ++-- 18 files changed, 162 insertions(+), 49 deletions(-) delete mode 100644 erlang/Makefile create mode 100644 erlang/rebar.lock rename erlang/{ => src}/emit_log.erl (77%) mode change 100755 => 100644 rename erlang/{ => src}/emit_log_direct.erl (83%) mode change 100755 => 100644 rename erlang/{ => src}/emit_log_topic.erl (83%) mode change 100755 => 100644 create mode 100644 erlang/src/erlang.app.src create mode 100644 erlang/src/erlang_app.erl create mode 100644 erlang/src/erlang_sup.erl rename erlang/{ => src}/new_task.erl (79%) mode change 100755 => 100644 rename erlang/{ => src}/receive_logs.erl (81%) mode change 100755 => 100644 rename erlang/{ => src}/receive_logs_direct.erl (83%) mode change 100755 => 100644 rename erlang/{ => src}/receive_logs_topic.erl (83%) mode change 100755 => 100644 rename erlang/{receive.erl => src/recv.erl} (77%) mode change 100755 => 100644 rename erlang/{ => src}/send.erl (73%) mode change 100755 => 100644 rename erlang/{ => src}/worker.erl (83%) mode change 100755 => 100644 diff --git a/erlang/.gitignore b/erlang/.gitignore index 1148a695..df53f7d9 100644 --- a/erlang/.gitignore +++ b/erlang/.gitignore @@ -1,2 +1,20 @@ -.erlang.mk/ -deps/ +.rebar3 +_build +_checkouts +_vendor +.eunit +*.o +*.beam +*.plt +*.swp +*.swo +.erlang.cookie +ebin +log +erl_crash.dump +.rebar +logs +.idea +*.iml +rebar3.crashdump +*~ diff --git a/erlang/Makefile b/erlang/Makefile deleted file mode 100644 index b26876df..00000000 --- a/erlang/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -all: - rebar3 compile - -clean: - rebar3 clean && rm -rf _build diff --git a/erlang/README.md b/erlang/README.md index 55fc65f3..33255299 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -19,31 +19,31 @@ You also need rebar3: https://www.rebar3.org/docs/getting-started/ You need Erlang Client binaries: - make all + rebar3 compile ## Code [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html): - ./send.erl - ./receive.erl + rebar3 shell --eval 'send:start(), init:stop().' + rebar3 shell --eval 'recv:start(), init:stop().' [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html): - ./new_task.erl "A very hard task which takes two seconds.." - ./worker.erl + rebar3 shell --eval 'new_task:start(["A very hard task which takes two seconds"]), init:stop().' + rebar3 shell --eval 'worker:start(), init:stop().' [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html): - ./receive_logs.erl - ./emit_log.erl "info: This is the log message" + rebar3 shell --eval 'receive_logs:start(), init:stop().' + rebar3 shell --eval 'emit_log:start(["Info: This is the log message"]), init:stop().' [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html): - ./receive_logs_direct.erl info - ./emit_log_direct.erl info Hello + rebar3 shell --eval 'receive_logs_direct:start(["info"]), init:stop().' + rebar3 shell --eval 'emit_log_direct:start(["info", "Hello"]), init:stop().' [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html): - ./receive_logs_topic.erl "*.rabbit" - ./emit_log_topic.erl red.rabbit Hello + rebar3 shell --eval 'receive_logs_topic:start(["*.rabbit"]), init:stop().' + rebar3 shell --eval 'emit_log_topic:start(["red.rabbit", "Hello"]), init:stop().' diff --git a/erlang/rebar.config b/erlang/rebar.config index 79835e9f..47aa4f20 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1 +1,10 @@ -{deps, [{amqp_client, "3.12.2"}]}. +{erl_opts, [debug_info]}. + +{deps, [ + {amqp_client, "3.12.2"} +]}. + +{shell, [ + %% {config, "config/sys.config"}, + {apps, [erlang]} +]}. diff --git a/erlang/rebar.lock b/erlang/rebar.lock new file mode 100644 index 00000000..66f99937 --- /dev/null +++ b/erlang/rebar.lock @@ -0,0 +1,22 @@ +{"1.2.0", +[{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"3.12.2">>},0}, + {<<"credentials_obfuscation">>, + {pkg,<<"credentials_obfuscation">>,<<"3.4.0">>}, + 1}, + {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"3.12.2">>},1}, + {<<"recon">>,{pkg,<<"recon">>,<<"2.5.3">>},2}, + {<<"thoas">>,{pkg,<<"thoas">>,<<"1.0.0">>},2}]}. +[ +{pkg_hash,[ + {<<"amqp_client">>, <<"19770F1075FE697BEA8AA77E29DF38BD8A439F8D9F1D8A8FCCB56AE0C7AF73CD">>}, + {<<"credentials_obfuscation">>, <<"34E18B126B3AEFD6E8143776FBE1CECEEA6792307C99AC5EE8687911F048CFD7">>}, + {<<"rabbit_common">>, <<"FA46F2954F6F5E28D69AFDEFB10F15C4782402411FAC743BC2459A07DCF83B4C">>}, + {<<"recon">>, <<"739107B9050EA683C30E96DE050BC59248FD27EC147696F79A8797FF9FA17153">>}, + {<<"thoas">>, <<"567C03902920827A18A89F05B79A37B5BF93553154B883E0131801600CF02CE0">>}]}, +{pkg_hash_ext,[ + {<<"amqp_client">>, <<"004BBF9A4129751195660D5347FD89675564C298979C834189E9B24677AFAE94">>}, + {<<"credentials_obfuscation">>, <<"738ACE0ED5545D2710D3F7383906FC6F6B582D019036E5269C4DBD85DBCED566">>}, + {<<"rabbit_common">>, <<"33FE4EB510B1E72A2734B9C3D081F76059A07ED7D76C9B9403276AF9D5AFC1B1">>}, + {<<"recon">>, <<"6C6683F46FD4A1DFD98404B9F78DCABC7FCD8826613A89DCB984727A8C3099D7">>}, + {<<"thoas">>, <<"FC763185B932ECB32A554FB735EE03C3B6B1B31366077A2427D2A97F3BD26735">>}]} +]. diff --git a/erlang/emit_log.erl b/erlang/src/emit_log.erl old mode 100755 new mode 100644 similarity index 77% rename from erlang/emit_log.erl rename to erlang/src/emit_log.erl index 032a842c..3fdd272e --- a/erlang/emit_log.erl +++ b/erlang/src/emit_log.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(emit_log). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/emit_log_direct.erl b/erlang/src/emit_log_direct.erl old mode 100755 new mode 100644 similarity index 83% rename from erlang/emit_log_direct.erl rename to erlang/src/emit_log_direct.erl index f3148837..a0518f69 --- a/erlang/emit_log_direct.erl +++ b/erlang/src/emit_log_direct.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(emit_log_direct). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/emit_log_topic.erl b/erlang/src/emit_log_topic.erl old mode 100755 new mode 100644 similarity index 83% rename from erlang/emit_log_topic.erl rename to erlang/src/emit_log_topic.erl index 1b9a7bad..860fdbb8 --- a/erlang/emit_log_topic.erl +++ b/erlang/src/emit_log_topic.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(emit_log_topic). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/src/erlang.app.src b/erlang/src/erlang.app.src new file mode 100644 index 00000000..6516e1db --- /dev/null +++ b/erlang/src/erlang.app.src @@ -0,0 +1,14 @@ +{application, erlang, [ + {description, "An OTP application"}, + {vsn, "0.1.0"}, + {registered, []}, + {mod, {erlang_app, []}}, + {applications, [ + kernel, + stdlib + ]}, + {env, []}, + {modules, []}, + {licenses, ["Apache-2.0"]}, + {links, []} + ]}. diff --git a/erlang/src/erlang_app.erl b/erlang/src/erlang_app.erl new file mode 100644 index 00000000..f1e981e0 --- /dev/null +++ b/erlang/src/erlang_app.erl @@ -0,0 +1,18 @@ +%%%------------------------------------------------------------------- +%% @doc erlang public API +%% @end +%%%------------------------------------------------------------------- + +-module(erlang_app). + +-behaviour(application). + +-export([start/2, stop/1]). + +start(_StartType, _StartArgs) -> + erlang_sup:start_link(). + +stop(_State) -> + ok. + +%% internal functions diff --git a/erlang/src/erlang_sup.erl b/erlang/src/erlang_sup.erl new file mode 100644 index 00000000..9e5f537e --- /dev/null +++ b/erlang/src/erlang_sup.erl @@ -0,0 +1,37 @@ +%%%------------------------------------------------------------------- +%% @doc erlang top level supervisor. +%% @end +%%%------------------------------------------------------------------- + +-module(erlang_sup). + +-behaviour(supervisor). + +-export([start_link/0]). + +-export([init/1]). + +-define(SERVER, ?MODULE). + +start_link() -> + supervisor:start_link({local, ?SERVER}, ?MODULE, []). + +%% sup_flags() = #{strategy => strategy(), % optional +%% intensity => non_neg_integer(), % optional +%% period => pos_integer()} % optional +%% child_spec() = #{id => child_id(), % mandatory +%% start => mfargs(), % mandatory +%% restart => restart(), % optional +%% shutdown => shutdown(), % optional +%% type => worker(), % optional +%% modules => modules()} % optional +init([]) -> + SupFlags = #{ + strategy => one_for_all, + intensity => 0, + period => 1 + }, + ChildSpecs = [], + {ok, {SupFlags, ChildSpecs}}. + +%% internal functions diff --git a/erlang/new_task.erl b/erlang/src/new_task.erl old mode 100755 new mode 100644 similarity index 79% rename from erlang/new_task.erl rename to erlang/src/new_task.erl index 276de1e4..31056451 --- a/erlang/new_task.erl +++ b/erlang/src/new_task.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(new_task). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/receive_logs.erl b/erlang/src/receive_logs.erl old mode 100755 new mode 100644 similarity index 81% rename from erlang/receive_logs.erl rename to erlang/src/receive_logs.erl index decda979..522222f0 --- a/erlang/receive_logs.erl +++ b/erlang/src/receive_logs.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(receive_logs). +-export([start/0]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(_) -> +start() -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/receive_logs_direct.erl b/erlang/src/receive_logs_direct.erl old mode 100755 new mode 100644 similarity index 83% rename from erlang/receive_logs_direct.erl rename to erlang/src/receive_logs_direct.erl index 63f67db0..f9730e63 --- a/erlang/receive_logs_direct.erl +++ b/erlang/src/receive_logs_direct.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(receive_logs_direct). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/receive_logs_topic.erl b/erlang/src/receive_logs_topic.erl old mode 100755 new mode 100644 similarity index 83% rename from erlang/receive_logs_topic.erl rename to erlang/src/receive_logs_topic.erl index 203753aa..153cc6ae --- a/erlang/receive_logs_topic.erl +++ b/erlang/src/receive_logs_topic.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(receive_logs_topic). +-export([start/1]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(Argv) -> +start(Argv) -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/receive.erl b/erlang/src/recv.erl old mode 100755 new mode 100644 similarity index 77% rename from erlang/receive.erl rename to erlang/src/recv.erl index fe439499..55fe0126 --- a/erlang/receive.erl +++ b/erlang/src/recv.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(recv). +-export([start/0]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(_) -> +start() -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost", heartbeat = 30}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/send.erl b/erlang/src/send.erl old mode 100755 new mode 100644 similarity index 73% rename from erlang/send.erl rename to erlang/src/send.erl index ce0ffc2a..078ec173 --- a/erlang/send.erl +++ b/erlang/src/send.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(send). +-export([start/0]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(_) -> +start() -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), diff --git a/erlang/worker.erl b/erlang/src/worker.erl old mode 100755 new mode 100644 similarity index 83% rename from erlang/worker.erl rename to erlang/src/worker.erl index cdc33469..ffbb01a2 --- a/erlang/worker.erl +++ b/erlang/src/worker.erl @@ -1,9 +1,9 @@ -#!/usr/bin/env escript -%%! -pz ./_build/default/lib/amqp_client/ebin ./_build/default/lib/credentials_obfuscation/ebin ./_build/default/lib/thoas/ebin ./_build/default/lib/rabbit_common/ebin ./_build/default/lib/recon/ebin +-module(worker). +-export([start/0]). -include_lib("amqp_client/include/amqp_client.hrl"). -main(_) -> +start() -> {ok, Connection} = amqp_connection:start(#amqp_params_network{host = "localhost"}), {ok, Channel} = amqp_connection:open_channel(Connection), From b9d93e4fd7df75d0f987299f5f90e1d58d148f66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:20:20 +0000 Subject: [PATCH 367/659] Bump org.apache.maven.plugins:maven-clean-plugin in /java-stream-mvn Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.3.2...maven-clean-plugin-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 373629b3..53fa3303 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -40,7 +40,7 @@ maven-clean-plugin - 3.3.2 + 3.4.0 maven-resources-plugin From e451c104e5b00973edf02dd074cff43cb9f87c5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:28:28 +0000 Subject: [PATCH 368/659] Bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.0...v3.3.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 4a30d1d7..df56394e 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 From 0cb510b8a52114dcd3554e824bbd48644d9202cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:31:05 +0000 Subject: [PATCH 369/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.0...v3.3.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index c2217171..e975b81d 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 From 5ec5f40e2ba9b7bf754a0ff58077de46fa15f26b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:04:02 +0000 Subject: [PATCH 370/659] Bump org.apache.maven.plugins:maven-clean-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.3.2...maven-clean-plugin-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 15a1b67c..5a9337fe 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -84,7 +84,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.3.2 + 3.4.0 From 5734fe6a3436fa36e181302d75642e62999b1c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 13 Jun 2024 18:09:29 +0200 Subject: [PATCH 371/659] Start stream tutorial 2 for Java Finalize stream tutorial 2 for Java Use UTF_8 the same way in example code Use `marker` instead of `poison` --- .gitignore | 4 ++ .../.mvn/wrapper/maven-wrapper.properties | 2 +- java-stream-mvn/pom.xml | 6 +- .../src/main/java/OffsetTrackingReceive.java | 55 +++++++++++++++++++ .../src/main/java/OffsetTrackingSend.java | 33 +++++++++++ .../src/main/resources/logback.xml | 13 +++++ 6 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 java-stream-mvn/src/main/java/OffsetTrackingReceive.java create mode 100644 java-stream-mvn/src/main/java/OffsetTrackingSend.java create mode 100644 java-stream-mvn/src/main/resources/logback.xml diff --git a/.gitignore b/.gitignore index 23d431f2..3f893805 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ target/ *.log .packages .python-version + +.classpath +.project +.settings diff --git a/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties index 11f58680..10cbcb5e 100644 --- a/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties +++ b/java-stream-mvn/.mvn/wrapper/maven-wrapper.properties @@ -14,5 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.8/apache-maven-3.9.8-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 53fa3303..f4b945fe 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -20,9 +20,9 @@ 2.0.13 - org.slf4j - slf4j-simple - 2.0.13 + ch.qos.logback + logback-classic + 1.5.6 diff --git a/java-stream-mvn/src/main/java/OffsetTrackingReceive.java b/java-stream-mvn/src/main/java/OffsetTrackingReceive.java new file mode 100644 index 00000000..b9823bbf --- /dev/null +++ b/java-stream-mvn/src/main/java/OffsetTrackingReceive.java @@ -0,0 +1,55 @@ +import com.rabbitmq.stream.ByteCapacity; +import com.rabbitmq.stream.Environment; +import com.rabbitmq.stream.OffsetSpecification; + +import java.time.Duration; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +import static java.nio.charset.StandardCharsets.UTF_8; + +public class OffsetTrackingReceive { + + public static void main(String[] args) throws InterruptedException { + try (Environment environment = + Environment.builder().requestedHeartbeat(Duration.ofSeconds(5)).build()) { + String stream = "stream-offset-tracking-java"; + environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(1)).create(); + + OffsetSpecification offsetSpecification = OffsetSpecification.first(); + AtomicLong firstOffset = new AtomicLong(-1); + AtomicLong lastOffset = new AtomicLong(0); + AtomicLong messageCount = new AtomicLong(0); + CountDownLatch consumeLatch = new CountDownLatch(1); + environment.consumerBuilder().stream(stream) + .offset(offsetSpecification) + .name("offset-tracking-tutorial") + .manualTrackingStrategy().builder() + .messageHandler( + (ctx, msg) -> { + if (firstOffset.compareAndSet(-1, ctx.offset())) { + System.out.println("First message received."); + } + if (messageCount.incrementAndGet() % 10 == 0) { + ctx.storeOffset(); + } + String body = new String(msg.getBodyAsBinary(), UTF_8); + if ("marker".equals(body)) { + lastOffset.set(ctx.offset()); + ctx.storeOffset(); + ctx.consumer().close(); + consumeLatch.countDown(); + } + }) + .build(); + System.out.println("Started consuming..."); + + consumeLatch.await(60, TimeUnit.MINUTES); + + System.out.printf("Done consuming, first offset %d, last offset %d.%n", + firstOffset.get(), lastOffset.get()); + } + } + +} diff --git a/java-stream-mvn/src/main/java/OffsetTrackingSend.java b/java-stream-mvn/src/main/java/OffsetTrackingSend.java new file mode 100644 index 00000000..02bcfcb8 --- /dev/null +++ b/java-stream-mvn/src/main/java/OffsetTrackingSend.java @@ -0,0 +1,33 @@ +import com.rabbitmq.stream.ByteCapacity; +import com.rabbitmq.stream.Environment; +import com.rabbitmq.stream.Producer; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static java.nio.charset.StandardCharsets.UTF_8; + +public class OffsetTrackingSend { + + public static void main(String[] args) throws InterruptedException { + try (Environment environment = Environment.builder().build()) { + String stream = "stream-offset-tracking-java"; + environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(1)).create(); + + Producer producer = environment.producerBuilder().stream(stream).build(); + + int messageCount = 100; + CountDownLatch confirmedLatch = new CountDownLatch(messageCount); + System.out.printf("Publishing %d messages%n", messageCount); + IntStream.range(0, messageCount).forEach(i -> { + String body = i == messageCount - 1 ? "marker" : "hello"; + producer.send(producer.messageBuilder().addData(body.getBytes(UTF_8)).build(), + ctx -> confirmedLatch.countDown()); + }); + + boolean completed = confirmedLatch.await(60, TimeUnit.SECONDS); + System.out.printf("Messages confirmed: %b.%n", completed); + } + } +} diff --git a/java-stream-mvn/src/main/resources/logback.xml b/java-stream-mvn/src/main/resources/logback.xml new file mode 100644 index 00000000..83114f84 --- /dev/null +++ b/java-stream-mvn/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + From 769883d5672d3eace80651afe8d05bb0eb61b24a Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Sat, 22 Jun 2024 10:36:13 +0900 Subject: [PATCH 372/659] Add RPC tutorial --- erlang/README.md | 5 ++++ erlang/rebar.config | 3 +- erlang/rebar.lock | 10 ++++++- erlang/src/rpc_client.erl | 58 +++++++++++++++++++++++++++++++++++++++ erlang/src/rpc_server.erl | 49 +++++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 erlang/src/rpc_client.erl create mode 100644 erlang/src/rpc_server.erl diff --git a/erlang/README.md b/erlang/README.md index 33255299..47ba1497 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -47,3 +47,8 @@ You need Erlang Client binaries: rebar3 shell --eval 'receive_logs_topic:start(["*.rabbit"]), init:stop().' rebar3 shell --eval 'emit_log_topic:start(["red.rabbit", "Hello"]), init:stop().' + +[Tutorial Six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html): + + rebar3 shell --eval 'rpc_server:start(), init:stop().' + rebar3 shell --eval 'rpc_client:start(["10"]), init:stop().' diff --git a/erlang/rebar.config b/erlang/rebar.config index 47aa4f20..6e437afe 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1,7 +1,8 @@ {erl_opts, [debug_info]}. {deps, [ - {amqp_client, "3.12.2"} + {amqp_client, "3.12.2"}, + {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7"}}} ]}. {shell, [ diff --git a/erlang/rebar.lock b/erlang/rebar.lock index 66f99937..9bf87d80 100644 --- a/erlang/rebar.lock +++ b/erlang/rebar.lock @@ -3,9 +3,17 @@ {<<"credentials_obfuscation">>, {pkg,<<"credentials_obfuscation">>,<<"3.4.0">>}, 1}, + {<<"quickrand">>, + {git,"https://github.com/okeuday/quickrand.git", + {ref,"65332de501998764f437c3ffe05d744f582d7622"}}, + 1}, {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"3.12.2">>},1}, {<<"recon">>,{pkg,<<"recon">>,<<"2.5.3">>},2}, - {<<"thoas">>,{pkg,<<"thoas">>,<<"1.0.0">>},2}]}. + {<<"thoas">>,{pkg,<<"thoas">>,<<"1.0.0">>},2}, + {<<"uuid">>, + {git,"https://github.com/okeuday/uuid.git", + {ref,"7c2d1320c8e61e0fe25a66ecf4761e4b5b5803d6"}}, + 0}]}. [ {pkg_hash,[ {<<"amqp_client">>, <<"19770F1075FE697BEA8AA77E29DF38BD8A439F8D9F1D8A8FCCB56AE0C7AF73CD">>}, diff --git a/erlang/src/rpc_client.erl b/erlang/src/rpc_client.erl new file mode 100644 index 00000000..8e1f8ea4 --- /dev/null +++ b/erlang/src/rpc_client.erl @@ -0,0 +1,58 @@ +-module(rpc_client). +-export([start/1]). + +-include_lib("amqp_client/include/amqp_client.hrl"). + +start(Argv) -> + Num = case Argv of + [] -> 10; + [Arg] -> list_to_integer(Arg) + end, + io:format(" [x] Requesting fib(~p)~n", [Num]), + Response = call(Num), + io:format(" [.] Got ~p~n", [Response]), + ok. + +call(Num) -> + {ok, Connection} = + amqp_connection:start(#amqp_params_network{host = "localhost"}), + {ok, Channel} = amqp_connection:open_channel(Connection), + RequestQueue = <<"rpc_queue">>, + CorrelationId = uuid:get_v4(), + + amqp_channel:call(Channel, #'queue.declare'{queue = RequestQueue}), + + #'queue.declare_ok'{queue = ReplyQueue} = + amqp_channel:call(Channel, #'queue.declare'{exclusive = true}), + + Method = #'basic.consume'{queue = ReplyQueue, no_ack = true}, + amqp_channel:subscribe(Channel, Method, self()), + + amqp_channel:cast(Channel, + #'basic.publish'{ + exchange = <<>>, + routing_key = RequestQueue}, + #amqp_msg{ + payload = integer_to_binary(Num), + props = #'P_basic'{ + reply_to = ReplyQueue, + correlation_id = CorrelationId} + }), + + Response = wait_for_messages(CorrelationId), + + amqp_channel:close(Channel), + amqp_connection:close(Connection), + + Response. + +wait_for_messages(CorrelationId) -> + receive + {#'basic.deliver'{}, #amqp_msg{payload = Body, props = Props}} -> + #'P_basic'{correlation_id = CorrId} = Props, + if CorrelationId == CorrId -> + binary_to_integer(Body); + true -> + -1 + end + end. diff --git a/erlang/src/rpc_server.erl b/erlang/src/rpc_server.erl new file mode 100644 index 00000000..0a568d6f --- /dev/null +++ b/erlang/src/rpc_server.erl @@ -0,0 +1,49 @@ +-module(rpc_server). +-export([start/0]). + +-include_lib("amqp_client/include/amqp_client.hrl"). + +start() -> + {ok, Connection} = + amqp_connection:start(#amqp_params_network{host = "localhost", heartbeat = 30}), + {ok, Channel} = amqp_connection:open_channel(Connection), + + amqp_channel:call(Channel, #'queue.declare'{queue = <<"rpc_queue">>}), + io:format(" [*] Waiting for messages. To exit press CTRL+C~n"), + + amqp_channel:call(Channel, #'basic.qos'{prefetch_count = 1}), + + Method = #'basic.consume'{queue = <<"rpc_queue">>}, + amqp_channel:subscribe(Channel, Method, self()), + loop(Channel). + +loop(Channel) -> + receive + {#'basic.deliver'{delivery_tag = DeliveryTag}, #amqp_msg{payload = Body, props = Props}} -> + #'P_basic'{reply_to = ReplyTo, correlation_id = CorrelationId} = Props, + Num = binary_to_integer(Body), + io:format(" [.] fib(~p)~n", [Num]), + Response = fib(Num), + + amqp_channel:cast(Channel, + #'basic.publish'{ + exchange = <<>>, + routing_key = ReplyTo}, + #amqp_msg{ + payload = integer_to_binary(Response), + props = #'P_basic'{ + correlation_id = CorrelationId} + }), + + amqp_channel:cast(Channel, + #'basic.ack'{ + delivery_tag = DeliveryTag + }), + + loop(Channel) + end. + +fib(0) -> 0; +fib(1) -> 1; +fib(N) when N > 1 -> fib(N-1) + fib(N-2); +fib(N) when N =< 0 -> -1. \ No newline at end of file From 2626b260970de0e36f6617b024c26c538f05a6e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:34:16 +0000 Subject: [PATCH 373/659] Bump org.junit.jupiter:junit-jupiter from 5.10.2 to 5.10.3 in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 5a9337fe..4f95bbf8 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.10.2 + 5.10.3 test From de87f490e1c8efabf63c84f63f7a98394dd2f10e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:37:07 +0000 Subject: [PATCH 374/659] Bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 63067b1a..7658f68b 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.0' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' } From 39d2e11911ee4c46dbfd95f2573d429e615f3780 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:42:45 +0000 Subject: [PATCH 375/659] Bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 7658f68b..b7abca87 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.3' } test { From 597058d97513889666acc141ef014a822c3ae267 Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Fri, 28 Jun 2024 18:44:58 +0900 Subject: [PATCH 376/659] Changed OTP application to OTP library --- erlang/rebar.config | 8 +------- erlang/src/erlang.app.src | 3 +-- erlang/src/erlang_app.erl | 18 ------------------ erlang/src/erlang_sup.erl | 37 ------------------------------------- 4 files changed, 2 insertions(+), 64 deletions(-) delete mode 100644 erlang/src/erlang_app.erl delete mode 100644 erlang/src/erlang_sup.erl diff --git a/erlang/rebar.config b/erlang/rebar.config index 6e437afe..850c0466 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1,11 +1,5 @@ {erl_opts, [debug_info]}. - {deps, [ {amqp_client, "3.12.2"}, {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7"}}} -]}. - -{shell, [ - %% {config, "config/sys.config"}, - {apps, [erlang]} -]}. +]}. \ No newline at end of file diff --git a/erlang/src/erlang.app.src b/erlang/src/erlang.app.src index 6516e1db..ec71d3f9 100644 --- a/erlang/src/erlang.app.src +++ b/erlang/src/erlang.app.src @@ -1,8 +1,7 @@ {application, erlang, [ - {description, "An OTP application"}, + {description, "An OTP library"}, {vsn, "0.1.0"}, {registered, []}, - {mod, {erlang_app, []}}, {applications, [ kernel, stdlib diff --git a/erlang/src/erlang_app.erl b/erlang/src/erlang_app.erl deleted file mode 100644 index f1e981e0..00000000 --- a/erlang/src/erlang_app.erl +++ /dev/null @@ -1,18 +0,0 @@ -%%%------------------------------------------------------------------- -%% @doc erlang public API -%% @end -%%%------------------------------------------------------------------- - --module(erlang_app). - --behaviour(application). - --export([start/2, stop/1]). - -start(_StartType, _StartArgs) -> - erlang_sup:start_link(). - -stop(_State) -> - ok. - -%% internal functions diff --git a/erlang/src/erlang_sup.erl b/erlang/src/erlang_sup.erl deleted file mode 100644 index 9e5f537e..00000000 --- a/erlang/src/erlang_sup.erl +++ /dev/null @@ -1,37 +0,0 @@ -%%%------------------------------------------------------------------- -%% @doc erlang top level supervisor. -%% @end -%%%------------------------------------------------------------------- - --module(erlang_sup). - --behaviour(supervisor). - --export([start_link/0]). - --export([init/1]). - --define(SERVER, ?MODULE). - -start_link() -> - supervisor:start_link({local, ?SERVER}, ?MODULE, []). - -%% sup_flags() = #{strategy => strategy(), % optional -%% intensity => non_neg_integer(), % optional -%% period => pos_integer()} % optional -%% child_spec() = #{id => child_id(), % mandatory -%% start => mfargs(), % mandatory -%% restart => restart(), % optional -%% shutdown => shutdown(), % optional -%% type => worker(), % optional -%% modules => modules()} % optional -init([]) -> - SupFlags = #{ - strategy => one_for_all, - intensity => 0, - period => 1 - }, - ChildSpecs = [], - {ok, {SupFlags, ChildSpecs}}. - -%% internal functions From c3af97b6c2dc447ecc61fd989b11256e2ff01761 Mon Sep 17 00:00:00 2001 From: Hoki Min Date: Fri, 28 Jun 2024 19:14:41 +0900 Subject: [PATCH 377/659] Add rebar3 aliases for RabbitMQ tutorial commands --- erlang/README.md | 24 ++++++++++++------------ erlang/rebar.config | 29 +++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/erlang/README.md b/erlang/README.md index 47ba1497..9d2a5ca7 100644 --- a/erlang/README.md +++ b/erlang/README.md @@ -25,30 +25,30 @@ You need Erlang Client binaries: [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-python.html): - rebar3 shell --eval 'send:start(), init:stop().' - rebar3 shell --eval 'recv:start(), init:stop().' + rebar3 send + rebar3 recv [Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html): - rebar3 shell --eval 'new_task:start(["A very hard task which takes two seconds"]), init:stop().' - rebar3 shell --eval 'worker:start(), init:stop().' + rebar3 new_task + rebar3 worker [Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-python.html): - rebar3 shell --eval 'receive_logs:start(), init:stop().' - rebar3 shell --eval 'emit_log:start(["Info: This is the log message"]), init:stop().' + rebar3 receive_logs + rebar3 emit_log [Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-python.html): - rebar3 shell --eval 'receive_logs_direct:start(["info"]), init:stop().' - rebar3 shell --eval 'emit_log_direct:start(["info", "Hello"]), init:stop().' + rebar3 receive_logs_direct + rebar3 emit_log_direct [Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-python.html): - rebar3 shell --eval 'receive_logs_topic:start(["*.rabbit"]), init:stop().' - rebar3 shell --eval 'emit_log_topic:start(["red.rabbit", "Hello"]), init:stop().' + rebar3 receive_logs_topic + rebar3 emit_log_topic [Tutorial Six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-python.html): - rebar3 shell --eval 'rpc_server:start(), init:stop().' - rebar3 shell --eval 'rpc_client:start(["10"]), init:stop().' + rebar3 rpc_server + rebar3 rpc_client diff --git a/erlang/rebar.config b/erlang/rebar.config index 850c0466..1412e480 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -2,4 +2,33 @@ {deps, [ {amqp_client, "3.12.2"}, {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7"}}} +]}. + +{plugins, [rebar_alias]}. + +{alias, [ + {send, [compile, {shell, + "--eval 'send:start(), init:stop().'"}]}, + {recv, [compile, {shell, + "--eval 'recv:start(), init:stop().'"}]}, + {new_task, [compile, {shell, + "--eval 'new_task:start([\"A very hard task which takes two seconds\"]), init:stop().'"}]}, + {worker, [compile, {shell, + "--eval 'worker:start(), init:stop().'"}]}, + {receive_logs, [compile, + {shell, "--eval 'receive_logs:start(), init:stop().'"}]}, + {emit_log, [compile, {shell, + "--eval 'emit_log:start([\"Info: This is the log message\"]), init:stop().'"}]}, + {receive_logs_direct, [compile, {shell, + "--eval 'receive_logs_direct:start([\"Info\"]), init:stop().'"}]}, + {emit_log_direct, [compile, {shell, + "--eval 'emit_log_direct:start([\"Info\", \"Hello\"]), init:stop().'"}]}, + {receive_logs_topic, [compile, {shell, + "--eval 'receive_logs_topic:start([\"*.rabbit\"]), init:stop().'"}]}, + {emit_log_topic, [compile, {shell, + "--eval 'emit_log_topic:start([\"red.rabbit\", \"Hello\"]), init:stop().'"}]}, + {rpc_server, [compile, {shell, + "--eval 'rpc_server:start(), init:stop().'"}]}, + {rpc_client, [compile, {shell, + "--eval 'rpc_client:start([\"10\"]), init:stop().'"}]} ]}. \ No newline at end of file From d448426209370b975ded7749d5467ab1c9c77629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Fri, 5 Jul 2024 14:51:14 +0200 Subject: [PATCH 378/659] Add stream tutorial 2 for Go files --- go-stream/offset_tracking_receive.go | 66 +++++++++++++++++++++++++ go-stream/offset_tracking_send.go | 72 ++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 go-stream/offset_tracking_receive.go create mode 100644 go-stream/offset_tracking_send.go diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go new file mode 100644 index 00000000..fe526923 --- /dev/null +++ b/go-stream/offset_tracking_receive.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" + "os" + "sync/atomic" +) + +func main() { + env, err := stream.NewEnvironment( + stream.NewEnvironmentOptions(). + SetHost("localhost"). + SetPort(5552). + SetUser("guest"). + SetPassword("guest")) + CheckErrReceive(err) + + streamName := "stream-offset-tracking-go" + err = env.DeclareStream(streamName, + &stream.StreamOptions{ + MaxLengthBytes: stream.ByteCapacity{}.GB(2), + }, + ) + CheckErrReceive(err) + + var firstOffset, messageCount int64 = -1, 0 + var lastOffset atomic.Int64 + ch := make(chan bool) + messagesHandler := func(consumerContext stream.ConsumerContext, message *amqp.Message) { + if atomic.CompareAndSwapInt64(&firstOffset, -1, consumerContext.Consumer.GetOffset()) { + fmt.Println("First message received.") + } + if atomic.AddInt64(&messageCount, 1)%10 == 0 { + consumerContext.Consumer.StoreOffset() + fmt.Println("storing offset") + } + if string(message.GetData()) == "marker" { + lastOffset.Store(consumerContext.Consumer.GetOffset()) + consumerContext.Consumer.StoreOffset() + consumerContext.Consumer.Close() + ch <- true + } + } + + _, err = env.NewConsumer(streamName, messagesHandler, + stream.NewConsumerOptions(). + SetManualCommit(). + SetConsumerName("offset-tracking-tutorial"). + SetOffset(stream.OffsetSpecification{}.LastConsumed())) + CheckErrReceive(err) + fmt.Println("Started consuming...") + _ = <-ch + + fmt.Printf("Done consuming, first offset %d, last offset %d.\n", firstOffset, lastOffset.Load()) + CheckErrReceive(err) + +} + +func CheckErrReceive(err error) { + if err != nil { + fmt.Printf("%s ", err) + os.Exit(1) + } +} diff --git a/go-stream/offset_tracking_send.go b/go-stream/offset_tracking_send.go new file mode 100644 index 00000000..680310e8 --- /dev/null +++ b/go-stream/offset_tracking_send.go @@ -0,0 +1,72 @@ +package main + +import ( + "fmt" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" + "os" +) + +func main() { + env, err := stream.NewEnvironment( + stream.NewEnvironmentOptions(). + SetHost("localhost"). + SetPort(5552). + SetUser("guest"). + SetPassword("guest")) + CheckErrSend(err) + + streamName := "stream-offset-tracking-go" + err = env.DeclareStream(streamName, + &stream.StreamOptions{ + MaxLengthBytes: stream.ByteCapacity{}.GB(2), + }, + ) + CheckErrSend(err) + + producer, err := env.NewProducer(streamName, stream.NewProducerOptions()) + CheckErrSend(err) + + messageCount := 100 + ch := make(chan bool) + chPublishConfirm := producer.NotifyPublishConfirmation() + handlePublishConfirm(chPublishConfirm, messageCount, ch) + + fmt.Printf("Publishing %d messages\n", messageCount) + for i := 0; i < messageCount; i++ { + var body string + if i == messageCount-1 { + body = "marker" + } else { + body = "hello" + } + err = producer.Send(amqp.NewMessage([]byte(body))) + CheckErrSend(err) + } + _ = <-ch + fmt.Println("Messages confirmed") + + err = producer.Close() + CheckErrSend(err) +} + +func handlePublishConfirm(confirms stream.ChannelPublishConfirm, messageCount int, ch chan bool) { + go func() { + confirmedCount := 0 + for confirmed := range confirms { + for _, _ = range confirmed { + confirmedCount++ + if confirmedCount == messageCount { + ch <- true + } + } + } + }() +} + +func CheckErrSend(err error) { + if err != nil { + fmt.Printf("%s ", err) + os.Exit(1) + } +} From 888e2ee6a25ebb0eb566c909acfee240ae9d49a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Fri, 5 Jul 2024 16:04:57 +0200 Subject: [PATCH 379/659] Look up last stored offset --- go-stream/offset_tracking_receive.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go index fe526923..f6d3576d 100644 --- a/go-stream/offset_tracking_receive.go +++ b/go-stream/offset_tracking_receive.go @@ -1,11 +1,13 @@ package main import ( + "errors" "fmt" - "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" - "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" "os" "sync/atomic" + + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" + "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" ) func main() { @@ -34,7 +36,6 @@ func main() { } if atomic.AddInt64(&messageCount, 1)%10 == 0 { consumerContext.Consumer.StoreOffset() - fmt.Println("storing offset") } if string(message.GetData()) == "marker" { lastOffset.Store(consumerContext.Consumer.GetOffset()) @@ -44,11 +45,20 @@ func main() { } } + consumerName := "offset-tracking-tutorial" + var offsetSpecification stream.OffsetSpecification + storedOffset, err := env.QueryOffset(consumerName, streamName) + if errors.Is(err, stream.OffsetNotFoundError) { + offsetSpecification = stream.OffsetSpecification{}.First() + } else { + offsetSpecification = stream.OffsetSpecification{}.Offset(storedOffset + 1) + } + _, err = env.NewConsumer(streamName, messagesHandler, stream.NewConsumerOptions(). SetManualCommit(). - SetConsumerName("offset-tracking-tutorial"). - SetOffset(stream.OffsetSpecification{}.LastConsumed())) + SetConsumerName(consumerName). + SetOffset(offsetSpecification)) CheckErrReceive(err) fmt.Println("Started consuming...") _ = <-ch From 81450daf1b8d5352b9c81206c319a749552996f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Mon, 8 Jul 2024 14:52:15 +0200 Subject: [PATCH 380/659] Small updates in stream tutorial 2 for Go --- go-stream/offset_tracking_receive.go | 12 +++++------- go-stream/offset_tracking_send.go | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go index f6d3576d..3f24b163 100644 --- a/go-stream/offset_tracking_receive.go +++ b/go-stream/offset_tracking_receive.go @@ -3,11 +3,10 @@ package main import ( "errors" "fmt" - "os" - "sync/atomic" - "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp" "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream" + "os" + "sync/atomic" ) func main() { @@ -27,7 +26,8 @@ func main() { ) CheckErrReceive(err) - var firstOffset, messageCount int64 = -1, 0 + var firstOffset int64 = -1 + var messageCount int64 = -1 var lastOffset atomic.Int64 ch := make(chan bool) messagesHandler := func(consumerContext stream.ConsumerContext, message *amqp.Message) { @@ -45,8 +45,8 @@ func main() { } } - consumerName := "offset-tracking-tutorial" var offsetSpecification stream.OffsetSpecification + consumerName := "offset-tracking-tutorial" storedOffset, err := env.QueryOffset(consumerName, streamName) if errors.Is(err, stream.OffsetNotFoundError) { offsetSpecification = stream.OffsetSpecification{}.First() @@ -64,8 +64,6 @@ func main() { _ = <-ch fmt.Printf("Done consuming, first offset %d, last offset %d.\n", firstOffset, lastOffset.Load()) - CheckErrReceive(err) - } func CheckErrReceive(err error) { diff --git a/go-stream/offset_tracking_send.go b/go-stream/offset_tracking_send.go index 680310e8..e11847e1 100644 --- a/go-stream/offset_tracking_send.go +++ b/go-stream/offset_tracking_send.go @@ -28,8 +28,8 @@ func main() { CheckErrSend(err) messageCount := 100 - ch := make(chan bool) chPublishConfirm := producer.NotifyPublishConfirmation() + ch := make(chan bool) handlePublishConfirm(chPublishConfirm, messageCount, ch) fmt.Printf("Publishing %d messages\n", messageCount) @@ -44,7 +44,7 @@ func main() { CheckErrSend(err) } _ = <-ch - fmt.Println("Messages confirmed") + fmt.Println("Messages confirmed.") err = producer.Close() CheckErrSend(err) From b51509d20437bca7c1f5fbf4ee1192e14b17217c Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Mon, 8 Jul 2024 16:16:04 +0200 Subject: [PATCH 381/659] change close Signed-off-by: Gabriele Santomaggio --- go-stream/README.md | 5 +++++ go-stream/offset_tracking_receive.go | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/go-stream/README.md b/go-stream/README.md index a1d5211a..cc5653ab 100644 --- a/go-stream/README.md +++ b/go-stream/README.md @@ -23,4 +23,9 @@ Code examples are executed via `go run`: go run receive.go +[Tutorial two: Offset Tracking](https://www.rabbitmq.com/tutorials/tutorial-two-go-stream.html): + + go run offset_tracking_send.go + go run offset_tracking_receive.go + To learn more, see [`rabbitmq/rabbitmq-stream-go-client`](https://github.com/rabbitmq/rabbitmq-stream-go-client). diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go index 3f24b163..6d298975 100644 --- a/go-stream/offset_tracking_receive.go +++ b/go-stream/offset_tracking_receive.go @@ -35,12 +35,11 @@ func main() { fmt.Println("First message received.") } if atomic.AddInt64(&messageCount, 1)%10 == 0 { - consumerContext.Consumer.StoreOffset() + _ = consumerContext.Consumer.StoreOffset() } if string(message.GetData()) == "marker" { lastOffset.Store(consumerContext.Consumer.GetOffset()) - consumerContext.Consumer.StoreOffset() - consumerContext.Consumer.Close() + _ = consumerContext.Consumer.StoreOffset() ch <- true } } @@ -54,7 +53,7 @@ func main() { offsetSpecification = stream.OffsetSpecification{}.Offset(storedOffset + 1) } - _, err = env.NewConsumer(streamName, messagesHandler, + consumer, err := env.NewConsumer(streamName, messagesHandler, stream.NewConsumerOptions(). SetManualCommit(). SetConsumerName(consumerName). @@ -62,7 +61,7 @@ func main() { CheckErrReceive(err) fmt.Println("Started consuming...") _ = <-ch - + _ = consumer.Close() fmt.Printf("Done consuming, first offset %d, last offset %d.\n", firstOffset, lastOffset.Load()) } From 1d55bb56192b1ba6f991b48037e9fc1ed432236d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 9 Jul 2024 10:29:44 +0200 Subject: [PATCH 382/659] Use stream Go client 1.4.6 --- go-stream/go.mod | 4 ++-- go-stream/go.sum | 4 ++++ go-stream/offset_tracking_receive.go | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/go-stream/go.mod b/go-stream/go.mod index f546e959..e9b232b7 100644 --- a/go-stream/go.mod +++ b/go-stream/go.mod @@ -2,11 +2,11 @@ module github.com/rabbitmq/rabbitmq-tutorials go 1.22.0 -require github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1 +require github.com/rabbitmq/rabbitmq-stream-go-client v1.4.6 require ( github.com/golang/snappy v0.0.4 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect diff --git a/go-stream/go.sum b/go-stream/go.sum index f848b4c5..0dee265f 100644 --- a/go-stream/go.sum +++ b/go-stream/go.sum @@ -2,11 +2,15 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1 h1:QWHiXPio2rhQU98TKFhyooGWH2Xviwwz9RFGdIpIlUg= github.com/rabbitmq/rabbitmq-stream-go-client v1.4.1/go.mod h1:CbFPhxC2+ctPq0FmWD3CiZWWGiP7sP4joRpw4YTlyL4= +github.com/rabbitmq/rabbitmq-stream-go-client v1.4.6 h1:aStxoALHUFdUouWWtG6f82rW0VE6885q2SGLKGOCZ50= +github.com/rabbitmq/rabbitmq-stream-go-client v1.4.6/go.mod h1:CDeYQ8E+cC96SWnkmdDc5NVEWjmtRBA9JAQrMG/y+MI= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go index 6d298975..437b37b1 100644 --- a/go-stream/offset_tracking_receive.go +++ b/go-stream/offset_tracking_receive.go @@ -40,6 +40,7 @@ func main() { if string(message.GetData()) == "marker" { lastOffset.Store(consumerContext.Consumer.GetOffset()) _ = consumerContext.Consumer.StoreOffset() + _ = consumerContext.Consumer.Close() ch <- true } } @@ -53,7 +54,7 @@ func main() { offsetSpecification = stream.OffsetSpecification{}.Offset(storedOffset + 1) } - consumer, err := env.NewConsumer(streamName, messagesHandler, + _, err = env.NewConsumer(streamName, messagesHandler, stream.NewConsumerOptions(). SetManualCommit(). SetConsumerName(consumerName). @@ -61,7 +62,6 @@ func main() { CheckErrReceive(err) fmt.Println("Started consuming...") _ = <-ch - _ = consumer.Close() fmt.Printf("Done consuming, first offset %d, last offset %d.\n", firstOffset, lastOffset.Load()) } From 2cf71a3d70df026d95591f3e6e5837038c29a01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 9 Jul 2024 11:03:48 +0200 Subject: [PATCH 383/659] Check stream message is confirmed --- go-stream/offset_tracking_receive.go | 2 +- go-stream/offset_tracking_send.go | 10 ++++++---- java-stream-mvn/src/main/java/OffsetTrackingSend.java | 6 +++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/go-stream/offset_tracking_receive.go b/go-stream/offset_tracking_receive.go index 437b37b1..48f8aa36 100644 --- a/go-stream/offset_tracking_receive.go +++ b/go-stream/offset_tracking_receive.go @@ -40,7 +40,7 @@ func main() { if string(message.GetData()) == "marker" { lastOffset.Store(consumerContext.Consumer.GetOffset()) _ = consumerContext.Consumer.StoreOffset() - _ = consumerContext.Consumer.Close() + _ = consumerContext.Consumer.Close() ch <- true } } diff --git a/go-stream/offset_tracking_send.go b/go-stream/offset_tracking_send.go index e11847e1..0314e460 100644 --- a/go-stream/offset_tracking_send.go +++ b/go-stream/offset_tracking_send.go @@ -54,10 +54,12 @@ func handlePublishConfirm(confirms stream.ChannelPublishConfirm, messageCount in go func() { confirmedCount := 0 for confirmed := range confirms { - for _, _ = range confirmed { - confirmedCount++ - if confirmedCount == messageCount { - ch <- true + for _, msg := range confirmed { + if msg.IsConfirmed() { + confirmedCount++ + if confirmedCount == messageCount { + ch <- true + } } } } diff --git a/java-stream-mvn/src/main/java/OffsetTrackingSend.java b/java-stream-mvn/src/main/java/OffsetTrackingSend.java index 02bcfcb8..c2724db1 100644 --- a/java-stream-mvn/src/main/java/OffsetTrackingSend.java +++ b/java-stream-mvn/src/main/java/OffsetTrackingSend.java @@ -23,7 +23,11 @@ public static void main(String[] args) throws InterruptedException { IntStream.range(0, messageCount).forEach(i -> { String body = i == messageCount - 1 ? "marker" : "hello"; producer.send(producer.messageBuilder().addData(body.getBytes(UTF_8)).build(), - ctx -> confirmedLatch.countDown()); + ctx -> { + if (ctx.isConfirmed()) { + confirmedLatch.countDown(); + } + }); }); boolean completed = confirmedLatch.await(60, TimeUnit.SECONDS); From 4eaef68cbeba1ea53817f073667c18fc54c0965e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Tue, 9 Jul 2024 16:18:20 +0200 Subject: [PATCH 384/659] Start stream tutorial 2 for .NET --- .../OffsetTrackingSend/OffsetTrackingSend.cs | 31 +++++++++++++++++++ .../OffsetTrackingSend.csproj | 14 +++++++++ go-stream/offset_tracking_send.go | 2 +- .../src/main/java/OffsetTrackingSend.java | 2 +- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.cs create mode 100644 dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.csproj diff --git a/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.cs b/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.cs new file mode 100644 index 00000000..9fe16d25 --- /dev/null +++ b/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.cs @@ -0,0 +1,31 @@ +using System.Text; +using System.Threading.Tasks; +using RabbitMQ.Stream.Client; +using RabbitMQ.Stream.Client.Reliable; + +var streamSystem = await StreamSystem.Create(new StreamSystemConfig()); + +var stream = "stream-offset-tracking-dotnet"; +await streamSystem.CreateStream(new StreamSpec(stream)); + +var messageCount = 100; +var confirmedCde = new CountdownEvent(messageCount); +var producer = await Producer.Create(new ProducerConfig(streamSystem, stream) { + ConfirmationHandler = async confirmation => { + if (confirmation.Status == ConfirmationStatus.Confirmed) { + confirmedCde.Signal(); + } + await Task.CompletedTask.ConfigureAwait(false); + } +}); + +Console.WriteLine("Publishing {0} messages...", messageCount); +for (int i = 0; i < messageCount; i++) { + var body = i == messageCount - 1 ? "marker" : "hello"; + await producer.Send(new Message(Encoding.UTF8.GetBytes(body))); +} + +confirmedCde.Wait(); +Console.WriteLine("Messages confirmed."); +await producer.Close(); +await streamSystem.Close(); diff --git a/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.csproj b/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.csproj new file mode 100644 index 00000000..f700c37a --- /dev/null +++ b/dotnet-stream/OffsetTrackingSend/OffsetTrackingSend.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/go-stream/offset_tracking_send.go b/go-stream/offset_tracking_send.go index 0314e460..84d23583 100644 --- a/go-stream/offset_tracking_send.go +++ b/go-stream/offset_tracking_send.go @@ -32,7 +32,7 @@ func main() { ch := make(chan bool) handlePublishConfirm(chPublishConfirm, messageCount, ch) - fmt.Printf("Publishing %d messages\n", messageCount) + fmt.Printf("Publishing %d messages...\n", messageCount) for i := 0; i < messageCount; i++ { var body string if i == messageCount-1 { diff --git a/java-stream-mvn/src/main/java/OffsetTrackingSend.java b/java-stream-mvn/src/main/java/OffsetTrackingSend.java index c2724db1..11ec162e 100644 --- a/java-stream-mvn/src/main/java/OffsetTrackingSend.java +++ b/java-stream-mvn/src/main/java/OffsetTrackingSend.java @@ -19,7 +19,7 @@ public static void main(String[] args) throws InterruptedException { int messageCount = 100; CountDownLatch confirmedLatch = new CountDownLatch(messageCount); - System.out.printf("Publishing %d messages%n", messageCount); + System.out.printf("Publishing %d messages...%n", messageCount); IntStream.range(0, messageCount).forEach(i -> { String body = i == messageCount - 1 ? "marker" : "hello"; producer.send(producer.messageBuilder().addData(body.getBytes(UTF_8)).build(), From 031b33f2e3bdf22ed27e34866331fdaeeb7943e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 17:59:36 +0000 Subject: [PATCH 385/659] Bump org.assertj:assertj-core from 3.26.0 to 3.26.3 in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.0 to 3.26.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.0...assertj-build-3.26.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 4f95bbf8..ee5a016f 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.26.0 + 3.26.3 test From 6783644664bfd2a01bfe6eb813fbfc99d18e5dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Wed, 10 Jul 2024 15:08:03 +0200 Subject: [PATCH 386/659] Add receiver in stream tutorial 2 for .NET --- .../OffsetTrackingReceive.cs | 49 +++++++++++++++++++ .../OffsetTrackingReceive.csproj | 14 ++++++ 2 files changed, 63 insertions(+) create mode 100644 dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.cs create mode 100644 dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.csproj diff --git a/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.cs b/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.cs new file mode 100644 index 00000000..d567f87f --- /dev/null +++ b/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.cs @@ -0,0 +1,49 @@ +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using RabbitMQ.Stream.Client; +using RabbitMQ.Stream.Client.Reliable; + +var streamSystem = await StreamSystem.Create(new StreamSystemConfig()); + +var stream = "stream-offset-tracking-dotnet"; +await streamSystem.CreateStream(new StreamSpec(stream)); + +var consumerName = "offset-tracking-tutorial"; +IOffsetType offsetSpecification; +try { + ulong storedOffset = await streamSystem.QueryOffset(consumerName, stream).ConfigureAwait(false); + offsetSpecification = new OffsetTypeOffset(storedOffset + 1); +} catch (OffsetNotFoundException) { + offsetSpecification = new OffsetTypeFirst(); +} +ulong initialValue = UInt64.MaxValue; +ulong firstOffset = initialValue; +int messageCount = 0; +ulong lastOffset = initialValue; +var consumedCde = new CountdownEvent(1); +var consumer = await Consumer.Create(new ConsumerConfig(streamSystem, stream) +{ + OffsetSpec = offsetSpecification, + Reference = consumerName, + MessageHandler = async (_, consumer, context, message) => { + if (Interlocked.CompareExchange(ref firstOffset, context.Offset, initialValue) == initialValue) { + Console.WriteLine("First message received."); + } + if (Interlocked.Increment(ref messageCount) % 10 == 0) { + await consumer.StoreOffset(context.Offset).ConfigureAwait(false); + } + if ("marker".Equals(Encoding.UTF8.GetString(message.Data.Contents))) { + Interlocked.Exchange(ref lastOffset, context.Offset); + await consumer.StoreOffset(context.Offset).ConfigureAwait(false); + await consumer.Close(); + consumedCde.Signal(); + } + await Task.CompletedTask; + } +}); +Console.WriteLine("Started consuming..."); + +consumedCde.Wait(); +Console.WriteLine("Done consuming, first offset {0}, last offset {1}", firstOffset, lastOffset); +await streamSystem.Close(); diff --git a/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.csproj b/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.csproj new file mode 100644 index 00000000..f700c37a --- /dev/null +++ b/dotnet-stream/OffsetTrackingReceive/OffsetTrackingReceive.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + From 8f674f604a096061e863bbda5c4bc8a46937887b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Wed, 10 Jul 2024 17:04:53 +0200 Subject: [PATCH 387/659] Change variable name for consistency --- java-stream-mvn/src/main/java/OffsetTrackingReceive.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java-stream-mvn/src/main/java/OffsetTrackingReceive.java b/java-stream-mvn/src/main/java/OffsetTrackingReceive.java index b9823bbf..7471cd83 100644 --- a/java-stream-mvn/src/main/java/OffsetTrackingReceive.java +++ b/java-stream-mvn/src/main/java/OffsetTrackingReceive.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws InterruptedException { AtomicLong firstOffset = new AtomicLong(-1); AtomicLong lastOffset = new AtomicLong(0); AtomicLong messageCount = new AtomicLong(0); - CountDownLatch consumeLatch = new CountDownLatch(1); + CountDownLatch consumedLatch = new CountDownLatch(1); environment.consumerBuilder().stream(stream) .offset(offsetSpecification) .name("offset-tracking-tutorial") @@ -39,13 +39,13 @@ public static void main(String[] args) throws InterruptedException { lastOffset.set(ctx.offset()); ctx.storeOffset(); ctx.consumer().close(); - consumeLatch.countDown(); + consumedLatch.countDown(); } }) .build(); System.out.println("Started consuming..."); - consumeLatch.await(60, TimeUnit.MINUTES); + consumedLatch.await(60, TimeUnit.MINUTES); System.out.printf("Done consuming, first offset %d, last offset %d.%n", firstOffset.get(), lastOffset.get()); From acc826fb5d7a1b8f199e383bc898c4a8528d2180 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:28:37 +0000 Subject: [PATCH 388/659] Bump org.assertj:assertj-core from 3.26.0 to 3.26.3 in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.0 to 3.26.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.0...assertj-build-3.26.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index b7abca87..d6f07634 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.13' - testImplementation 'org.assertj:assertj-core:3.26.0' + testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' From a3c06cc2c1c59bfb22e2e2ac1023451364d5308b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:51:28 +0000 Subject: [PATCH 389/659] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.0...surefire-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index ee5a016f..db2d83fc 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.3.0 + 3.3.1 ${test-arguments} From a68a482bc74db4e3d61b6e507947035e69c419a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:20:34 +0000 Subject: [PATCH 390/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.1...v3.3.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index e975b81d..1bc7ec84 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 From 70ca4951abd1ca3332deefd1d40d0a45ec4bbc4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:35:54 +0000 Subject: [PATCH 391/659] Bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.1...v3.3.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index df56394e..2407753d 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 From a4227e420b2be70effcd364862f8835951fd2d5a Mon Sep 17 00:00:00 2001 From: mooreca Date: Tue, 30 Jul 2024 15:57:54 +1200 Subject: [PATCH 392/659] Fix Python Stream tutorial by using correct argument key values, implement asyncio.Runner to exit correctly on Keyboard Interrupt, close producer and consumer when closing program. --- python-stream/receive.py | 52 +++++++++++++++++++--------------------- python-stream/send.py | 7 +++--- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/python-stream/receive.py b/python-stream/receive.py index f68e17da..c8f26900 100644 --- a/python-stream/receive.py +++ b/python-stream/receive.py @@ -1,5 +1,4 @@ import asyncio -import signal from rstream import ( AMQPMessage, @@ -15,30 +14,27 @@ async def receive(): - consumer = Consumer(host="localhost", username="guest", password="guest") - await consumer.create_stream( - STREAM_NAME, exists_ok=True, arguments={"MaxLengthBytes": STREAM_RETENTION} - ) - - loop = asyncio.get_event_loop() - loop.add_signal_handler( - signal.SIGINT, lambda: asyncio.create_task(consumer.close()) - ) - - async def on_message(msg: AMQPMessage, message_context: MessageContext): - stream = message_context.consumer.get_stream(message_context.subscriber_name) - print("Got message: {} from stream {}".format(msg, stream)) - - print("Press control +C to close") - await consumer.start() - await consumer.subscribe( - stream=STREAM_NAME, - callback=on_message, - offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), - ) - await consumer.run() - # give time to the consumer task to close the consumer - await asyncio.sleep(1) - - -asyncio.run(receive()) + async with Consumer(host="localhost", username="test", password="test") as consumer: + await consumer.create_stream( + STREAM_NAME, exists_ok=True, arguments={"max-length-bytes": STREAM_RETENTION} + ) + + async def on_message(msg: AMQPMessage, message_context: MessageContext): + stream = message_context.consumer.get_stream(message_context.subscriber_name) + print("Got message: {} from stream {}".format(msg, stream)) + try: + print("Press control +C to close") + await consumer.start() + await consumer.subscribe( + stream=STREAM_NAME, + callback=on_message, + offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), + ) + await consumer.run() + except (KeyboardInterrupt, asyncio.exceptions.CancelledError): + print("Closing Consumer...") + await consumer.close() + raise + +with asyncio.Runner() as runner: + runner.run(receive()) diff --git a/python-stream/send.py b/python-stream/send.py index 3e8e8e45..a06df08b 100644 --- a/python-stream/send.py +++ b/python-stream/send.py @@ -14,7 +14,7 @@ async def send(): password="guest", ) as producer: await producer.create_stream( - STREAM_NAME, exists_ok=True, arguments={"MaxLengthBytes": STREAM_RETENTION} + STREAM_NAME, exists_ok=True, arguments={"max-length-bytes": STREAM_RETENTION} ) await producer.send(stream=STREAM_NAME, message=b"Hello, World!") @@ -22,6 +22,7 @@ async def send(): print(" [x] Hello, World! message sent") input(" [x] Press Enter to close the producer ...") + await producer.close() - -asyncio.run(send()) +with asyncio.Runner() as runner: + runner.run(send()) From 92134198a760bf6dc18fde5a57694ec6e4c4be28 Mon Sep 17 00:00:00 2001 From: Cameron Moore-Carter Date: Mon, 5 Aug 2024 16:17:13 +1200 Subject: [PATCH 393/659] removed redundant producer.close() calls As this now has an AsyncContext, producer.close() & consumer.close() is called automatically when exiting the context. --- python-stream/receive.py | 25 +++++++++++-------------- python-stream/send.py | 1 - 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/python-stream/receive.py b/python-stream/receive.py index c8f26900..29aaba3f 100644 --- a/python-stream/receive.py +++ b/python-stream/receive.py @@ -14,7 +14,7 @@ async def receive(): - async with Consumer(host="localhost", username="test", password="test") as consumer: + async with Consumer(host="localhost", username="guest", password="guest") as consumer: await consumer.create_stream( STREAM_NAME, exists_ok=True, arguments={"max-length-bytes": STREAM_RETENTION} ) @@ -22,19 +22,16 @@ async def receive(): async def on_message(msg: AMQPMessage, message_context: MessageContext): stream = message_context.consumer.get_stream(message_context.subscriber_name) print("Got message: {} from stream {}".format(msg, stream)) - try: - print("Press control +C to close") - await consumer.start() - await consumer.subscribe( - stream=STREAM_NAME, - callback=on_message, - offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), - ) - await consumer.run() - except (KeyboardInterrupt, asyncio.exceptions.CancelledError): - print("Closing Consumer...") - await consumer.close() - raise + + print("Press control +C to close") + await consumer.start() + await consumer.subscribe( + stream=STREAM_NAME, + callback=on_message, + offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), + ) + await consumer.run() + with asyncio.Runner() as runner: runner.run(receive()) diff --git a/python-stream/send.py b/python-stream/send.py index a06df08b..801dce7c 100644 --- a/python-stream/send.py +++ b/python-stream/send.py @@ -22,7 +22,6 @@ async def send(): print(" [x] Hello, World! message sent") input(" [x] Press Enter to close the producer ...") - await producer.close() with asyncio.Runner() as runner: runner.run(send()) From 32f589fcdf35247a8f7dfa823ddf2707e4f8a7eb Mon Sep 17 00:00:00 2001 From: Cameron Moore-Carter Date: Tue, 6 Aug 2024 11:35:20 +1200 Subject: [PATCH 394/659] Add back graceful termination of consumer Wrapped the consumer in a try except to gracefully terminate the program. --- python-stream/receive.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python-stream/receive.py b/python-stream/receive.py index 29aaba3f..13f473e6 100644 --- a/python-stream/receive.py +++ b/python-stream/receive.py @@ -23,14 +23,18 @@ async def on_message(msg: AMQPMessage, message_context: MessageContext): stream = message_context.consumer.get_stream(message_context.subscriber_name) print("Got message: {} from stream {}".format(msg, stream)) - print("Press control +C to close") + print("Press control + C to close") await consumer.start() await consumer.subscribe( stream=STREAM_NAME, callback=on_message, offset_specification=ConsumerOffsetSpecification(OffsetType.FIRST, None), ) - await consumer.run() + try: + await consumer.run() + except (KeyboardInterrupt, asyncio.CancelledError): + print("Closing Consumer...") + return with asyncio.Runner() as runner: From 12bc3c36c153e8473605a4c23ef665a795f4593b Mon Sep 17 00:00:00 2001 From: Daniele Date: Tue, 6 Aug 2024 18:17:56 +0200 Subject: [PATCH 395/659] Python stream tutorial 2 (#439) * Adding tutorial_2 python example * replacing signal with KeyboardInterrupt * fixing first_offset issue --- python-stream/README.md | 5 + python-stream/offset_tracking_receive.py | 114 +++++++++++++++++++++++ python-stream/offset_tracking_send.py | 58 ++++++++++++ python-stream/receive.py | 2 +- python-stream/requirements.txt | 2 - 5 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 python-stream/offset_tracking_receive.py create mode 100644 python-stream/offset_tracking_send.py diff --git a/python-stream/README.md b/python-stream/README.md index 5abecd85..084dd8d1 100644 --- a/python-stream/README.md +++ b/python-stream/README.md @@ -21,5 +21,10 @@ Code examples are executed via `python3`: python3 send.py python3 receive.py +[Tutorial two: "Offset tracking"](): + + python3 offset_tracking_send.py + python3 offset_tracking_receive.py + To learn more, see [`rqweeze/rstream`](https://github.com/qweeze/rstream). \ No newline at end of file diff --git a/python-stream/offset_tracking_receive.py b/python-stream/offset_tracking_receive.py new file mode 100644 index 00000000..a040643f --- /dev/null +++ b/python-stream/offset_tracking_receive.py @@ -0,0 +1,114 @@ +import asyncio + +from rstream import ( + AMQPMessage, + Consumer, + ConsumerOffsetSpecification, + MessageContext, + OffsetNotFound, + OffsetType, + ServerError, + amqp_decoder, +) + +message_count = -1 +first_offset = -1 +last_offset = -1 +STREAM_NAME = "stream-offset-tracking-python" +# 2GB +STREAM_RETENTION = 2000000000 + + +async def on_message(msg: AMQPMessage, message_context: MessageContext): + global message_count + global first_offset + global last_offset + + offset = message_context.offset + if first_offset == -1: + print("First message received") + first_offset = offset + + consumer = message_context.consumer + stream = message_context.consumer.get_stream(message_context.subscriber_name) + + # store the offset after every 10 messages received + message_count = message_count + 1 + + if message_count % 10 == 0: + await consumer.store_offset( + stream=stream, + offset=offset, + subscriber_name=message_context.subscriber_name, + ) + + if "marker" in str(msg): + await consumer.store_offset( + stream=stream, + offset=offset, + subscriber_name=message_context.subscriber_name, + ) + last_offset = offset + await consumer.close() + + +async def consume(): + stored_offset = -1 + global first_offset + global last_offset + + consumer = Consumer( + host="localhost", + port=5552, + username="guest", + password="guest", + ) + + await consumer.create_stream( + STREAM_NAME, exists_ok=True, arguments={"max-length-bytes": STREAM_RETENTION} + ) + + try: + await consumer.start() + print("Started consuming: Press control +C to close") + try: + # will raise an exception if store_offset wasn't invoked before + stored_offset = await consumer.query_offset( + stream=STREAM_NAME, subscriber_name="subscriber_1" + ) + except OffsetNotFound as offset_exception: + print(f"Offset not previously stored. {offset_exception}") + + except ServerError as server_error: + print(f"Server error: {server_error}") + exit(1) + + # if no offset was previously stored start from the first offset + stored_offset = stored_offset + 1 + await consumer.subscribe( + stream=STREAM_NAME, + subscriber_name="subscriber_1", + callback=on_message, + decoder=amqp_decoder, + offset_specification=ConsumerOffsetSpecification( + OffsetType.OFFSET, stored_offset + ), + ) + await consumer.run() + + except (KeyboardInterrupt, asyncio.exceptions.CancelledError): + await consumer.close() + + # give time to the consumer task to close the consumer + await asyncio.sleep(1) + + if first_offset != -1: + print( + "Done consuming first_offset: {} last_offset {} ".format( + first_offset, last_offset + ) + ) + + +with asyncio.Runner() as runner: + runner.run(consume()) diff --git a/python-stream/offset_tracking_send.py b/python-stream/offset_tracking_send.py new file mode 100644 index 00000000..8e0c624e --- /dev/null +++ b/python-stream/offset_tracking_send.py @@ -0,0 +1,58 @@ +import asyncio + +from rstream import AMQPMessage, ConfirmationStatus, Producer + +STREAM = "stream-offset-tracking-python" +MESSAGES = 100 +# 2GB +STREAM_RETENTION = 2000000000 +confirmed_messages = 0 +all_confirmed_messages_cond = asyncio.Condition() + + +async def _on_publish_confirm_client(confirmation: ConfirmationStatus) -> None: + global confirmed_messages + if confirmation.is_confirmed: + confirmed_messages = confirmed_messages + 1 + if confirmed_messages == 100: + async with all_confirmed_messages_cond: + all_confirmed_messages_cond.notify() + + +async def publish(): + async with Producer("localhost", username="guest", password="guest") as producer: + # create a stream if it doesn't already exist + await producer.create_stream( + STREAM, exists_ok=True, arguments={"max-length-bytes": STREAM_RETENTION} + ) + + print("Publishing {} messages".format(MESSAGES)) + # Send 99 hello message + for i in range(MESSAGES - 1): + amqp_message = AMQPMessage( + body=bytes("hello: {}".format(i), "utf-8"), + ) + + await producer.send( + stream=STREAM, + message=amqp_message, + on_publish_confirm=_on_publish_confirm_client, + ) + # Send a final marker message + amqp_message = AMQPMessage( + body=bytes("marker: {}".format(i + 1), "utf-8"), + ) + + await producer.send( + stream=STREAM, + message=amqp_message, + on_publish_confirm=_on_publish_confirm_client, + ) + + async with all_confirmed_messages_cond: + await all_confirmed_messages_cond.wait() + + print("Messages confirmed: true") + + +asyncio.run(publish()) diff --git a/python-stream/receive.py b/python-stream/receive.py index f68e17da..688726a5 100644 --- a/python-stream/receive.py +++ b/python-stream/receive.py @@ -4,8 +4,8 @@ from rstream import ( AMQPMessage, Consumer, - MessageContext, ConsumerOffsetSpecification, + MessageContext, OffsetType, ) diff --git a/python-stream/requirements.txt b/python-stream/requirements.txt index e439cc10..1230cd22 100644 --- a/python-stream/requirements.txt +++ b/python-stream/requirements.txt @@ -1,3 +1 @@ rstream -uamqp -mmh3 From 8e5c0c5f0d83f88fbe6626f412c7e2bb33265a5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:16:13 +0000 Subject: [PATCH 396/659] Bump org.slf4j:slf4j-api from 2.0.13 to 2.0.14 in /java-mvn Bumps org.slf4j:slf4j-api from 2.0.13 to 2.0.14. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index db2d83fc..7869d4e0 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-api - 2.0.13 + 2.0.14 From 6c8a245b1a2ff56e29e4b5733f398183eeddf83b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:16:14 +0000 Subject: [PATCH 397/659] Bump org.slf4j:slf4j-simple from 2.0.13 to 2.0.14 in /java-mvn Bumps org.slf4j:slf4j-simple from 2.0.13 to 2.0.14. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index db2d83fc..e9ec041b 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -32,7 +32,7 @@ org.slf4j slf4j-simple - 2.0.13 + 2.0.14 From aee8aae4f20e4c8759cff419ee85fb2ed3708514 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:47:03 +0000 Subject: [PATCH 398/659] Bump org.slf4j:slf4j-simple from 2.0.13 to 2.0.14 in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.13 to 2.0.14. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index d6f07634..9ac8e630 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' - implementation 'org.slf4j:slf4j-simple:2.0.13' + implementation 'org.slf4j:slf4j-simple:2.0.14' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' From 38afd91db9b8566048c754daf067308302cf52bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:03:22 +0000 Subject: [PATCH 399/659] Bump org.slf4j:slf4j-api from 2.0.13 to 2.0.14 in /java-stream-mvn Bumps org.slf4j:slf4j-api from 2.0.13 to 2.0.14. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index f4b945fe..5e4fda16 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -17,7 +17,7 @@ org.slf4j slf4j-api - 2.0.13 + 2.0.14 ch.qos.logback From baceaf7c81a801394771bdf263fa0fe42f09e42a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:51:51 +0000 Subject: [PATCH 400/659] Bump org.slf4j:slf4j-simple from 2.0.14 to 2.0.15 in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.14 to 2.0.15. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 9ac8e630..ce655a01 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' - implementation 'org.slf4j:slf4j-simple:2.0.14' + implementation 'org.slf4j:slf4j-simple:2.0.15' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' From a7897f979bafd4b5619315592044200e483613a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:59:34 +0000 Subject: [PATCH 401/659] Bump org.slf4j:slf4j-simple from 2.0.14 to 2.0.15 in /java-mvn Bumps org.slf4j:slf4j-simple from 2.0.14 to 2.0.15. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a2ad66fe..59691f99 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -32,7 +32,7 @@ org.slf4j slf4j-simple - 2.0.14 + 2.0.15 From 7db94091dbc9bada2adf9cd26fa452668f0b10c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:59:35 +0000 Subject: [PATCH 402/659] Bump org.slf4j:slf4j-api from 2.0.14 to 2.0.15 in /java-mvn Bumps org.slf4j:slf4j-api from 2.0.14 to 2.0.15. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a2ad66fe..0ffd637b 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-api - 2.0.14 + 2.0.15 From 1877c5ede675591898e77ac3556a69e0b372d061 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:03:27 +0000 Subject: [PATCH 403/659] Bump org.slf4j:slf4j-api from 2.0.14 to 2.0.15 in /java-stream-mvn Bumps org.slf4j:slf4j-api from 2.0.14 to 2.0.15. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 5e4fda16..7f188aea 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -17,7 +17,7 @@ org.slf4j slf4j-api - 2.0.14 + 2.0.15 ch.qos.logback From 27616bfa00847882219beba81c57c9deaa870ae2 Mon Sep 17 00:00:00 2001 From: Victor Gaiva <13839490+VictorGaiva@users.noreply.github.com> Date: Sat, 10 Aug 2024 17:15:01 -0300 Subject: [PATCH 404/659] add elixir streams example --- .gitignore | 4 ++++ README.md | 1 + elixir-stream/README.md | 20 ++++++++++++++++++++ elixir-stream/consume.exs | 25 +++++++++++++++++++++++++ elixir-stream/publish.exs | 31 +++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+) create mode 100644 elixir-stream/README.md create mode 100755 elixir-stream/consume.exs create mode 100755 elixir-stream/publish.exs diff --git a/.gitignore b/.gitignore index 3f893805..42ae1774 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,10 @@ ruby*/gems/ venv/* ruby*/rubygems* +elixir-stream/deps +elixir-stream/_build +elixir-stream/.elixir_ls + java*/.idea/workspace.xml java*/.idea/encodings.xml *~ diff --git a/README.md b/README.md index 208a8ece..0d82c2ce 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ The following ports are available: * [Common Lisp](./common-lisp) * [Dart](./dart) * [Elixir](./elixir) + * [Elixir (Streams)](./elixir-stream) * [Erlang](./erlang) * [Go](./go) * [Haskell](./haskell) diff --git a/elixir-stream/README.md b/elixir-stream/README.md new file mode 100644 index 00000000..cb89b118 --- /dev/null +++ b/elixir-stream/README.md @@ -0,0 +1,20 @@ +# Elixir code for RabbitMQ tutorials + +Here you can find Elixir code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html). + +## Requirements + +These examples use the [`VictorGaiva/rabbitmq-stream`](https://github.com/VictorGaiva/rabbitmq-stream) client library. + +The dependencies are installed during the exection of the examples using `Mix.install/1` + +## Code + +Code examples are executed via `elixir`: + +Tutorial one: "Hello World!": + + elixir publish.exs + elixir consume.exs + +To learn more, see [`VictorGaiva/rabbitmq-stream`](https://github.com/VictorGaiva/rabbitmq-stream). diff --git a/elixir-stream/consume.exs b/elixir-stream/consume.exs new file mode 100755 index 00000000..0c62457f --- /dev/null +++ b/elixir-stream/consume.exs @@ -0,0 +1,25 @@ +#! /usr/bin/env elixir +require Logger + +# Installing the rabbitmq_stream Library +Mix.install([ + {:rabbitmq_stream, "~> 0.4.1"} +]) + +# First we start a Connection to the RabbitMQ Server +{:ok, connection} = RabbitMQStream.Connection.start_link() + +# We can assume the stream already exists as this sample is meant to be run after the 'publish.exs' sample + +# Now we can subscribe to the stream, receiving up to 1 chunk. +{:ok, subscription_id} = + RabbitMQStream.Connection.subscribe(connection, "my_stream", self(), :first, 1) + +# Now we can consume the messages +receive do + # Each 'deliver' data comes inside a Chunk, which may contain multiple messages + {:deliver, %{subscription_id: ^subscription_id, osiris_chunk: chunk}} -> + for message <- chunk.data_entries do + Logger.info("Received: #{inspect(message)}") + end +end diff --git a/elixir-stream/publish.exs b/elixir-stream/publish.exs new file mode 100755 index 00000000..820347fa --- /dev/null +++ b/elixir-stream/publish.exs @@ -0,0 +1,31 @@ +#! /usr/bin/env elixir +require Logger + +# Installing the rabbitmq_stream Library +Mix.install([ + {:rabbitmq_stream, "~> 0.4.1"} +]) + +# First we start a Connection to the RabbitMQ Server +{:ok, connection} = RabbitMQStream.Connection.start_link() + +# We can assume the stream doesn't exist yet, and attempt to create it. If it already exists, +# it should be still be good to go. +RabbitMQStream.Connection.create_stream(connection, "my_stream") + +# Before publishing a message, we need to declare a producer. It is required by the +# RabbitMQ Sever to prevent message duplication. +{:ok, producer_id} = + RabbitMQStream.Connection.declare_producer(connection, "my_stream", "my_producer") + +# Each producer has a sequence number, that must must be published with the message, and +# incremented after each message. +{:ok, sequence_number} = + RabbitMQStream.Connection.query_producer_sequence(connection, "my_stream", "my_producer") + +# Now we can publish a message. Note that we only specify the producer_id and sequence number. +# The target Stream is already tracked by the server based on the producer_id. +:ok = + RabbitMQStream.Connection.publish(connection, producer_id, sequence_number + 1, "Hello, World!") + +Logger.info("Published: \"Hello, World!\"") From ec605203b176af969fd61524a0d4ed513b093eb2 Mon Sep 17 00:00:00 2001 From: Daniele Date: Mon, 12 Aug 2024 15:41:13 +0200 Subject: [PATCH 405/659] Rust stream tutorial 2 (#440) * tutorial2: rust implementation * replacing command key exit with Notify * make received_messages variable local to the consuming thread * adding a break when marker is detected * bumping version of client * removing consuming routine * using first_offset and last_offset as Option instead of i64 --- rust-stream/Cargo.lock | 378 ++++++++---------- rust-stream/Cargo.toml | 4 +- rust-stream/README.md | 7 +- .../src/bin/receive_offset_tracking.rs | 85 ++++ rust-stream/src/bin/send_offset_tracking.rs | 66 +++ 5 files changed, 316 insertions(+), 224 deletions(-) create mode 100644 rust-stream/src/bin/receive_offset_tracking.rs create mode 100644 rust-stream/src/bin/send_offset_tracking.rs diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock index 2259e460..c636418f 100644 --- a/rust-stream/Cargo.lock +++ b/rust-stream/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -34,26 +34,26 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -72,9 +72,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bumpalo" @@ -90,15 +90,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cc" -version = "1.0.95" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" [[package]] name = "cfg-if" @@ -117,7 +117,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -128,9 +128,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "dashmap" @@ -147,15 +147,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn", ] [[package]] @@ -229,7 +229,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -264,9 +264,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -275,15 +275,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hermit-abi" @@ -326,9 +326,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown", @@ -345,15 +345,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -361,81 +361,72 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] @@ -448,18 +439,18 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "ordered-float" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" dependencies = [ "num-traits", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -467,15 +458,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -501,7 +492,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -518,9 +509,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro-crate" @@ -533,9 +527,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -551,9 +545,9 @@ dependencies = [ [[package]] name = "rabbitmq-stream-client" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88174e13a7d829a79af91437e439722bd6b095c819f7f2973c25e6ff2b94e173" +checksum = "26db8c0eba34b3cfbb7eebe3cd661f3de34ec6e6ccecb1a4adfeebf4dd2d97ad" dependencies = [ "async-trait", "bytes", @@ -574,9 +568,9 @@ dependencies = [ [[package]] name = "rabbitmq-stream-protocol" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31f750ab83e13e0e78d5b3aca6659e7e72049893fdcbd3166a5a61dfdc6fa57" +checksum = "618143b5c7af2535255838bc25444db6b12b8e70ad3d3b93aa6ef51423de1130" dependencies = [ "byteorder", "chrono", @@ -618,9 +612,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags", ] @@ -637,7 +631,7 @@ dependencies = [ "libc", "spin", "untrusted", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -651,9 +645,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" @@ -666,9 +660,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.11" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", @@ -713,9 +707,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "signal-hook-registry" @@ -743,12 +737,12 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -759,20 +753,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "837a7e8026c6ce912ff01cefbe8cafc2f8010ac49682e2a3d9decc3bce1ecaaf" dependencies = [ "proc-macro2", "quote", @@ -781,29 +764,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -816,32 +799,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -867,23 +849,22 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -915,7 +896,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -956,9 +937,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -967,9 +948,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" [[package]] name = "wasi" @@ -998,7 +979,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-shared", ] @@ -1020,7 +1001,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1037,16 +1018,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -1055,135 +1027,99 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" -dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "winnow" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] [[package]] -name = "winnow" -version = "0.5.40" +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "memchr", + "proc-macro2", + "quote", + "syn", ] diff --git a/rust-stream/Cargo.toml b/rust-stream/Cargo.toml index 024d3084..d1bfdbe8 100644 --- a/rust-stream/Cargo.toml +++ b/rust-stream/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -rabbitmq-stream-client = "0.4.2" -tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] } +rabbitmq-stream-client = "0.4.4" +tokio = { version = "1.39.0", features = ["rt", "rt-multi-thread", "macros"] } futures = "0.3.30" diff --git a/rust-stream/README.md b/rust-stream/README.md index a02e81a5..e8c8cb47 100644 --- a/rust-stream/README.md +++ b/rust-stream/README.md @@ -19,4 +19,9 @@ Each cargo command should be launched in a separate shell. #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) cargo run --bin receive - cargo run --bin send \ No newline at end of file + cargo run --bin send + +#### [Tutorial one: "Offset tracking!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) + + cargo run --bin send_offset_tracking + cargo run --bin receive_offset_tracking \ No newline at end of file diff --git a/rust-stream/src/bin/receive_offset_tracking.rs b/rust-stream/src/bin/receive_offset_tracking.rs new file mode 100644 index 00000000..3774081a --- /dev/null +++ b/rust-stream/src/bin/receive_offset_tracking.rs @@ -0,0 +1,85 @@ +use futures::StreamExt; +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, OffsetSpecification, ResponseCode}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "stream-offset-tracking-rust"; + let mut first_offset: Option = None; + let mut last_offset: Option = None; + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(2)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + std::process::exit(1); + } + } + } + } + + let mut consumer = environment + .consumer() + .name("consumer-1") + .offset(OffsetSpecification::First) + .build(stream) + .await + .unwrap(); + + println!("Started consuming"); + + let mut stored_offset: u64 = consumer.query_offset().await.unwrap_or_else(|_| 0); + + if stored_offset > 0 { + stored_offset += 1; + } + consumer = environment + .consumer() + .name("consumer-1") + .offset(OffsetSpecification::Offset(stored_offset)) + .build(stream) + .await + .unwrap(); + + let mut received_messages: i64 = -1; + while let Some(delivery) = consumer.next().await { + let d = delivery.unwrap(); + + if !first_offset.is_some() { + println!("First message received"); + first_offset = Some(d.offset()); + } + received_messages = received_messages + 1; + if received_messages % 10 == 0 + || String::from_utf8_lossy(d.message().data().unwrap()).contains("marker") + { + let _ = consumer + .store_offset(d.offset()) + .await + .unwrap_or_else(|e| println!("Err: {}", e)); + if String::from_utf8_lossy(d.message().data().unwrap()).contains("marker") { + last_offset = Some(d.offset()); + let handle = consumer.handle(); + _ = handle.close().await; + break; + } + } + } + + if first_offset.is_some() { + println!( + "Done consuming first_offset: {:?} last_offset: {:?} ", first_offset.unwrap(), last_offset.unwrap()) + } + + Ok(()) +} diff --git a/rust-stream/src/bin/send_offset_tracking.rs b/rust-stream/src/bin/send_offset_tracking.rs new file mode 100644 index 00000000..d40be89e --- /dev/null +++ b/rust-stream/src/bin/send_offset_tracking.rs @@ -0,0 +1,66 @@ +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, Message, ResponseCode}; +use std::sync::atomic::{AtomicU32, Ordering}; +use std::sync::Arc; +use tokio::sync::Notify; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "stream-offset-tracking-rust"; + let message_count = 100; + let confirmed_messages = Arc::new(AtomicU32::new(0)); + let notify_on_send = Arc::new(Notify::new()); + + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(2)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + std::process::exit(1); + } + } + } + } + + println!("Publishing {:?} messages", message_count); + + let producer = environment.producer().build(stream).await?; + + for i in 0..message_count { + let msg; + if i < message_count - 1 { + msg = Message::builder().body(format!("hello{}", i)).build(); + } else { + msg = Message::builder().body(format!("marker{}", i)).build(); + }; + + let counter = confirmed_messages.clone(); + let notifier = notify_on_send.clone(); + producer + .send(msg, move |_| { + let inner_counter = counter.clone(); + let inner_notifier = notifier.clone(); + async move { + if inner_counter.fetch_add(1, Ordering::Relaxed) == message_count - 1 { + inner_notifier.notify_one(); + } + } + }) + .await?; + } + + notify_on_send.notified().await; + println!("Messages confirmed: True"); + producer.close().await?; + Ok(()) +} From 33914fb4883a348a8321a1759728a1c4200da628 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:31:55 +0000 Subject: [PATCH 406/659] Bump org.slf4j:slf4j-simple from 2.0.15 to 2.0.16 in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index ce655a01..a13910fa 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' - implementation 'org.slf4j:slf4j-simple:2.0.15' + implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' From bdb5293dafcf07b0953cd9540db3c312b289c161 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:34:57 +0000 Subject: [PATCH 407/659] Bump org.slf4j:slf4j-api from 2.0.15 to 2.0.16 in /java-stream-mvn Bumps org.slf4j:slf4j-api from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 7f188aea..2ede3da5 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -17,7 +17,7 @@ org.slf4j slf4j-api - 2.0.15 + 2.0.16 ch.qos.logback From 9e472f0bec36a1dbdde0aac9c71276b16a63e332 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:51:49 +0000 Subject: [PATCH 408/659] Bump org.slf4j:slf4j-simple from 2.0.15 to 2.0.16 in /java-mvn Bumps org.slf4j:slf4j-simple from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index af10de4f..c03c6d17 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -32,7 +32,7 @@ org.slf4j slf4j-simple - 2.0.15 + 2.0.16 From c89086e817be373fb2bf266e1acbbcd28e5057fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:51:51 +0000 Subject: [PATCH 409/659] Bump org.slf4j:slf4j-api from 2.0.15 to 2.0.16 in /java-mvn Bumps org.slf4j:slf4j-api from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index af10de4f..7820c227 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-api - 2.0.15 + 2.0.16 From 72fbb1b8827720b88ded50e905cdc21099712bd3 Mon Sep 17 00:00:00 2001 From: Daniele Date: Mon, 12 Aug 2024 15:41:13 +0200 Subject: [PATCH 410/659] Rust stream tutorial 2 (#440) * tutorial2: rust implementation * replacing command key exit with Notify * make received_messages variable local to the consuming thread * adding a break when marker is detected * bumping version of client * removing consuming routine * using first_offset and last_offset as Option instead of i64 --- rust-stream/Cargo.lock | 378 ++++++++---------- rust-stream/Cargo.toml | 4 +- rust-stream/README.md | 7 +- .../src/bin/receive_offset_tracking.rs | 85 ++++ rust-stream/src/bin/send_offset_tracking.rs | 66 +++ 5 files changed, 316 insertions(+), 224 deletions(-) create mode 100644 rust-stream/src/bin/receive_offset_tracking.rs create mode 100644 rust-stream/src/bin/send_offset_tracking.rs diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock index 2259e460..c636418f 100644 --- a/rust-stream/Cargo.lock +++ b/rust-stream/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -34,26 +34,26 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -72,9 +72,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bumpalo" @@ -90,15 +90,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cc" -version = "1.0.95" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" [[package]] name = "cfg-if" @@ -117,7 +117,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -128,9 +128,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "dashmap" @@ -147,15 +147,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn", ] [[package]] @@ -229,7 +229,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -264,9 +264,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -275,15 +275,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hermit-abi" @@ -326,9 +326,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown", @@ -345,15 +345,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -361,81 +361,72 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] @@ -448,18 +439,18 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "ordered-float" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" dependencies = [ "num-traits", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -467,15 +458,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -501,7 +492,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -518,9 +509,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro-crate" @@ -533,9 +527,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -551,9 +545,9 @@ dependencies = [ [[package]] name = "rabbitmq-stream-client" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88174e13a7d829a79af91437e439722bd6b095c819f7f2973c25e6ff2b94e173" +checksum = "26db8c0eba34b3cfbb7eebe3cd661f3de34ec6e6ccecb1a4adfeebf4dd2d97ad" dependencies = [ "async-trait", "bytes", @@ -574,9 +568,9 @@ dependencies = [ [[package]] name = "rabbitmq-stream-protocol" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31f750ab83e13e0e78d5b3aca6659e7e72049893fdcbd3166a5a61dfdc6fa57" +checksum = "618143b5c7af2535255838bc25444db6b12b8e70ad3d3b93aa6ef51423de1130" dependencies = [ "byteorder", "chrono", @@ -618,9 +612,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags", ] @@ -637,7 +631,7 @@ dependencies = [ "libc", "spin", "untrusted", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -651,9 +645,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" @@ -666,9 +660,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.11" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", @@ -713,9 +707,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "signal-hook-registry" @@ -743,12 +737,12 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -759,20 +753,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "837a7e8026c6ce912ff01cefbe8cafc2f8010ac49682e2a3d9decc3bce1ecaaf" dependencies = [ "proc-macro2", "quote", @@ -781,29 +764,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -816,32 +799,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -867,23 +849,22 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -915,7 +896,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -956,9 +937,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -967,9 +948,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" [[package]] name = "wasi" @@ -998,7 +979,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-shared", ] @@ -1020,7 +1001,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1037,16 +1018,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -1055,135 +1027,99 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" -dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "winnow" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] [[package]] -name = "winnow" -version = "0.5.40" +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "memchr", + "proc-macro2", + "quote", + "syn", ] diff --git a/rust-stream/Cargo.toml b/rust-stream/Cargo.toml index 024d3084..d1bfdbe8 100644 --- a/rust-stream/Cargo.toml +++ b/rust-stream/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -rabbitmq-stream-client = "0.4.2" -tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] } +rabbitmq-stream-client = "0.4.4" +tokio = { version = "1.39.0", features = ["rt", "rt-multi-thread", "macros"] } futures = "0.3.30" diff --git a/rust-stream/README.md b/rust-stream/README.md index a02e81a5..e8c8cb47 100644 --- a/rust-stream/README.md +++ b/rust-stream/README.md @@ -19,4 +19,9 @@ Each cargo command should be launched in a separate shell. #### [Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) cargo run --bin receive - cargo run --bin send \ No newline at end of file + cargo run --bin send + +#### [Tutorial one: "Offset tracking!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) + + cargo run --bin send_offset_tracking + cargo run --bin receive_offset_tracking \ No newline at end of file diff --git a/rust-stream/src/bin/receive_offset_tracking.rs b/rust-stream/src/bin/receive_offset_tracking.rs new file mode 100644 index 00000000..3774081a --- /dev/null +++ b/rust-stream/src/bin/receive_offset_tracking.rs @@ -0,0 +1,85 @@ +use futures::StreamExt; +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, OffsetSpecification, ResponseCode}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "stream-offset-tracking-rust"; + let mut first_offset: Option = None; + let mut last_offset: Option = None; + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(2)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + std::process::exit(1); + } + } + } + } + + let mut consumer = environment + .consumer() + .name("consumer-1") + .offset(OffsetSpecification::First) + .build(stream) + .await + .unwrap(); + + println!("Started consuming"); + + let mut stored_offset: u64 = consumer.query_offset().await.unwrap_or_else(|_| 0); + + if stored_offset > 0 { + stored_offset += 1; + } + consumer = environment + .consumer() + .name("consumer-1") + .offset(OffsetSpecification::Offset(stored_offset)) + .build(stream) + .await + .unwrap(); + + let mut received_messages: i64 = -1; + while let Some(delivery) = consumer.next().await { + let d = delivery.unwrap(); + + if !first_offset.is_some() { + println!("First message received"); + first_offset = Some(d.offset()); + } + received_messages = received_messages + 1; + if received_messages % 10 == 0 + || String::from_utf8_lossy(d.message().data().unwrap()).contains("marker") + { + let _ = consumer + .store_offset(d.offset()) + .await + .unwrap_or_else(|e| println!("Err: {}", e)); + if String::from_utf8_lossy(d.message().data().unwrap()).contains("marker") { + last_offset = Some(d.offset()); + let handle = consumer.handle(); + _ = handle.close().await; + break; + } + } + } + + if first_offset.is_some() { + println!( + "Done consuming first_offset: {:?} last_offset: {:?} ", first_offset.unwrap(), last_offset.unwrap()) + } + + Ok(()) +} diff --git a/rust-stream/src/bin/send_offset_tracking.rs b/rust-stream/src/bin/send_offset_tracking.rs new file mode 100644 index 00000000..d40be89e --- /dev/null +++ b/rust-stream/src/bin/send_offset_tracking.rs @@ -0,0 +1,66 @@ +use rabbitmq_stream_client::error::StreamCreateError; +use rabbitmq_stream_client::types::{ByteCapacity, Message, ResponseCode}; +use std::sync::atomic::{AtomicU32, Ordering}; +use std::sync::Arc; +use tokio::sync::Notify; + +#[tokio::main] +async fn main() -> Result<(), Box> { + use rabbitmq_stream_client::Environment; + let environment = Environment::builder().build().await?; + let stream = "stream-offset-tracking-rust"; + let message_count = 100; + let confirmed_messages = Arc::new(AtomicU32::new(0)); + let notify_on_send = Arc::new(Notify::new()); + + let create_response = environment + .stream_creator() + .max_length(ByteCapacity::GB(2)) + .create(stream) + .await; + + if let Err(e) = create_response { + if let StreamCreateError::Create { stream, status } = e { + match status { + // we can ignore this error because the stream already exists + ResponseCode::StreamAlreadyExists => {} + err => { + println!("Error creating stream: {:?} {:?}", stream, err); + std::process::exit(1); + } + } + } + } + + println!("Publishing {:?} messages", message_count); + + let producer = environment.producer().build(stream).await?; + + for i in 0..message_count { + let msg; + if i < message_count - 1 { + msg = Message::builder().body(format!("hello{}", i)).build(); + } else { + msg = Message::builder().body(format!("marker{}", i)).build(); + }; + + let counter = confirmed_messages.clone(); + let notifier = notify_on_send.clone(); + producer + .send(msg, move |_| { + let inner_counter = counter.clone(); + let inner_notifier = notifier.clone(); + async move { + if inner_counter.fetch_add(1, Ordering::Relaxed) == message_count - 1 { + inner_notifier.notify_one(); + } + } + }) + .await?; + } + + notify_on_send.notified().await; + println!("Messages confirmed: True"); + producer.close().await?; + Ok(()) +} From e27202067117638246872af35dd5b02a22712c14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:31:55 +0000 Subject: [PATCH 411/659] Bump org.slf4j:slf4j-simple from 2.0.15 to 2.0.16 in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index ce655a01..a13910fa 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' - implementation 'org.slf4j:slf4j-simple:2.0.15' + implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' From 291fb04fd633495f660b9f22f309e39c755453b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:34:57 +0000 Subject: [PATCH 412/659] Bump org.slf4j:slf4j-api from 2.0.15 to 2.0.16 in /java-stream-mvn Bumps org.slf4j:slf4j-api from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 7f188aea..2ede3da5 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -17,7 +17,7 @@ org.slf4j slf4j-api - 2.0.15 + 2.0.16 ch.qos.logback From c27407674ba8cd53407c8f0c8d0218c8bad9f3ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:51:51 +0000 Subject: [PATCH 413/659] Bump org.slf4j:slf4j-api from 2.0.15 to 2.0.16 in /java-mvn Bumps org.slf4j:slf4j-api from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index af10de4f..7820c227 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-api - 2.0.15 + 2.0.16 From d7332501002e61fe062a7f11311794f3ea6eb179 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:51:49 +0000 Subject: [PATCH 414/659] Bump org.slf4j:slf4j-simple from 2.0.15 to 2.0.16 in /java-mvn Bumps org.slf4j:slf4j-simple from 2.0.15 to 2.0.16. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 7820c227..66d37d72 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -32,7 +32,7 @@ org.slf4j slf4j-simple - 2.0.15 + 2.0.16 From 452d88f436cf264dec1e4df57ac68c6cbeac997d Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 14 Aug 2024 11:11:03 -0400 Subject: [PATCH 415/659] Elixir streams: do not assume any particular application startup order --- elixir-stream/README.md | 9 +++++++-- elixir-stream/consume.exs | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/elixir-stream/README.md b/elixir-stream/README.md index cb89b118..9ea32398 100644 --- a/elixir-stream/README.md +++ b/elixir-stream/README.md @@ -14,7 +14,12 @@ Code examples are executed via `elixir`: Tutorial one: "Hello World!": - elixir publish.exs - elixir consume.exs +``` shell +# run the publisher +elixir publish.exs + +# run the consumer +elixir consume.exs +``` To learn more, see [`VictorGaiva/rabbitmq-stream`](https://github.com/VictorGaiva/rabbitmq-stream). diff --git a/elixir-stream/consume.exs b/elixir-stream/consume.exs index 0c62457f..42fea4c2 100755 --- a/elixir-stream/consume.exs +++ b/elixir-stream/consume.exs @@ -9,7 +9,9 @@ Mix.install([ # First we start a Connection to the RabbitMQ Server {:ok, connection} = RabbitMQStream.Connection.start_link() -# We can assume the stream already exists as this sample is meant to be run after the 'publish.exs' sample +# We can assume the stream doesn't exist yet, and attempt to create it. If it already exists, +# it should be still be good to go. +RabbitMQStream.Connection.create_stream(connection, "my_stream") # Now we can subscribe to the stream, receiving up to 1 chunk. {:ok, subscription_id} = From b78caeadacf5b0fd06fd334538316ee8001a6de6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:41:39 +0000 Subject: [PATCH 416/659] Bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.16.0 to 0.17.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Changelog](https://github.com/rabbitmq/rabbitmq-stream-java-client/blob/main/release-versions.txt) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.16.0...v0.17.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 2ede3da5..7bb55dae 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.16.0 + 0.17.0 org.slf4j From 5d5865a602385be9e6558dbe85946f5613fec4a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:43:44 +0000 Subject: [PATCH 417/659] Bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index a13910fa..2bbc10f2 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.3' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.0' } test { From 7714fbe89ff5ff2e0b277073e87a5501bec07a91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:48:00 +0000 Subject: [PATCH 418/659] Bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 2bbc10f2..eea03207 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.0' } From 9ae40914046a082fcc63876f03adf0a29d78865f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:10:08 +0000 Subject: [PATCH 419/659] Bump org.junit.jupiter:junit-jupiter from 5.10.3 to 5.11.0 in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 66d37d72..c433e2dd 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.10.3 + 5.11.0 test From 7cbd3662a2951e9204de140e0e549630d4460e85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:56:27 +0000 Subject: [PATCH 420/659] Bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.6 to 1.5.7. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.6...v_1.5.7) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 7bb55dae..dcd6924f 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.6 + 1.5.7 From 9031693daf27baeb368c81d8c25eccef5b061f14 Mon Sep 17 00:00:00 2001 From: Daniele Date: Mon, 19 Aug 2024 09:49:17 +0200 Subject: [PATCH 421/659] fixing website links to streaming tutorial_2 for python and rust (#460) --- python-stream/README.md | 2 +- rust-stream/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python-stream/README.md b/python-stream/README.md index 084dd8d1..42c58642 100644 --- a/python-stream/README.md +++ b/python-stream/README.md @@ -21,7 +21,7 @@ Code examples are executed via `python3`: python3 send.py python3 receive.py -[Tutorial two: "Offset tracking"](): +[Tutorial two: "Offset tracking"](https://www.rabbitmq.com/tutorials/tutorial-two-python-stream): python3 offset_tracking_send.py python3 offset_tracking_receive.py diff --git a/rust-stream/README.md b/rust-stream/README.md index e8c8cb47..5ba82d6f 100644 --- a/rust-stream/README.md +++ b/rust-stream/README.md @@ -21,7 +21,7 @@ Each cargo command should be launched in a separate shell. cargo run --bin receive cargo run --bin send -#### [Tutorial one: "Offset tracking!"](https://www.rabbitmq.com/tutorials/tutorial-one-rust-stream.html) +#### [Tutorial one: "Offset tracking!"](https://www.rabbitmq.com/tutorials/tutorial-two-rust-stream.html) cargo run --bin send_offset_tracking cargo run --bin receive_offset_tracking \ No newline at end of file From 94cad8b57e2a6719302a6e29bc16f7f6b613c4c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:38:16 +0000 Subject: [PATCH 422/659] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.1...surefire-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c433e2dd..c57c54a8 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.3.1 + 3.4.0 ${test-arguments} From 6c12968e535041f6e5199618ff58e2642da53f3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:38:24 +0000 Subject: [PATCH 423/659] Bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.26 to 4.2.27. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.26...v4.2.27) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c433e2dd..20cd03be 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.26 + 4.2.27 test From f4827d76f139991ac715bd51390e8a5cf1476e5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:57:26 +0000 Subject: [PATCH 424/659] Bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.26 to 4.2.27. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.26...v4.2.27) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index eea03207..3e308e76 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.12.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.26' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.0' } From 9048741bb6848afc1798940a26352204260eaa2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 17:46:15 +0000 Subject: [PATCH 425/659] Bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.1.6 to 3.1.7. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.1.6...v3.1.7) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 2407753d..13fdfd07 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.1.6 + 3.1.7 From 0d25d323d0cde38506eb58752f7a691f818519a0 Mon Sep 17 00:00:00 2001 From: magne Date: Thu, 8 Aug 2024 11:33:43 +0200 Subject: [PATCH 426/659] add nodejs-stream offset-tracking tutorials --- .../offset_tracking_receive.js | 61 +++++++++++++++++++ .../offset_tracking_send.js | 36 +++++++++++ javascript-nodejs-stream/package-lock.json | 14 ++--- javascript-nodejs-stream/package.json | 4 +- 4 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 javascript-nodejs-stream/offset_tracking_receive.js create mode 100644 javascript-nodejs-stream/offset_tracking_send.js diff --git a/javascript-nodejs-stream/offset_tracking_receive.js b/javascript-nodejs-stream/offset_tracking_receive.js new file mode 100644 index 00000000..0985418f --- /dev/null +++ b/javascript-nodejs-stream/offset_tracking_receive.js @@ -0,0 +1,61 @@ +const rabbit = require("rabbitmq-stream-js-client"); + +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +async function main() { + const streamName = "stream-offset-tracking-javascript"; + + console.log("Connecting..."); + const client = await rabbit.connect({ + hostname: "localhost", + port: 5552, + username: "guest", + password: "guest", + vhost: "/", + }); + + const consumerRef = "offset-tracking-tutorial"; + let firstOffset = undefined; + let offsetSpecification = rabbit.Offset.first(); + try { + const offset = await client.queryOffset({ reference: consumerRef, stream: streamName }); + firstOffset = offset + 1n; + offsetSpecification = rabbit.Offset.offset(firstOffset); + } catch (e) {} + + let lastOffset = offsetSpecification.value; + let messageCount = 0; + const consumer = await client.declareConsumer( + { stream: streamName, offset: offsetSpecification, consumerRef }, + async (message) => { + messageCount++; + if (!firstOffset && messageCount === 1) { + firstOffset = message.offset; + console.log("First message received"); + } + if (messageCount % 10 === 0) { + console.log("Storing offset"); + await consumer.storeOffset(message.offset); + } + if (message.content.toString() === "marker") { + console.log("Marker found"); + lastOffset = message.offset; + await consumer.storeOffset(message.offset); + console.log(`Done consuming, first offset was ${firstOffset}, last offset was ${lastOffset}`); + await consumer.close(true); + } + } + ); + + console.log(`Start consuming...`); + await sleep(2000); +} + +main() + .then(async () => { + await new Promise(function () {}); + }) + .catch((res) => { + console.log("Error while receiving message!", res); + process.exit(-1); + }); diff --git a/javascript-nodejs-stream/offset_tracking_send.js b/javascript-nodejs-stream/offset_tracking_send.js new file mode 100644 index 00000000..52113878 --- /dev/null +++ b/javascript-nodejs-stream/offset_tracking_send.js @@ -0,0 +1,36 @@ +const rabbit = require("rabbitmq-stream-js-client"); + +async function main() { + console.log("Connecting..."); + const client = await rabbit.connect({ + vhost: "/", + port: 5552, + hostname: "localhost", + username: "guest", + password: "guest", + }); + + console.log("Making sure the stream exists..."); + const streamName = "stream-offset-tracking-javascript"; + await client.createStream({ stream: streamName, arguments: {} }); + + console.log("Creating the publisher..."); + const publisher = await client.declarePublisher({ stream: streamName }); + + const messageCount = 100; + console.log(`Publishing ${messageCount} messages`); + for (let i = 0; i < messageCount; i++) { + const body = i === messageCount - 1 ? "marker" : `hello ${i}`; + await publisher.send(Buffer.from(body)); + } + + console.log("Closing the connection..."); + await client.close(); +} + +main() + .then(() => console.log("done!")) + .catch((res) => { + console.log("Error in publishing message!", res); + process.exit(-1); + }); diff --git a/javascript-nodejs-stream/package-lock.json b/javascript-nodejs-stream/package-lock.json index 30d25692..96b1091c 100644 --- a/javascript-nodejs-stream/package-lock.json +++ b/javascript-nodejs-stream/package-lock.json @@ -8,7 +8,7 @@ "name": "rabbitmq-stream-node-tutorial", "version": "1.0.0", "dependencies": { - "rabbitmq-stream-js-client": "^0.3.1" + "rabbitmq-stream-js-client": "^0.4.1" } }, "node_modules/lru-cache": { @@ -23,9 +23,9 @@ } }, "node_modules/rabbitmq-stream-js-client": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz", - "integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.1.tgz", + "integrity": "sha512-Dny3vFup/TQMcWXIKQUl3hdQQC1/ixeUEf4uEgzvwaFK/dIaUhsBT4J7i0mD581TUbCNhXFw4uWEXle9bXdmtA==", "dependencies": { "semver": "^7.5.4" } @@ -60,9 +60,9 @@ } }, "rabbitmq-stream-js-client": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz", - "integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.1.tgz", + "integrity": "sha512-Dny3vFup/TQMcWXIKQUl3hdQQC1/ixeUEf4uEgzvwaFK/dIaUhsBT4J7i0mD581TUbCNhXFw4uWEXle9bXdmtA==", "requires": { "semver": "^7.5.4" } diff --git a/javascript-nodejs-stream/package.json b/javascript-nodejs-stream/package.json index d7fcb4cd..3d1a354d 100644 --- a/javascript-nodejs-stream/package.json +++ b/javascript-nodejs-stream/package.json @@ -3,10 +3,12 @@ "version": "1.0.0", "description": "Tutorial for the nodejs RabbitMQ stream client", "scripts": { + "offset-tracking-publish": "node offset_tracking_send.js", + "offset-tracking-receive": "node offset_tracking_receive.js", "send": "node send.js", "receive": "node receive.js" }, "dependencies": { - "rabbitmq-stream-js-client": "^0.3.1" + "rabbitmq-stream-js-client": "^0.4.1" } } From 692f2f7bacc5250d7a7d23a105ca2dd3b8a1f6a6 Mon Sep 17 00:00:00 2001 From: magne Date: Mon, 19 Aug 2024 17:47:56 +0200 Subject: [PATCH 427/659] fix: fix offset logging and readme --- javascript-nodejs-stream/README.md | 15 +++++++++++++-- .../offset_tracking_receive.js | 5 ++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/javascript-nodejs-stream/README.md b/javascript-nodejs-stream/README.md index 433bb3e3..dde542f2 100644 --- a/javascript-nodejs-stream/README.md +++ b/javascript-nodejs-stream/README.md @@ -14,7 +14,18 @@ Apart from [Node.js](https://nodejs.org/en/download/), these examples use the [` Code examples are executed via `npm`: - npm run publish - npm run receive +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-javascript-stream): + +```shell +npm run send +npm run receive +``` + +[Tutorial two: Offset Tracking](https://www.rabbitmq.com/tutorials/tutorial-two-javascript-stream): + +```shell +npm run offset-tracking-publish +npm run offset-tracking-receive +``` To learn more, see [`coders51/rabbitmq-stream-js-client`](https://github.com/coders51/rabbitmq-stream-js-client). diff --git a/javascript-nodejs-stream/offset_tracking_receive.js b/javascript-nodejs-stream/offset_tracking_receive.js index 0985418f..b0726c6f 100644 --- a/javascript-nodejs-stream/offset_tracking_receive.js +++ b/javascript-nodejs-stream/offset_tracking_receive.js @@ -19,8 +19,7 @@ async function main() { let offsetSpecification = rabbit.Offset.first(); try { const offset = await client.queryOffset({ reference: consumerRef, stream: streamName }); - firstOffset = offset + 1n; - offsetSpecification = rabbit.Offset.offset(firstOffset); + offsetSpecification = rabbit.Offset.offset(offset + 1n); } catch (e) {} let lastOffset = offsetSpecification.value; @@ -34,7 +33,6 @@ async function main() { console.log("First message received"); } if (messageCount % 10 === 0) { - console.log("Storing offset"); await consumer.storeOffset(message.offset); } if (message.content.toString() === "marker") { @@ -43,6 +41,7 @@ async function main() { await consumer.storeOffset(message.offset); console.log(`Done consuming, first offset was ${firstOffset}, last offset was ${lastOffset}`); await consumer.close(true); + process.exit(0); } } ); From 7195e60a2dcee041653d54bdd5a5c0e9fd6691e6 Mon Sep 17 00:00:00 2001 From: magne Date: Tue, 20 Aug 2024 16:00:07 +0200 Subject: [PATCH 428/659] chore: fix epipe error --- javascript-nodejs-stream/offset_tracking_receive.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript-nodejs-stream/offset_tracking_receive.js b/javascript-nodejs-stream/offset_tracking_receive.js index b0726c6f..b401b11b 100644 --- a/javascript-nodejs-stream/offset_tracking_receive.js +++ b/javascript-nodejs-stream/offset_tracking_receive.js @@ -39,15 +39,15 @@ async function main() { console.log("Marker found"); lastOffset = message.offset; await consumer.storeOffset(message.offset); - console.log(`Done consuming, first offset was ${firstOffset}, last offset was ${lastOffset}`); await consumer.close(true); - process.exit(0); } } ); console.log(`Start consuming...`); await sleep(2000); + console.log(`Done consuming, first offset was ${firstOffset}, last offset was ${lastOffset}`); + process.exit(0); } main() From 9124b6050954c1963a935cd1afc5abd6e896e001 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:18:58 +0000 Subject: [PATCH 429/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.2 to 3.3.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.2...v3.3.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 1bc7ec84..1b17e9c7 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 From da26d8bd66e5bbc4e5fb2bc3168cb88bec4fd904 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:20:08 +0000 Subject: [PATCH 430/659] Bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.2 to 3.3.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.2...v3.3.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 13fdfd07..efc3e65e 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 From 514aa10587af8a7526b3ff38fbf122478b7fce1f Mon Sep 17 00:00:00 2001 From: Michele Agnello <38959260+l4mby@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:14:41 +0200 Subject: [PATCH 431/659] fix: example beahviour (#467) Co-authored-by: magne --- .../offset_tracking_receive.js | 11 +++++------ javascript-nodejs-stream/package-lock.json | 14 +++++++------- javascript-nodejs-stream/package.json | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/javascript-nodejs-stream/offset_tracking_receive.js b/javascript-nodejs-stream/offset_tracking_receive.js index b401b11b..9663d3b9 100644 --- a/javascript-nodejs-stream/offset_tracking_receive.js +++ b/javascript-nodejs-stream/offset_tracking_receive.js @@ -3,8 +3,6 @@ const rabbit = require("rabbitmq-stream-js-client"); const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); async function main() { - const streamName = "stream-offset-tracking-javascript"; - console.log("Connecting..."); const client = await rabbit.connect({ hostname: "localhost", @@ -14,6 +12,10 @@ async function main() { vhost: "/", }); + console.log("Making sure the stream exists..."); + const streamName = "stream-offset-tracking-javascript"; + await client.createStream({ stream: streamName, arguments: {} }); + const consumerRef = "offset-tracking-tutorial"; let firstOffset = undefined; let offsetSpecification = rabbit.Offset.first(); @@ -47,13 +49,10 @@ async function main() { console.log(`Start consuming...`); await sleep(2000); console.log(`Done consuming, first offset was ${firstOffset}, last offset was ${lastOffset}`); - process.exit(0); } main() - .then(async () => { - await new Promise(function () {}); - }) + .then(async () => process.exit(0)) .catch((res) => { console.log("Error while receiving message!", res); process.exit(-1); diff --git a/javascript-nodejs-stream/package-lock.json b/javascript-nodejs-stream/package-lock.json index 96b1091c..b0effd4e 100644 --- a/javascript-nodejs-stream/package-lock.json +++ b/javascript-nodejs-stream/package-lock.json @@ -8,7 +8,7 @@ "name": "rabbitmq-stream-node-tutorial", "version": "1.0.0", "dependencies": { - "rabbitmq-stream-js-client": "^0.4.1" + "rabbitmq-stream-js-client": "^0.4.2" } }, "node_modules/lru-cache": { @@ -23,9 +23,9 @@ } }, "node_modules/rabbitmq-stream-js-client": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.1.tgz", - "integrity": "sha512-Dny3vFup/TQMcWXIKQUl3hdQQC1/ixeUEf4uEgzvwaFK/dIaUhsBT4J7i0mD581TUbCNhXFw4uWEXle9bXdmtA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.2.tgz", + "integrity": "sha512-/hcTDZJ8oUnVZoWFwGbD278qZ7F2Yb4mSDmzUQ1kpZh+82C0xiCDa0+nYotGauwZXsXddjnyc5C6q6qaP2OU1A==", "dependencies": { "semver": "^7.5.4" } @@ -60,9 +60,9 @@ } }, "rabbitmq-stream-js-client": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.1.tgz", - "integrity": "sha512-Dny3vFup/TQMcWXIKQUl3hdQQC1/ixeUEf4uEgzvwaFK/dIaUhsBT4J7i0mD581TUbCNhXFw4uWEXle9bXdmtA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.4.2.tgz", + "integrity": "sha512-/hcTDZJ8oUnVZoWFwGbD278qZ7F2Yb4mSDmzUQ1kpZh+82C0xiCDa0+nYotGauwZXsXddjnyc5C6q6qaP2OU1A==", "requires": { "semver": "^7.5.4" } diff --git a/javascript-nodejs-stream/package.json b/javascript-nodejs-stream/package.json index 3d1a354d..95689ee4 100644 --- a/javascript-nodejs-stream/package.json +++ b/javascript-nodejs-stream/package.json @@ -9,6 +9,6 @@ "receive": "node receive.js" }, "dependencies": { - "rabbitmq-stream-js-client": "^0.4.1" + "rabbitmq-stream-js-client": "^0.4.2" } } From c13a2b00e930554e3343ba443e3385c751acbf8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:50:45 +0000 Subject: [PATCH 432/659] Bump org.apache.maven.plugins:maven-surefire-plugin in /java-mvn Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.4.0...surefire-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 9f7a0e9d..1cc63b2d 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.4.0 + 3.5.0 ${test-arguments} From eae08c9b5916cf4f36b1f5b800cac944093cdd99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 17:12:50 +0000 Subject: [PATCH 433/659] Bump org.mockito:mockito-core from 5.12.0 to 5.13.0 in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.12.0 to 5.13.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.13.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 3e308e76..4f081dd1 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.21.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' - testImplementation 'org.mockito:mockito-core:5.12.0' + testImplementation 'org.mockito:mockito-core:5.13.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.0' From 783031f223f7a3953cc88c05c86b8491136896a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 17:52:09 +0000 Subject: [PATCH 434/659] Bump org.mockito:mockito-core from 5.12.0 to 5.13.0 in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.12.0 to 5.13.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.13.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 1cc63b2d..0855839e 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.12.0 + 5.13.0 test From 52f32afe1032dfb24a06ff43f42e56c7b5b41cac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 18:00:07 +0000 Subject: [PATCH 435/659] Bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.7 to 1.5.8. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.7...v_1.5.8) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index dcd6924f..dd0c3e15 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.7 + 1.5.8 From 125a0812e54493616dc2ae2e85779171e568e459 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:33:16 +0000 Subject: [PATCH 436/659] Bump com.rabbitmq:amqp-client from 5.21.0 to 5.22.0 in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.21.0 to 5.22.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.21.0...v5.22.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0855839e..548f24e8 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.21.0 + 5.22.0 From f2ce4f0306691e367544a0d3606a978ac33140c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:33:50 +0000 Subject: [PATCH 437/659] Bump com.rabbitmq:amqp-client from 5.21.0 to 5.22.0 in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.21.0 to 5.22.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.21.0...v5.22.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 4f081dd1..c4b41c49 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.21.0' + implementation 'com.rabbitmq:amqp-client:5.22.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.13.0' From 4c4165e735916a53c071f9005e6f4f1c1133ed24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:24:46 +0000 Subject: [PATCH 438/659] Bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.3 to 3.3.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.3...v3.3.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index efc3e65e..39c76484 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 From 303dc29aa7de3a46213d6bee854a1bf3539821ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:52:53 +0000 Subject: [PATCH 439/659] Bump org.springframework.boot:spring-boot-starter-parent in /spring-amqp Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.3 to 3.3.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.3...v3.3.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 1b17e9c7..8aa0b597 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 From 62511ce3364f19ecbcdc7b4d9e6c80255bafee72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:33:47 +0000 Subject: [PATCH 440/659] Bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c4b41c49..f237d791 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.13.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' } test { From 47bb1cdcfeb5b0e5c2d7b412421b8440819fc6ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:34:27 +0000 Subject: [PATCH 441/659] Bump org.junit.jupiter:junit-jupiter from 5.11.0 to 5.11.1 in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 548f24e8..a5511395 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.11.0 + 5.11.1 test From f4a1e5c10c3a5c3d6ad2b981bf4d88103114d62f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 22:29:48 +0000 Subject: [PATCH 442/659] Bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index f237d791..cde9cb77 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.13.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' } From 4fcf8c99669e1d9eff4954c9b229aa6cbb6792b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:35:39 +0000 Subject: [PATCH 443/659] Bump org.mockito:mockito-core from 5.13.0 to 5.14.0 in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.13.0 to 5.14.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a5511395..13d9d774 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.13.0 + 5.14.0 test From aabcd6c48aaad6ba524f644e6b96e0c24a98ca7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:38:32 +0000 Subject: [PATCH 444/659] Bump org.mockito:mockito-core from 5.13.0 to 5.14.0 in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.13.0 to 5.14.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index cde9cb77..75673700 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.22.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' - testImplementation 'org.mockito:mockito-core:5.13.0' + testImplementation 'org.mockito:mockito-core:5.14.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' From 7bb0e1c0451bf9c1e992ed9ee8bc64cbbe6fb93f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:37:45 +0000 Subject: [PATCH 445/659] Bump org.mockito:mockito-core from 5.14.0 to 5.14.1 in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.0 to 5.14.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.0...v5.14.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 75673700..a2715a9c 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.22.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' - testImplementation 'org.mockito:mockito-core:5.14.0' + testImplementation 'org.mockito:mockito-core:5.14.1' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' From 7770a3a8f5ab1bfc5d1fc6de480d73786d0dacab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:02:20 +0000 Subject: [PATCH 446/659] Bump org.mockito:mockito-core from 5.14.0 to 5.14.1 in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.0 to 5.14.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.0...v5.14.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 13d9d774..c760cf05 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.14.0 + 5.14.1 test From 7a400e1c45ea635b3b68f5a007c4a2a89a8feee6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:56:57 +0000 Subject: [PATCH 447/659] Bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.27 to 4.2.28. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.27...v4.2.28) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index a2715a9c..945671dd 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.1' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.27' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' } From 180c1fafc7168f5c17b16f0a9409804624ca289a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:58:37 +0000 Subject: [PATCH 448/659] Bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.27 to 4.2.28. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.27...v4.2.28) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c760cf05..786839c3 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.27 + 4.2.28 test From 9cc88a253d07c9a078edb5baf691c745214e1d72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 17:37:08 +0000 Subject: [PATCH 449/659] Bump org.junit.jupiter:junit-jupiter from 5.11.1 to 5.11.2 in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.1 to 5.11.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.1...r5.11.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 786839c3..718e36e9 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.11.1 + 5.11.2 test From 6982d34dd98de953dfde1280ab19796740c3f2f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 17:51:03 +0000 Subject: [PATCH 450/659] Bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.1 to 5.11.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.1...r5.11.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 945671dd..7b45a712 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.1' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' } From 4709207db524c694abad66571ba574bc48108b12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 00:31:20 +0000 Subject: [PATCH 451/659] Bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.1 to 5.11.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.1...r5.11.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 7b45a712..3c8043a1 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.14.1' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.2' } test { From 82e3647c5e67f6233effa2594f1fc289996322c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:03:08 +0000 Subject: [PATCH 452/659] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.0...surefire-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 718e36e9..485d987d 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.5.0 + 3.5.1 ${test-arguments} From b4183a855916a7c914a6dfe3ff08b9d74899d411 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:31:57 +0000 Subject: [PATCH 453/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.8 to 1.5.9. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.8...v_1.5.9) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index dd0c3e15..909d62f5 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.8 + 1.5.9 From d577d718b1513fc887a11b69f63dff9f16b0d358 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:04:28 +0000 Subject: [PATCH 454/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.9 to 1.5.10. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.9...v_1.5.10) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 909d62f5..25113aee 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.9 + 1.5.10 From fdba7693cb9c8e00bd9d1e035f94d14fdd0234a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:42:06 +0000 Subject: [PATCH 455/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.10 to 1.5.11. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.10...v_1.5.11) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 25113aee..9bb14b4d 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.10 + 1.5.11 From 2516cc0f392d8156e399c32042256ff9ba6dfc26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:45:02 +0000 Subject: [PATCH 456/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.1 to 5.14.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.1...v5.14.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 3c8043a1..3ebe38ab 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.22.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' - testImplementation 'org.mockito:mockito-core:5.14.1' + testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.2' From 4b1bb4820952b75e151e873149287a19376d0e6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:52:13 +0000 Subject: [PATCH 457/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.1 to 5.14.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.1...v5.14.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 485d987d..139e6e3d 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.14.1 + 5.14.2 test From b9a71765691775b2f439c6f30bb2e91a5dbc3698 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:27:11 +0000 Subject: [PATCH 458/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.17.0 to 0.18.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Changelog](https://github.com/rabbitmq/rabbitmq-stream-java-client/blob/main/release-versions.txt) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.17.0...v0.18.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 9bb14b4d..d1198a8d 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.17.0 + 0.18.0 org.slf4j From 8eb842149531a2f0cb7b1ac69dd97f16b1463f74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 17:35:17 +0000 Subject: [PATCH 459/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.2 to 5.11.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.2...r5.11.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 139e6e3d..66b07ba7 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.11.2 + 5.11.3 test From bce9153b79ba6672f62ce1d4e3961ffbd2c3595c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 17:56:40 +0000 Subject: [PATCH 460/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.2 to 5.11.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.2...r5.11.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 3ebe38ab..b9b93a9f 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.3' } test { From 6f3456650636884dbec4d0b3e92c9d38aa27b4e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:02:06 +0000 Subject: [PATCH 461/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.2 to 5.11.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.2...r5.11.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index b9b93a9f..387a3f71 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.3' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.3' } From 68d357e84ea9492b11a91faaf319b1a3fd91883e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:15:56 +0000 Subject: [PATCH 462/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.4 to 3.3.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.4...v3.3.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 8aa0b597..7e3c8039 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 From b1ebdf2a87e50a5489a165ea5691beb90b8295b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:31:25 +0000 Subject: [PATCH 463/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.4 to 3.3.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.4...v3.3.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 39c76484..ea77b857 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 From 776fac34bd05cce9b40144249517c53afce1b498 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 17:16:01 +0000 Subject: [PATCH 464/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.11 to 1.5.12. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.11...v_1.5.12) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index d1198a8d..0de18446 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.11 + 1.5.12 From 72a1e2d5a0314cdb5941642d985f1c2ce6820b92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:33:06 +0000 Subject: [PATCH 465/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.18.0 to 0.19.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Changelog](https://github.com/rabbitmq/rabbitmq-stream-java-client/blob/main/release-versions.txt) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.18.0...v0.19.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 0de18446..0e93738c 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.18.0 + 0.19.0 org.slf4j From e514caabbf25e0982b8a8e63ffc3706befc4bdef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:07:19 +0000 Subject: [PATCH 466/659] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 66b07ba7..a1efa827 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.5.1 + 3.5.2 ${test-arguments} From a4adce94c9b326f7090d30b114eb9c62f8aba8b8 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Thu, 5 Sep 2024 12:47:14 -0700 Subject: [PATCH 467/659] Update dotnet tutorials to use 7.0.0 * Specify unix line endings so that `christian-bromann/docusaurus-theme-github-codeblock` formats code blocks correctly * Fix RPC examples --- dotnet/.gitattributes | 14 + dotnet/EmitLog/EmitLog.cs | 15 +- dotnet/EmitLog/EmitLog.csproj | 4 +- dotnet/EmitLogDirect/EmitLogDirect.cs | 19 +- dotnet/EmitLogDirect/EmitLogDirect.csproj | 4 +- dotnet/EmitLogTopic/EmitLogTopic.cs | 20 +- dotnet/EmitLogTopic/EmitLogTopic.csproj | 4 +- dotnet/NewTask/NewTask.cs | 30 +- dotnet/NewTask/NewTask.csproj | 4 +- dotnet/PublisherConfirms/PublisherConfirms.cs | 294 +++++++++++++----- .../PublisherConfirms.csproj | 4 +- dotnet/RPCClient/RPCClient.cs | 205 +++++++----- dotnet/RPCClient/RPCClient.csproj | 4 +- dotnet/RPCServer/RPCServer.cs | 55 ++-- dotnet/RPCServer/RPCServer.csproj | 4 +- dotnet/Receive/Receive.cs | 25 +- dotnet/Receive/Receive.csproj | 4 +- dotnet/ReceiveLogs/ReceiveLogs.cs | 28 +- dotnet/ReceiveLogs/ReceiveLogs.csproj | 4 +- dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs | 42 +-- .../ReceiveLogsDirect.csproj | 4 +- dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs | 90 +++--- .../ReceiveLogsTopic/ReceiveLogsTopic.csproj | 4 +- dotnet/Send/Send.cs | 22 +- dotnet/Send/Send.csproj | 4 +- dotnet/Worker/Worker.cs | 32 +- dotnet/Worker/Worker.csproj | 4 +- 27 files changed, 549 insertions(+), 394 deletions(-) create mode 100644 dotnet/.gitattributes diff --git a/dotnet/.gitattributes b/dotnet/.gitattributes new file mode 100644 index 00000000..47a8f29a --- /dev/null +++ b/dotnet/.gitattributes @@ -0,0 +1,14 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Auto detect text files and perform LF normalization +*.cs text=auto eol=lf +*.txt text=auto + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf +*.csproj text eol=crlf + +# Custom for Visual Studio +*.cs diff=csharp + diff --git a/dotnet/EmitLog/EmitLog.cs b/dotnet/EmitLog/EmitLog.cs index a70f5e9e..a8d09eda 100644 --- a/dotnet/EmitLog/EmitLog.cs +++ b/dotnet/EmitLog/EmitLog.cs @@ -1,18 +1,15 @@ -using System.Text; using RabbitMQ.Client; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); +await channel.ExchangeDeclareAsync(exchange: "logs", type: ExchangeType.Fanout); var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "logs", - routingKey: string.Empty, - basicProperties: null, - body: body); +await channel.BasicPublishAsync(exchange: "logs", routingKey: string.Empty, body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); @@ -21,4 +18,4 @@ static string GetMessage(string[] args) { return ((args.Length > 0) ? string.Join(" ", args) : "info: Hello World!"); -} \ No newline at end of file +} diff --git a/dotnet/EmitLog/EmitLog.csproj b/dotnet/EmitLog/EmitLog.csproj index 2a9d13b7..8da4d936 100644 --- a/dotnet/EmitLog/EmitLog.csproj +++ b/dotnet/EmitLog/EmitLog.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/EmitLogDirect/EmitLogDirect.cs b/dotnet/EmitLogDirect/EmitLogDirect.cs index 80145a3f..b0918c30 100644 --- a/dotnet/EmitLogDirect/EmitLogDirect.cs +++ b/dotnet/EmitLogDirect/EmitLogDirect.cs @@ -1,22 +1,17 @@ -using System.Text; using RabbitMQ.Client; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); +await channel.ExchangeDeclareAsync(exchange: "direct_logs", type: ExchangeType.Direct); var severity = (args.Length > 0) ? args[0] : "info"; -var message = (args.Length > 1) - ? string.Join(" ", args.Skip(1).ToArray()) - : "Hello World!"; +var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "direct_logs", - routingKey: severity, - basicProperties: null, - body: body); +await channel.BasicPublishAsync(exchange: "direct_logs", routingKey: severity, body: body); Console.WriteLine($" [x] Sent '{severity}':'{message}'"); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/EmitLogDirect/EmitLogDirect.csproj b/dotnet/EmitLogDirect/EmitLogDirect.csproj index 2a9d13b7..8da4d936 100644 --- a/dotnet/EmitLogDirect/EmitLogDirect.csproj +++ b/dotnet/EmitLogDirect/EmitLogDirect.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/EmitLogTopic/EmitLogTopic.cs b/dotnet/EmitLogTopic/EmitLogTopic.cs index 9f54903c..e64efee1 100644 --- a/dotnet/EmitLogTopic/EmitLogTopic.cs +++ b/dotnet/EmitLogTopic/EmitLogTopic.cs @@ -1,20 +1,14 @@ -using System.Text; using RabbitMQ.Client; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); - -channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); +await channel.ExchangeDeclareAsync(exchange: "topic_logs", type: ExchangeType.Topic); var routingKey = (args.Length > 0) ? args[0] : "anonymous.info"; -var message = (args.Length > 1) - ? string.Join(" ", args.Skip(1).ToArray()) - : "Hello World!"; +var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: "topic_logs", - routingKey: routingKey, - basicProperties: null, - body: body); -Console.WriteLine($" [x] Sent '{routingKey}':'{message}'"); \ No newline at end of file +await channel.BasicPublishAsync(exchange: "topic_logs", routingKey: routingKey, body: body); +Console.WriteLine($" [x] Sent '{routingKey}':'{message}'"); diff --git a/dotnet/EmitLogTopic/EmitLogTopic.csproj b/dotnet/EmitLogTopic/EmitLogTopic.csproj index 4fdb1beb..90c6e3a5 100644 --- a/dotnet/EmitLogTopic/EmitLogTopic.csproj +++ b/dotnet/EmitLogTopic/EmitLogTopic.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/NewTask/NewTask.cs b/dotnet/NewTask/NewTask.cs index 96730ee5..2aa1afc0 100644 --- a/dotnet/NewTask/NewTask.cs +++ b/dotnet/NewTask/NewTask.cs @@ -1,32 +1,26 @@ -using System.Text; using RabbitMQ.Client; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.QueueDeclare(queue: "task_queue", - durable: true, - exclusive: false, - autoDelete: false, - arguments: null); +await channel.QueueDeclareAsync(queue: "task_queue", durable: true, exclusive: false, + autoDelete: false, arguments: null); var message = GetMessage(args); var body = Encoding.UTF8.GetBytes(message); -var properties = channel.CreateBasicProperties(); -properties.Persistent = true; +var properties = new BasicProperties +{ + Persistent = true +}; -channel.BasicPublish(exchange: string.Empty, - routingKey: "task_queue", - basicProperties: properties, - body: body); +await channel.BasicPublishAsync(exchange: string.Empty, routingKey: "task_queue", mandatory: true, + basicProperties: properties, body: body); Console.WriteLine($" [x] Sent {message}"); -Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); - static string GetMessage(string[] args) { return ((args.Length > 0) ? string.Join(" ", args) : "Hello World!"); -} \ No newline at end of file +} diff --git a/dotnet/NewTask/NewTask.csproj b/dotnet/NewTask/NewTask.csproj index 540e7ceb..924718ee 100644 --- a/dotnet/NewTask/NewTask.csproj +++ b/dotnet/NewTask/NewTask.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index a9a09ef0..44d9f79b 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -1,133 +1,269 @@ -using System.Collections.Concurrent; +using RabbitMQ.Client; +using RabbitMQ.Client.Exceptions; using System.Diagnostics; using System.Text; -using RabbitMQ.Client; -const int MESSAGE_COUNT = 50_000; +const int MessageCount = 50_000; +const int MaxOutstandingConfirms = 128; -PublishMessagesIndividually(); -PublishMessagesInBatch(); +var rateLimiter = new ThrottlingRateLimiter(MaxOutstandingConfirms); +var channelOptions = new CreateChannelOptions( + publisherConfirmationsEnabled: true, + publisherConfirmationTrackingEnabled: true, + outstandingPublisherConfirmationsRateLimiter: rateLimiter +); + +var props = new BasicProperties +{ + Persistent = true +}; + +await PublishMessagesIndividuallyAsync(); +await PublishMessagesInBatchAsync(); await HandlePublishConfirmsAsynchronously(); -static IConnection CreateConnection() +static Task CreateConnectionAsync() { var factory = new ConnectionFactory { HostName = "localhost" }; - return factory.CreateConnection(); + return factory.CreateConnectionAsync(); } -static void PublishMessagesIndividually() +async Task PublishMessagesIndividuallyAsync() { - using var connection = CreateConnection(); - using var channel = connection.CreateModel(); + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages individually " + + "and handling confirms individually (i.e., the slowest way)"); + + using IConnection connection = await CreateConnectionAsync(); + using IChannel channel = await connection.CreateChannelAsync(channelOptions); // declare a server-named queue - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); + QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); + string queueName = queueDeclareResult.QueueName; - var startTime = Stopwatch.GetTimestamp(); + var sw = new Stopwatch(); + sw.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) + for (int i = 0; i < MessageCount; i++) { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: body); - channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); + byte[] body = Encoding.UTF8.GetBytes(i.ToString()); + try + { + await channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, + mandatory: true, basicProperties: props); + } + catch (PublishException pubEx) + { + Console.Error.WriteLine("{0} [ERROR] publish exception: {1}", DateTime.Now, pubEx); + } + catch (Exception ex) + { + Console.Error.WriteLine("{0} [ERROR] other exception: {1}", DateTime.Now, ex); + } } - var endTime = Stopwatch.GetTimestamp(); + sw.Stop(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages individually in {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); + Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages individually " + + $"in {sw.ElapsedMilliseconds:N0} ms"); } -static void PublishMessagesInBatch() +async Task PublishMessagesInBatchAsync() { - using var connection = CreateConnection(); - using var channel = connection.CreateModel(); - - // declare a server-named queue - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); - - var batchSize = 100; - var outstandingMessageCount = 0; - - var startTime = Stopwatch.GetTimestamp(); - - for (int i = 0; i < MESSAGE_COUNT; i++) + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages and handling " + + $"confirms in batches"); + + using IConnection connection = await CreateConnectionAsync(); + using IChannel channel = await connection.CreateChannelAsync(channelOptions); + + // declare a server-named queue + QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); + string queueName = queueDeclareResult.QueueName; + + /* + * Note: since throttling happens when 50% of the outstanding confirms are reached, + * each batch size should not be greater than this value + */ + int batchSize = MaxOutstandingConfirms / 2; + int outstandingMessageCount = 0; + + var sw = new Stopwatch(); + sw.Start(); + + static async Task AwaitPublishTasks(IEnumerable publishTasks) + { + foreach (ValueTask pt in publishTasks) + { + try + { + await pt; + } + catch (PublishException pubEx) + { + Console.Error.WriteLine("{0} [ERROR] publish exception: {1}", DateTime.Now, pubEx); + } + catch (Exception ex) + { + Console.Error.WriteLine("{0} [ERROR] other exception: {1}", DateTime.Now, ex); + } + } + } + + var publishTasks = new List(); + for (int i = 0; i < MessageCount; i++) { - var body = Encoding.UTF8.GetBytes(i.ToString()); - channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: body); + byte[] body = Encoding.UTF8.GetBytes(i.ToString()); + + var pt0 = channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, + mandatory: true, basicProperties: props); + publishTasks.Add(pt0); + outstandingMessageCount++; if (outstandingMessageCount == batchSize) { - channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); + await AwaitPublishTasks(publishTasks); + publishTasks.Clear(); outstandingMessageCount = 0; } } - if (outstandingMessageCount > 0) - channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); - - var endTime = Stopwatch.GetTimestamp(); + if (publishTasks.Count > 0) + { + await AwaitPublishTasks(publishTasks); + } - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages in batch in {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); + sw.Stop(); + Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages in batch in " + + $"{sw.ElapsedMilliseconds:N0} ms"); } -static async Task HandlePublishConfirmsAsynchronously() +async Task HandlePublishConfirmsAsynchronously() { - using var connection = CreateConnection(); - using var channel = connection.CreateModel(); + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages and " + + $"handling confirms asynchronously"); - // declare a server-named queue - var queueName = channel.QueueDeclare().QueueName; - channel.ConfirmSelect(); + // NOTE: setting publisherConfirmationTrackingEnabled + // to false because this method is tracking them itself. + channelOptions = new CreateChannelOptions( + publisherConfirmationsEnabled: true, + publisherConfirmationTrackingEnabled: false, + outstandingPublisherConfirmationsRateLimiter: null + ); - var outstandingConfirms = new ConcurrentDictionary(); + using IConnection connection = await CreateConnectionAsync(); + using IChannel channel = await connection.CreateChannelAsync(channelOptions); - void CleanOutstandingConfirms(ulong sequenceNumber, bool multiple) + // declare a server-named queue + QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); + string queueName = queueDeclareResult.QueueName; + + bool publishingCompleted = false; + var allMessagesConfirmedTcs = + new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var outstandingConfirms = new LinkedList(); + var semaphore = new SemaphoreSlim(1, 1); + async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple) { - if (multiple) + await semaphore.WaitAsync(); + try + { + if (multiple) + { + do + { + LinkedListNode? node = outstandingConfirms.First; + if (node is null) + { + break; + } + if (node.Value <= deliveryTag) + { + outstandingConfirms.RemoveFirst(); + } + else + { + break; + } + } while (true); + } + else + { + outstandingConfirms.Remove(deliveryTag); + } + } + finally + { + semaphore.Release(); + } + + if (publishingCompleted && outstandingConfirms.Count == 0) { - var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber); - foreach (var entry in confirmed) - outstandingConfirms.TryRemove(entry.Key, out _); + allMessagesConfirmedTcs.SetResult(true); } - else - outstandingConfirms.TryRemove(sequenceNumber, out _); } - channel.BasicAcks += (sender, ea) => CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); - channel.BasicNacks += (sender, ea) => - { - outstandingConfirms.TryGetValue(ea.DeliveryTag, out string? body); - Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}"); + channel.BasicAcksAsync += (sender, ea) => CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + + channel.BasicNacksAsync += (sender, ea) => + { + Console.WriteLine($"{DateTime.Now} [WARNING] message sequence number: {ea.DeliveryTag} " + + $"has been nacked (multiple: {ea.Multiple})"); + return CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); }; - var startTime = Stopwatch.GetTimestamp(); + var sw = new Stopwatch(); + sw.Start(); - for (int i = 0; i < MESSAGE_COUNT; i++) + var publishTasks = new List(); + for (int i = 0; i < MessageCount; i++) { - var body = i.ToString(); - outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString()); - channel.BasicPublish(exchange: string.Empty, routingKey: queueName, basicProperties: null, body: Encoding.UTF8.GetBytes(body)); + string msg = i.ToString(); + byte[] body = Encoding.UTF8.GetBytes(msg); + ulong nextPublishSeqNo = await channel.GetNextPublishSequenceNumberAsync(); + if ((ulong)(i + 1) != nextPublishSeqNo) + { + Console.WriteLine($"{DateTime.Now} [WARNING] i {i + 1} does not equal next sequence " + + $"number: {nextPublishSeqNo}"); + } + await semaphore.WaitAsync(); + try + { + outstandingConfirms.AddLast(nextPublishSeqNo); + } + finally + { + semaphore.Release(); + } + var pt = channel.BasicPublishAsync(exchange: string.Empty, + routingKey: queueName, body: body); + publishTasks.Add(pt); } - if (!await WaitUntil(60, () => outstandingConfirms.IsEmpty)) - throw new Exception("All messages could not be confirmed in 60 seconds"); + using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); - var endTime = Stopwatch.GetTimestamp(); - Console.WriteLine($"Published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {Stopwatch.GetElapsedTime(startTime, endTime).TotalMilliseconds:N0} ms"); -} - -static async ValueTask WaitUntil(int numberOfSeconds, Func condition) -{ - int waited = 0; - while (!condition() && waited < numberOfSeconds * 1000) + try { - await Task.Delay(TimeSpan.FromMilliseconds(100)); - waited += 100; + foreach (ValueTask pt in publishTasks) + { + await pt; + cts.Token.ThrowIfCancellationRequested(); + } + publishingCompleted = true; + await allMessagesConfirmedTcs.Task.WaitAsync(cts.Token); + } + catch (OperationCanceledException) + { + Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed " + + "within 10 seconds", DateTime.Now); + } + catch (TimeoutException) + { + Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed " + + "within 10 seconds", DateTime.Now); } - return condition(); -} \ No newline at end of file + sw.Stop(); + Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages and handled " + + $"confirm asynchronously {sw.ElapsedMilliseconds:N0} ms"); +} diff --git a/dotnet/PublisherConfirms/PublisherConfirms.csproj b/dotnet/PublisherConfirms/PublisherConfirms.csproj index 1b2cee76..c3cba186 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.csproj +++ b/dotnet/PublisherConfirms/PublisherConfirms.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/RPCClient/RPCClient.cs b/dotnet/RPCClient/RPCClient.cs index bf2d56e9..7e3239ae 100644 --- a/dotnet/RPCClient/RPCClient.cs +++ b/dotnet/RPCClient/RPCClient.cs @@ -1,84 +1,121 @@ -using System.Collections.Concurrent; -using System.Text; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; - -public class RpcClient : IDisposable -{ - private const string QUEUE_NAME = "rpc_queue"; - - private readonly IConnection connection; - private readonly IModel channel; - private readonly string replyQueueName; - private readonly ConcurrentDictionary> callbackMapper = new(); - - public RpcClient() - { - var factory = new ConnectionFactory { HostName = "localhost" }; - - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - // declare a server-named queue - replyQueueName = channel.QueueDeclare().QueueName; - var consumer = new EventingBasicConsumer(channel); - consumer.Received += (model, ea) => - { - if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out var tcs)) - return; - var body = ea.Body.ToArray(); - var response = Encoding.UTF8.GetString(body); - tcs.TrySetResult(response); - }; - - channel.BasicConsume(consumer: consumer, - queue: replyQueueName, - autoAck: true); - } - - public Task CallAsync(string message, CancellationToken cancellationToken = default) - { - IBasicProperties props = channel.CreateBasicProperties(); - var correlationId = Guid.NewGuid().ToString(); - props.CorrelationId = correlationId; - props.ReplyTo = replyQueueName; - var messageBytes = Encoding.UTF8.GetBytes(message); - var tcs = new TaskCompletionSource(); - callbackMapper.TryAdd(correlationId, tcs); - - channel.BasicPublish(exchange: string.Empty, - routingKey: QUEUE_NAME, - basicProperties: props, - body: messageBytes); - - cancellationToken.Register(() => callbackMapper.TryRemove(correlationId, out _)); - return tcs.Task; - } - - public void Dispose() - { - channel.Close(); - connection.Close(); - } -} - -public class Rpc -{ - public static async Task Main(string[] args) - { - Console.WriteLine("RPC Client"); - string n = args.Length > 0 ? args[0] : "30"; - await InvokeAsync(n); - - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - } - - private static async Task InvokeAsync(string n) - { - using var rpcClient = new RpcClient(); - - Console.WriteLine(" [x] Requesting fib({0})", n); - var response = await rpcClient.CallAsync(n); - Console.WriteLine(" [.] Got '{0}'", response); - } -} +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Collections.Concurrent; +using System.Text; + +public class RpcClient : IAsyncDisposable +{ + private const string QUEUE_NAME = "rpc_queue"; + + private readonly IConnectionFactory _connectionFactory; + private readonly ConcurrentDictionary> _callbackMapper + = new(); + + private IConnection? _connection; + private IChannel? _channel; + private string? _replyQueueName; + + public RpcClient() + { + _connectionFactory = new ConnectionFactory { HostName = "localhost" }; + } + + public async Task StartAsync() + { + _connection = await _connectionFactory.CreateConnectionAsync(); + _channel = await _connection.CreateChannelAsync(); + + // declare a server-named queue + QueueDeclareOk queueDeclareResult = await _channel.QueueDeclareAsync(); + _replyQueueName = queueDeclareResult.QueueName; + var consumer = new AsyncEventingBasicConsumer(_channel); + + consumer.ReceivedAsync += (model, ea) => + { + string? correlationId = ea.BasicProperties.CorrelationId; + + if (false == string.IsNullOrEmpty(correlationId)) + { + if (_callbackMapper.TryRemove(correlationId, out var tcs)) + { + var body = ea.Body.ToArray(); + var response = Encoding.UTF8.GetString(body); + tcs.TrySetResult(response); + } + } + + return Task.CompletedTask; + }; + + await _channel.BasicConsumeAsync(_replyQueueName, true, consumer); + } + + public async Task CallAsync(string message, + CancellationToken cancellationToken = default) + { + if (_channel is null) + { + throw new InvalidOperationException(); + } + + string correlationId = Guid.NewGuid().ToString(); + var props = new BasicProperties + { + CorrelationId = correlationId, + ReplyTo = _replyQueueName + }; + + var tcs = new TaskCompletionSource( + TaskCreationOptions.RunContinuationsAsynchronously); + _callbackMapper.TryAdd(correlationId, tcs); + + var messageBytes = Encoding.UTF8.GetBytes(message); + await _channel.BasicPublishAsync(exchange: string.Empty, routingKey: QUEUE_NAME, + mandatory: true, basicProperties: props, body: messageBytes); + + using CancellationTokenRegistration ctr = + cancellationToken.Register(() => + { + _callbackMapper.TryRemove(correlationId, out _); + tcs.SetCanceled(); + }); + + return await tcs.Task; + } + + public async ValueTask DisposeAsync() + { + if (_channel is not null) + { + await _channel.CloseAsync(); + } + + if (_connection is not null) + { + await _connection.CloseAsync(); + } + } +} + +public class Rpc +{ + public static async Task Main(string[] args) + { + Console.WriteLine("RPC Client"); + string n = args.Length > 0 ? args[0] : "30"; + await InvokeAsync(n); + + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + } + + private static async Task InvokeAsync(string n) + { + var rpcClient = new RpcClient(); + await rpcClient.StartAsync(); + + Console.WriteLine(" [x] Requesting fib({0})", n); + var response = await rpcClient.CallAsync(n); + Console.WriteLine(" [.] Got '{0}'", response); + } +} diff --git a/dotnet/RPCClient/RPCClient.csproj b/dotnet/RPCClient/RPCClient.csproj index 659ddaed..9fc9bc56 100644 --- a/dotnet/RPCClient/RPCClient.csproj +++ b/dotnet/RPCClient/RPCClient.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/RPCServer/RPCServer.cs b/dotnet/RPCServer/RPCServer.cs index 350031aa..42f50ad9 100644 --- a/dotnet/RPCServer/RPCServer.cs +++ b/dotnet/RPCServer/RPCServer.cs @@ -1,32 +1,32 @@ -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System.Text; + +const string QUEUE_NAME = "rpc_queue"; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.QueueDeclare(queue: "rpc_queue", - durable: false, - exclusive: false, - autoDelete: false, - arguments: null); -channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); -var consumer = new EventingBasicConsumer(channel); -channel.BasicConsume(queue: "rpc_queue", - autoAck: false, - consumer: consumer); -Console.WriteLine(" [x] Awaiting RPC requests"); +await channel.QueueDeclareAsync(queue: QUEUE_NAME, durable: false, exclusive: false, + autoDelete: false, arguments: null); -consumer.Received += (model, ea) => +await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false); + +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += async (object sender, BasicDeliverEventArgs ea) => { + AsyncEventingBasicConsumer cons = (AsyncEventingBasicConsumer)sender; + IChannel ch = cons.Channel; string response = string.Empty; - var body = ea.Body.ToArray(); - var props = ea.BasicProperties; - var replyProps = channel.CreateBasicProperties(); - replyProps.CorrelationId = props.CorrelationId; - + byte[] body = ea.Body.ToArray(); + IReadOnlyBasicProperties props = ea.BasicProperties; + var replyProps = new BasicProperties + { + CorrelationId = props.CorrelationId + }; + try { var message = Encoding.UTF8.GetString(body); @@ -42,19 +42,20 @@ finally { var responseBytes = Encoding.UTF8.GetBytes(response); - channel.BasicPublish(exchange: string.Empty, - routingKey: props.ReplyTo, - basicProperties: replyProps, - body: responseBytes); - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + await ch.BasicPublishAsync(exchange: string.Empty, routingKey: props.ReplyTo!, + mandatory: true, basicProperties: replyProps, body: responseBytes); + await ch.BasicAckAsync(deliveryTag: ea.DeliveryTag, multiple: false); } }; +await channel.BasicConsumeAsync(QUEUE_NAME, false, consumer); +Console.WriteLine(" [x] Awaiting RPC requests"); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); // Assumes only valid positive integer input. -// Don't expect this one to work for big numbers, and it's probably the slowest recursive implementation possible. +// Don't expect this one to work for big numbers, +// and it's probably the slowest recursive implementation possible. static int Fib(int n) { if (n is 0 or 1) @@ -63,4 +64,4 @@ static int Fib(int n) } return Fib(n - 1) + Fib(n - 2); -} \ No newline at end of file +} diff --git a/dotnet/RPCServer/RPCServer.csproj b/dotnet/RPCServer/RPCServer.csproj index 4979ace0..7362fe1f 100644 --- a/dotnet/RPCServer/RPCServer.csproj +++ b/dotnet/RPCServer/RPCServer.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/Receive/Receive.cs b/dotnet/Receive/Receive.cs index 30295e5c..b9f2149b 100644 --- a/dotnet/Receive/Receive.cs +++ b/dotnet/Receive/Receive.cs @@ -1,29 +1,26 @@ -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.QueueDeclare(queue: "hello", - durable: false, - exclusive: false, - autoDelete: false, - arguments: null); +await channel.QueueDeclareAsync(queue: "hello", durable: false, exclusive: false, autoDelete: false, + arguments: null); Console.WriteLine(" [*] Waiting for messages."); -var consumer = new EventingBasicConsumer(channel); -consumer.Received += (model, ea) => +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($" [x] Received {message}"); + return Task.CompletedTask; }; -channel.BasicConsume(queue: "hello", - autoAck: true, - consumer: consumer); + +await channel.BasicConsumeAsync("hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/Receive/Receive.csproj b/dotnet/Receive/Receive.csproj index 4979ace0..7362fe1f 100644 --- a/dotnet/Receive/Receive.csproj +++ b/dotnet/Receive/Receive.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/ReceiveLogs/ReceiveLogs.cs b/dotnet/ReceiveLogs/ReceiveLogs.cs index 61d3fbec..1af450d6 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.cs +++ b/dotnet/ReceiveLogs/ReceiveLogs.cs @@ -1,31 +1,31 @@ -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); +await channel.ExchangeDeclareAsync(exchange: "logs", + type: ExchangeType.Fanout); // declare a server-named queue -var queueName = channel.QueueDeclare().QueueName; -channel.QueueBind(queue: queueName, - exchange: "logs", - routingKey: string.Empty); +QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); +string queueName = queueDeclareResult.QueueName; +await channel.QueueBindAsync(queue: queueName, exchange: "logs", routingKey: string.Empty); Console.WriteLine(" [*] Waiting for logs."); -var consumer = new EventingBasicConsumer(channel); -consumer.Received += (model, ea) => +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += (model, ea) => { byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($" [x] {message}"); + return Task.CompletedTask; }; -channel.BasicConsume(queue: queueName, - autoAck: true, - consumer: consumer); + +await channel.BasicConsumeAsync(queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/ReceiveLogs/ReceiveLogs.csproj b/dotnet/ReceiveLogs/ReceiveLogs.csproj index 88534bc0..a2eba558 100644 --- a/dotnet/ReceiveLogs/ReceiveLogs.csproj +++ b/dotnet/ReceiveLogs/ReceiveLogs.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs index e3e6039b..5c50aebb 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.cs @@ -1,19 +1,10 @@ -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; - -var factory = new ConnectionFactory { HostName = "localhost" }; - -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); - -channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct); -// declare a server-named queue -var queueName = channel.QueueDeclare().QueueName; +using System.Text; if (args.Length < 1) { - Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", + Console.Error.WriteLine("Usage: {0} [info] [warning] [error]", Environment.GetCommandLineArgs()[0]); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); @@ -21,26 +12,35 @@ return; } -foreach (var severity in args) +var factory = new ConnectionFactory { HostName = "localhost" }; + +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); + +await channel.ExchangeDeclareAsync(exchange: "direct_logs", type: ExchangeType.Direct); + +// declare a server-named queue +var queueDeclareResult = await channel.QueueDeclareAsync(); +string queueName = queueDeclareResult.QueueName; + +foreach (string? severity in args) { - channel.QueueBind(queue: queueName, - exchange: "direct_logs", - routingKey: severity); + await channel.QueueBindAsync(queue: queueName, exchange: "direct_logs", routingKey: severity); } Console.WriteLine(" [*] Waiting for messages."); -var consumer = new EventingBasicConsumer(channel); -consumer.Received += (model, ea) => +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); + return Task.CompletedTask; }; -channel.BasicConsume(queue: queueName, - autoAck: true, - consumer: consumer); + +await channel.BasicConsumeAsync(queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj index 61b00179..ac9a256f 100644 --- a/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj +++ b/dotnet/ReceiveLogsDirect/ReceiveLogsDirect.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs index f4bec78b..97feb8dc 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.cs @@ -1,46 +1,46 @@ -using System.Text; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; - -var factory = new ConnectionFactory { HostName = "localhost" }; - -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); - -channel.ExchangeDeclare(exchange: "topic_logs", type: ExchangeType.Topic); -// declare a server-named queue -var queueName = channel.QueueDeclare().QueueName; - -if (args.Length < 1) -{ +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System.Text; + +if (args.Length < 1) +{ Console.Error.WriteLine("Usage: {0} [binding_key...]", - Environment.GetCommandLineArgs()[0]); - Console.WriteLine(" Press [enter] to exit."); - Console.ReadLine(); - Environment.ExitCode = 1; - return; -} - -foreach (var bindingKey in args) -{ - channel.QueueBind(queue: queueName, - exchange: "topic_logs", - routingKey: bindingKey); -} - -Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); - -var consumer = new EventingBasicConsumer(channel); -consumer.Received += (model, ea) => -{ - var body = ea.Body.ToArray(); - var message = Encoding.UTF8.GetString(body); - var routingKey = ea.RoutingKey; - Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); -}; -channel.BasicConsume(queue: queueName, - autoAck: true, - consumer: consumer); - -Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file + Environment.GetCommandLineArgs()[0]); + Console.WriteLine(" Press [enter] to exit."); + Console.ReadLine(); + Environment.ExitCode = 1; + return; +} + +var factory = new ConnectionFactory { HostName = "localhost" }; + +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); + +await channel.ExchangeDeclareAsync(exchange: "topic_logs", type: ExchangeType.Topic); + +// declare a server-named queue +QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); +string queueName = queueDeclareResult.QueueName; + +foreach (string? bindingKey in args) +{ + await channel.QueueBindAsync(queue: queueName, exchange: "topic_logs", routingKey: bindingKey); +} + +Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); + +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += (model, ea) => +{ + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + var routingKey = ea.RoutingKey; + Console.WriteLine($" [x] Received '{routingKey}':'{message}'"); + return Task.CompletedTask; +}; + +await channel.BasicConsumeAsync(queueName, autoAck: true, consumer: consumer); + +Console.WriteLine(" Press [enter] to exit."); +Console.ReadLine(); diff --git a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj index 61b00179..ac9a256f 100644 --- a/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj +++ b/dotnet/ReceiveLogsTopic/ReceiveLogsTopic.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/Send/Send.cs b/dotnet/Send/Send.cs index 71b5e299..4a7a6fce 100644 --- a/dotnet/Send/Send.cs +++ b/dotnet/Send/Send.cs @@ -1,24 +1,18 @@ -using System.Text; using RabbitMQ.Client; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.QueueDeclare(queue: "hello", - durable: false, - exclusive: false, - autoDelete: false, - arguments: null); +await channel.QueueDeclareAsync(queue: "hello", durable: false, exclusive: false, autoDelete: false, + arguments: null); -var message = "Hello World!"; +const string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); -channel.BasicPublish(exchange: string.Empty, - routingKey: "hello", - basicProperties: null, - body: body); +await channel.BasicPublishAsync(exchange: string.Empty, routingKey: "hello", body: body); Console.WriteLine($" [x] Sent {message}"); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/Send/Send.csproj b/dotnet/Send/Send.csproj index 1b2cee76..c3cba186 100644 --- a/dotnet/Send/Send.csproj +++ b/dotnet/Send/Send.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + diff --git a/dotnet/Worker/Worker.cs b/dotnet/Worker/Worker.cs index 9c33c61c..0b0280f3 100644 --- a/dotnet/Worker/Worker.cs +++ b/dotnet/Worker/Worker.cs @@ -1,39 +1,35 @@ -using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System.Text; var factory = new ConnectionFactory { HostName = "localhost" }; -using var connection = factory.CreateConnection(); -using var channel = connection.CreateModel(); +using var connection = await factory.CreateConnectionAsync(); +using var channel = await connection.CreateChannelAsync(); -channel.QueueDeclare(queue: "task_queue", - durable: true, - exclusive: false, - autoDelete: false, - arguments: null); +await channel.QueueDeclareAsync(queue: "task_queue", durable: true, exclusive: false, + autoDelete: false, arguments: null); -channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false); +await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false); Console.WriteLine(" [*] Waiting for messages."); -var consumer = new EventingBasicConsumer(channel); -consumer.Received += (model, ea) => +var consumer = new AsyncEventingBasicConsumer(channel); +consumer.ReceivedAsync += async (model, ea) => { byte[] body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($" [x] Received {message}"); int dots = message.Split('.').Length - 1; - Thread.Sleep(dots * 1000); + await Task.Delay(dots * 1000); Console.WriteLine(" [x] Done"); - // here channel could also be accessed as ((EventingBasicConsumer)sender).Model - channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); + // here channel could also be accessed as ((AsyncEventingBasicConsumer)sender).Channel + await channel.BasicAckAsync(deliveryTag: ea.DeliveryTag, multiple: false); }; -channel.BasicConsume(queue: "task_queue", - autoAck: false, - consumer: consumer); + +await channel.BasicConsumeAsync("task_queue", autoAck: false, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); -Console.ReadLine(); \ No newline at end of file +Console.ReadLine(); diff --git a/dotnet/Worker/Worker.csproj b/dotnet/Worker/Worker.csproj index 540e7ceb..924718ee 100644 --- a/dotnet/Worker/Worker.csproj +++ b/dotnet/Worker/Worker.csproj @@ -1,14 +1,14 @@  - net7.0 + net8.0 Exe enable enable - + From 9689eaa93710a23270ebb911f06135a3685450c1 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 6 Nov 2024 10:28:33 -0800 Subject: [PATCH 468/659] Use latest publisher confirmation code from https://github.com/rabbitmq/rabbitmq-dotnet-client/tree/main/projects/Applications/PublisherConfirms --- dotnet/PublisherConfirms/PublisherConfirms.cs | 221 ++++++++++-------- 1 file changed, 122 insertions(+), 99 deletions(-) diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index 44d9f79b..a295376d 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -1,16 +1,17 @@ -using RabbitMQ.Client; -using RabbitMQ.Client.Exceptions; +using System.Buffers.Binary; using System.Diagnostics; using System.Text; +using RabbitMQ.Client; -const int MessageCount = 50_000; -const int MaxOutstandingConfirms = 128; +const ushort MAX_OUTSTANDING_CONFIRMS = 256; -var rateLimiter = new ThrottlingRateLimiter(MaxOutstandingConfirms); -var channelOptions = new CreateChannelOptions( +const int MESSAGE_COUNT = 50_000; +bool debug = false; + +var channelOpts = new CreateChannelOptions( publisherConfirmationsEnabled: true, publisherConfirmationTrackingEnabled: true, - outstandingPublisherConfirmationsRateLimiter: rateLimiter + outstandingPublisherConfirmationsRateLimiter: new ThrottlingRateLimiter(MAX_OUTSTANDING_CONFIRMS) ); var props = new BasicProperties @@ -18,23 +19,33 @@ Persistent = true }; +string hostname = "localhost"; +if (args.Length > 0) +{ + if (false == string.IsNullOrWhiteSpace(args[0])) + { + hostname = args[0]; + } +} + +#pragma warning disable CS8321 // Local function is declared but never used + await PublishMessagesIndividuallyAsync(); await PublishMessagesInBatchAsync(); await HandlePublishConfirmsAsynchronously(); -static Task CreateConnectionAsync() +Task CreateConnectionAsync() { - var factory = new ConnectionFactory { HostName = "localhost" }; + var factory = new ConnectionFactory { HostName = hostname }; return factory.CreateConnectionAsync(); } async Task PublishMessagesIndividuallyAsync() { - Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages individually " + - "and handling confirms individually (i.e., the slowest way)"); + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MESSAGE_COUNT:N0} messages and handling confirms per-message"); - using IConnection connection = await CreateConnectionAsync(); - using IChannel channel = await connection.CreateChannelAsync(channelOptions); + await using IConnection connection = await CreateConnectionAsync(); + await using IChannel channel = await connection.CreateChannelAsync(channelOpts); // declare a server-named queue QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); @@ -43,85 +54,61 @@ async Task PublishMessagesIndividuallyAsync() var sw = new Stopwatch(); sw.Start(); - for (int i = 0; i < MessageCount; i++) + for (int i = 0; i < MESSAGE_COUNT; i++) { byte[] body = Encoding.UTF8.GetBytes(i.ToString()); try { - await channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, - mandatory: true, basicProperties: props); - } - catch (PublishException pubEx) - { - Console.Error.WriteLine("{0} [ERROR] publish exception: {1}", DateTime.Now, pubEx); + await channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, basicProperties: props, mandatory: true); } catch (Exception ex) { - Console.Error.WriteLine("{0} [ERROR] other exception: {1}", DateTime.Now, ex); + Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: {ex}"); } } sw.Stop(); - Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages individually " + - $"in {sw.ElapsedMilliseconds:N0} ms"); + Console.WriteLine($"{DateTime.Now} [INFO] published {MESSAGE_COUNT:N0} messages individually in {sw.ElapsedMilliseconds:N0} ms"); } async Task PublishMessagesInBatchAsync() { - Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages and handling " + - $"confirms in batches"); + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MESSAGE_COUNT:N0} messages and handling confirms in batches"); - using IConnection connection = await CreateConnectionAsync(); - using IChannel channel = await connection.CreateChannelAsync(channelOptions); + await using IConnection connection = await CreateConnectionAsync(); + await using IChannel channel = await connection.CreateChannelAsync(channelOpts); // declare a server-named queue QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); string queueName = queueDeclareResult.QueueName; - /* - * Note: since throttling happens when 50% of the outstanding confirms are reached, - * each batch size should not be greater than this value - */ - int batchSize = MaxOutstandingConfirms / 2; + int batchSize = MAX_OUTSTANDING_CONFIRMS / 2; int outstandingMessageCount = 0; var sw = new Stopwatch(); sw.Start(); - static async Task AwaitPublishTasks(IEnumerable publishTasks) - { - foreach (ValueTask pt in publishTasks) - { - try - { - await pt; - } - catch (PublishException pubEx) - { - Console.Error.WriteLine("{0} [ERROR] publish exception: {1}", DateTime.Now, pubEx); - } - catch (Exception ex) - { - Console.Error.WriteLine("{0} [ERROR] other exception: {1}", DateTime.Now, ex); - } - } - } - var publishTasks = new List(); - for (int i = 0; i < MessageCount; i++) + for (int i = 0; i < MESSAGE_COUNT; i++) { byte[] body = Encoding.UTF8.GetBytes(i.ToString()); - - var pt0 = channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, - mandatory: true, basicProperties: props); - publishTasks.Add(pt0); - + publishTasks.Add(channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props)); outstandingMessageCount++; if (outstandingMessageCount == batchSize) { - await AwaitPublishTasks(publishTasks); + foreach (ValueTask pt in publishTasks) + { + try + { + await pt; + } + catch (Exception ex) + { + Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'"); + } + } publishTasks.Clear(); outstandingMessageCount = 0; } @@ -129,41 +116,50 @@ static async Task AwaitPublishTasks(IEnumerable publishTasks) if (publishTasks.Count > 0) { - await AwaitPublishTasks(publishTasks); + foreach (ValueTask pt in publishTasks) + { + try + { + await pt; + } + catch (Exception ex) + { + Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'"); + } + } + publishTasks.Clear(); + outstandingMessageCount = 0; } sw.Stop(); - Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages in batch in " + - $"{sw.ElapsedMilliseconds:N0} ms"); + Console.WriteLine($"{DateTime.Now} [INFO] published {MESSAGE_COUNT:N0} messages in batch in {sw.ElapsedMilliseconds:N0} ms"); } async Task HandlePublishConfirmsAsynchronously() { - Console.WriteLine($"{DateTime.Now} [INFO] publishing {MessageCount:N0} messages and " + - $"handling confirms asynchronously"); + Console.WriteLine($"{DateTime.Now} [INFO] publishing {MESSAGE_COUNT:N0} messages and handling confirms asynchronously"); - // NOTE: setting publisherConfirmationTrackingEnabled - // to false because this method is tracking them itself. - channelOptions = new CreateChannelOptions( - publisherConfirmationsEnabled: true, - publisherConfirmationTrackingEnabled: false, - outstandingPublisherConfirmationsRateLimiter: null - ); + await using IConnection connection = await CreateConnectionAsync(); - using IConnection connection = await CreateConnectionAsync(); - using IChannel channel = await connection.CreateChannelAsync(channelOptions); + channelOpts = new CreateChannelOptions(publisherConfirmationsEnabled: true, publisherConfirmationTrackingEnabled: false); + await using IChannel channel = await connection.CreateChannelAsync(channelOpts); // declare a server-named queue QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); string queueName = queueDeclareResult.QueueName; - bool publishingCompleted = false; - var allMessagesConfirmedTcs = - new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var allMessagesConfirmedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var outstandingConfirms = new LinkedList(); var semaphore = new SemaphoreSlim(1, 1); + int confirmedCount = 0; async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple) { + if (debug) + { + Console.WriteLine("{0} [DEBUG] confirming message: {1} (multiple: {2})", + DateTime.Now, deliveryTag, multiple); + } + await semaphore.WaitAsync(); try { @@ -184,10 +180,13 @@ async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple) { break; } + + confirmedCount++; } while (true); } else { + confirmedCount++; outstandingConfirms.Remove(deliveryTag); } } @@ -196,35 +195,49 @@ async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple) semaphore.Release(); } - if (publishingCompleted && outstandingConfirms.Count == 0) + if (outstandingConfirms.Count == 0 || confirmedCount == MESSAGE_COUNT) { allMessagesConfirmedTcs.SetResult(true); } } - channel.BasicAcksAsync += (sender, ea) => - CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); + channel.BasicReturnAsync += (sender, ea) => + { + ulong sequenceNumber = 0; + + IReadOnlyBasicProperties props = ea.BasicProperties; + if (props.Headers is not null) + { + object? maybeSeqNum = props.Headers[Constants.PublishSequenceNumberHeader]; + if (maybeSeqNum is not null) + { + sequenceNumber = BinaryPrimitives.ReadUInt64BigEndian((byte[])maybeSeqNum); + } + } + Console.WriteLine($"{DateTime.Now} [WARNING] message sequence number {sequenceNumber} has been basic.return-ed"); + return CleanOutstandingConfirms(sequenceNumber, false); + }; + + channel.BasicAcksAsync += (sender, ea) => CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); channel.BasicNacksAsync += (sender, ea) => { - Console.WriteLine($"{DateTime.Now} [WARNING] message sequence number: {ea.DeliveryTag} " + - $"has been nacked (multiple: {ea.Multiple})"); + Console.WriteLine($"{DateTime.Now} [WARNING] message sequence number: {ea.DeliveryTag} has been nacked (multiple: {ea.Multiple})"); return CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple); }; var sw = new Stopwatch(); sw.Start(); - var publishTasks = new List(); - for (int i = 0; i < MessageCount; i++) + var publishTasks = new List>(); + for (int i = 0; i < MESSAGE_COUNT; i++) { string msg = i.ToString(); byte[] body = Encoding.UTF8.GetBytes(msg); ulong nextPublishSeqNo = await channel.GetNextPublishSequenceNumberAsync(); if ((ulong)(i + 1) != nextPublishSeqNo) { - Console.WriteLine($"{DateTime.Now} [WARNING] i {i + 1} does not equal next sequence " + - $"number: {nextPublishSeqNo}"); + Console.WriteLine($"{DateTime.Now} [WARNING] i {i + 1} does not equal next sequence number: {nextPublishSeqNo}"); } await semaphore.WaitAsync(); try @@ -235,35 +248,45 @@ async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple) { semaphore.Release(); } - var pt = channel.BasicPublishAsync(exchange: string.Empty, - routingKey: queueName, body: body); - publishTasks.Add(pt); + + string rk = queueName; + if (i % 1000 == 0) + { + // This will cause a basic.return, for fun + rk = Guid.NewGuid().ToString(); + } + (ulong, ValueTask) data = + (nextPublishSeqNo, channel.BasicPublishAsync(exchange: string.Empty, routingKey: rk, body: body, mandatory: true, basicProperties: props)); + publishTasks.Add(data); } using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); - - try + // await Task.WhenAll(publishTasks).WaitAsync(cts.Token); + foreach ((ulong SeqNo, ValueTask PublishTask) datum in publishTasks) { - foreach (ValueTask pt in publishTasks) + try + { + await datum.PublishTask; + } + catch (Exception ex) { - await pt; - cts.Token.ThrowIfCancellationRequested(); + Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack, seqNo: '{datum.SeqNo}', ex: '{ex}'"); } - publishingCompleted = true; + } + + try + { await allMessagesConfirmedTcs.Task.WaitAsync(cts.Token); } catch (OperationCanceledException) { - Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed " + - "within 10 seconds", DateTime.Now); + Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed within 10 seconds", DateTime.Now); } catch (TimeoutException) { - Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed " + - "within 10 seconds", DateTime.Now); + Console.Error.WriteLine("{0} [ERROR] all messages could not be published and confirmed within 10 seconds", DateTime.Now); } sw.Stop(); - Console.WriteLine($"{DateTime.Now} [INFO] published {MessageCount:N0} messages and handled " + - $"confirm asynchronously {sw.ElapsedMilliseconds:N0} ms"); + Console.WriteLine($"{DateTime.Now} [INFO] published {MESSAGE_COUNT:N0} messages and handled confirm asynchronously {sw.ElapsedMilliseconds:N0} ms"); } From 719c2c2e6944c69730865ab3df4a25d119ab614c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:11:48 +0000 Subject: [PATCH 469/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.19.0 to 0.20.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.19.0...v0.20.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 0e93738c..1226fc93 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.19.0 + 0.20.0 org.slf4j From e10d02b803f0235e661ad869d3a2a9a0f19c3421 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:26:39 +0000 Subject: [PATCH 470/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.22.0 to 5.23.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.22.0...v5.23.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 387a3f71..871bfe8e 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.22.0' + implementation 'com.rabbitmq:amqp-client:5.23.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.2' From 5c39b6d9591ce05565d3b88b9aff98667cdb8908 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:32:29 +0000 Subject: [PATCH 471/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.22.0 to 5.23.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.22.0...v5.23.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a1efa827..3c6746d4 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.22.0 + 5.23.0 From 50f247b4b3379ef116a9390961459baab81e12ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:34:38 +0000 Subject: [PATCH 472/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.1.7 to 3.2.0. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.1.7...v3.2.0) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index ea77b857..2b6af088 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.1.7 + 3.2.0 From ef6c1a2bc5979b770a761cd6f4986c7c078458ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:22:30 +0000 Subject: [PATCH 473/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.5 to 3.3.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.5...v3.3.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 7e3c8039..3a65de70 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.5 + 3.3.6 From f87ac9e95381a2b7278fad5760b0a49ea0e016c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:41:59 +0000 Subject: [PATCH 474/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.5 to 3.3.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.5...v3.3.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 2b6af088..99c5face 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.5 + 3.3.6 From 9da664a6bfae7a28fbc9895b19b2997aaa111818 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:25:46 +0000 Subject: [PATCH 475/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.6 to 3.4.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.6...v3.4.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 3a65de70..80922dd0 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.6 + 3.4.0 From f4cfbf60432d2fb6a3b938840f3b3b39c5cc3483 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:32:46 +0000 Subject: [PATCH 476/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.6 to 3.4.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.6...v3.4.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 99c5face..4b56f778 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.6 + 3.4.0 From d300a32c45df08914395ea92a5b98560258fbbdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:16:22 +0000 Subject: [PATCH 477/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.28 to 4.2.29. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.28...v4.2.29) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 871bfe8e..2e45743f 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.2' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.28' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.3' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.3' } From cc57e50fe45f41cf0f2ba99bec2da47387bc6a46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Nov 2024 18:00:37 +0000 Subject: [PATCH 478/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.28 to 4.2.29. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.28...v4.2.29) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 3c6746d4..36f8afa5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.28 + 4.2.29 test From cd24da5f1ddf4a1eb9692221ec9ffd5ff1f66681 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:38:14 +0000 Subject: [PATCH 479/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.23.0 to 5.24.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.23.0...v5.24.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 36f8afa5..c0819e3c 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.23.0 + 5.24.0 From 1b066de09257afb73ff50e1521821648e54c5ec9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:48:17 +0000 Subject: [PATCH 480/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.23.0 to 5.24.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.23.0...v5.24.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 2e45743f..997d2da6 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.23.0' + implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.2' From 5f8bf399fa31f346e3420a824d6ea96b50e4fe52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:58:34 +0000 Subject: [PATCH 481/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.20.0 to 0.21.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.20.0...v0.21.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 1226fc93..9b6634ce 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.20.0 + 0.21.0 org.slf4j From 775adc6535aa2ef2b6602d81d028debfe4dd24a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:31:51 +0000 Subject: [PATCH 482/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.3 to 5.11.4. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 997d2da6..153faa61 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.3' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.3' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4' } test { From 060a31b41ea40ad5cb8cafd65170c760cdb14de2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:59:08 +0000 Subject: [PATCH 483/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.3 to 5.11.4. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c0819e3c..6ae1400e 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.11.3 + 5.11.4 test From e341974d557ca9328d97298ee8826816fb06cfd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:23:40 +0000 Subject: [PATCH 484/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.3 to 5.11.4. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 153faa61..4f220c20 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.26.3' testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.3' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4' } From 41ce7d0bf1b80f3f488bd0139e370d8e573e17c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 18:08:40 +0000 Subject: [PATCH 485/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.0 to 3.2.1. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.0...v3.2.1) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 4b56f778..55aced31 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.0 + 3.2.1 From 9bfc653e64316ecaaf701913b9574d071e88c735 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:49:51 +0000 Subject: [PATCH 486/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.12 to 1.5.13. - [Commits](https://github.com/qos-ch/logback/commits) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 9b6634ce..969f8b7a 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.12 + 1.5.13 From 6f3da3dfacf43e772818ff224026373e25ac2e98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:18:30 +0000 Subject: [PATCH 487/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.0...v3.4.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 55aced31..26050b3d 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 From bcebe779de3738121468dee1b81ffb6d77781dc0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:21:24 +0000 Subject: [PATCH 488/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 6ae1400e..3372ab3c 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.26.3 + 3.27.0 test From 63f1a1ff364fdfcc47f53b3f4e39d9347268ca40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:22:34 +0000 Subject: [PATCH 489/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.0...v3.4.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 80922dd0..f2f1cdb7 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 From 50bf5c75876d6cc1a8836bba348b6eed5f70940e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:40:13 +0000 Subject: [PATCH 490/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 4f220c20..c33cbe6f 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' - testImplementation 'org.assertj:assertj-core:3.26.3' + testImplementation 'org.assertj:assertj-core:3.27.0' testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' From 82bdb031e0a2ce0e3edafdc98b4d34b425821c4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:48:04 +0000 Subject: [PATCH 491/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.13 to 1.5.14. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.13...v_1.5.14) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 969f8b7a..b62d9e14 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.13 + 1.5.14 From cad0a946359a0f6581f9d07415114f50178afff0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:04:29 +0000 Subject: [PATCH 492/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.14 to 1.5.15. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.14...v_1.5.15) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index b62d9e14..f0226ba3 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.14 + 1.5.15 From d13451f8fa7aa3d51a58449ff21589a73eeff6a7 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 1 Jan 2025 06:56:02 -0500 Subject: [PATCH 493/659] Fixes #532 --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index d537e228..2f096fa5 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2007-2015 Pivotal Software, Inc. + Copyright 2007-2025 Broadcom. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 9caa1710ed160f18991099448f71932a0904f0bc Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 1 Jan 2025 06:57:35 -0500 Subject: [PATCH 494/659] rust-stream: update dependencies to address an advisory --- rust-stream/Cargo.lock | 567 ++++++++++++++++++++++++++++++----------- 1 file changed, 415 insertions(+), 152 deletions(-) diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock index c636418f..1153eaf3 100644 --- a/rust-stream/Cargo.lock +++ b/rust-stream/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "android-tzdata" @@ -34,9 +34,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", @@ -45,23 +45,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -90,15 +90,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.1.10" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -108,9 +111,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -139,7 +142,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -158,6 +161,17 @@ dependencies = [ "syn", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -175,9 +189,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -190,9 +204,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -200,15 +214,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -217,15 +231,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -234,21 +248,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -275,9 +289,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "hashbrown" @@ -286,16 +300,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "hashbrown" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -314,40 +328,176 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] name = "indexmap" -version = "2.3.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -373,20 +523,19 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", "wasi", "windows-sys", @@ -424,24 +573,24 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "ordered-float" -version = "4.2.2" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] @@ -477,18 +626,18 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", @@ -497,9 +646,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -518,27 +667,27 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -612,9 +761,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags", ] @@ -651,9 +800,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -707,9 +856,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" @@ -737,9 +912,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys", @@ -751,31 +926,48 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "syn" -version = "2.0.73" +version = "2.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "837a7e8026c6ce912ff01cefbe8cafc2f8010ac49682e2a3d9decc3bce1ecaaf" +checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -783,25 +975,20 @@ dependencies = [ ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" -version = "1.39.2" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -838,9 +1025,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -849,9 +1036,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -868,9 +1055,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "toml_datetime", @@ -879,9 +1066,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -890,9 +1077,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -901,33 +1088,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "untrusted" @@ -937,20 +1109,32 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" [[package]] name = "wasi" @@ -960,23 +1144,23 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -985,9 +1169,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -995,9 +1179,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", @@ -1008,9 +1192,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "windows-core" @@ -1096,13 +1280,49 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "e6f5bb5257f2407a5425c6e749bfd9692192a73e70a6060516ac04f889087d68" dependencies = [ "memchr", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -1123,3 +1343,46 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] From ccd3cd426119e13236fe895512296194464df524 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 1 Jan 2025 06:58:21 -0500 Subject: [PATCH 495/659] rust-lapin: update dependencies to address an advisory --- rust-lapin/Cargo.lock | 1659 +++++++++++++++++++++++++++++------------ 1 file changed, 1178 insertions(+), 481 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index b3af4088..9840c056 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -1,12 +1,38 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] [[package]] name = "amq-protocol" -version = "7.1.2" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d40d8b2465c7959dd40cee32ba6ac334b5de57e9fca0cc756759894a4152a5d" +checksum = "e3a41c091e49edfcc098b4f90d4d7706a8cf9158034e84ebfee7ff346092f67c" dependencies = [ "amq-protocol-tcp", "amq-protocol-types", @@ -18,9 +44,9 @@ dependencies = [ [[package]] name = "amq-protocol-tcp" -version = "7.1.2" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cb2100adae7da61953a2c3a01935d86caae13329fadce3333f524d6d6ce12e2" +checksum = "3ed7a4a662472f88823ed2fc81babb0b00562f2c54284e3e7bffc02b6df649bf" dependencies = [ "amq-protocol-uri", "tcp-stream", @@ -29,9 +55,9 @@ dependencies = [ [[package]] name = "amq-protocol-types" -version = "7.1.2" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "156ff13c8a3ced600b4e54ed826a2ae6242b6069d00dd98466827cef07d3daff" +checksum = "bd6484fdc918c1b6e2ae8eda2914d19a5873e1975f93ad8d33d6a24d1d98df05" dependencies = [ "cookie-factory", "nom", @@ -41,60 +67,99 @@ dependencies = [ [[package]] name = "amq-protocol-uri" -version = "7.1.2" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751bbd7d440576066233e740576f1b31fdc6ab86cfabfbd48c548de77eca73e4" +checksum = "7f7f2da69e0e1182765bf33407cd8a843f20791b5af2b57a2645818c4776c56c" dependencies = [ "amq-protocol-types", "percent-encoding", "url", ] +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "async-channel" -version = "1.8.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.5.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ - "async-lock", "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ "async-channel", "async-executor", - "async-io", - "async-lock", + "async-io 2.4.0", + "async-lock 3.4.0", "blocking", - "futures-lite", + "futures-lite 2.5.0", "once_cell", ] [[package]] name = "async-global-executor-trait" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +checksum = "80f19936c1a84fb48ceb8899b642d2a72572587d1021cc561bfb24de9f33ee89" dependencies = [ "async-global-executor", "async-trait", @@ -107,27 +172,57 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2", + "socket2 0.4.10", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.5.0", + "parking", + "polling 3.7.4", + "rustix 0.38.42", + "slab", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", ] [[package]] @@ -136,7 +231,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" dependencies = [ - "async-io", + "async-io 1.13.0", "async-trait", "futures-core", "reactor-trait", @@ -144,15 +239,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", @@ -161,21 +256,36 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] -name = "base64" -version = "0.21.0" +name = "base64ct" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" @@ -183,6 +293,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "block-buffer" version = "0.10.4" @@ -203,30 +319,28 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", - "async-lock", "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", + "futures-io", + "futures-lite 2.5.0", + "piper", ] [[package]] -name = "bumpalo" -version = "3.12.2" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cbc" @@ -239,9 +353,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -259,26 +376,44 @@ dependencies = [ "inout", ] +[[package]] +name = "cms" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" +dependencies = [ + "const-oid", + "der", + "spki", + "x509-cert", +] + [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "cookie-factory" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" +checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -286,27 +421,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" @@ -318,6 +450,59 @@ dependencies = [ "typenum", ] +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "der_derive", + "flagset", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "des" version = "0.8.1" @@ -338,6 +523,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -346,36 +542,46 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "cc", - "libc", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "event-listener-strategy" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] [[package]] name = "executor-trait" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08" +checksum = "13c39dff9342e4e0e16ce96be751eb21a94e94a87bb2f6e63ad1961c2ce109bf" dependencies = [ "async-trait", ] @@ -389,32 +595,43 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "flagset" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" + [[package]] name = "flume" -version = "0.10.14" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", - "pin-project", - "spin 0.9.8", + "spin", ] [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -427,9 +644,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -437,15 +654,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -454,9 +671,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -464,7 +681,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -473,11 +690,24 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand 2.3.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -486,21 +716,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -526,29 +756,38 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" @@ -559,14 +798,143 @@ dependencies = [ "digest", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "idna" -version = "0.3.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -581,44 +949,35 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "js-sys" -version = "0.3.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" -dependencies = [ - "wasm-bindgen", -] +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "lapin" -version = "2.2.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc13beaa09eed710f406201f46b961345b4d061dd90ec3d3ccc70721e70342a" +checksum = "209b09a06f4bd4952a0fd0594f90d53cf4496b062f59acc838a2823e1bb7d95c" dependencies = [ "amq-protocol", "async-global-executor-trait", @@ -638,15 +997,15 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "linux-raw-sys" @@ -655,29 +1014,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] -name = "lock_api" -version = "0.4.9" +name = "linux-raw-sys" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.17" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "minimal-lexical" @@ -685,16 +1053,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +dependencies = [ + "adler2", +] + [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -708,20 +1084,62 @@ dependencies = [ ] [[package]] -name = "num_cpus" -version = "1.15.0" +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "hermit-abi 0.2.6", - "libc", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl-probe" @@ -730,33 +1148,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] -name = "p12" -version = "0.6.3" +name = "p12-keystore" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4873306de53fe82e7e484df31e1e947d61514b6ea2ed6cd7b45d63006fd9224" +checksum = "df7b60d0b2dcace322e6e8c4499c4c8bdf331c1bae046a54be5e4191c3610286" dependencies = [ "cbc", - "cipher", + "cms", + "der", "des", - "getrandom", + "hex", "hmac", - "lazy_static", + "pkcs12", + "pkcs5", + "rand", "rc2", "sha1", - "yasna", + "sha2", + "thiserror", + "x509-parser", ] [[package]] name = "parking" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -764,48 +1187,47 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.52.6", ] [[package]] -name = "percent-encoding" -version = "2.2.0" +name = "pbkdf2" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] [[package]] -name = "pin-project" -version = "1.1.0" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "pin-project-internal", + "base64ct", ] [[package]] -name = "pin-project-internal" -version = "1.1.0" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -815,9 +1237,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pinky-swear" -version = "6.1.0" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d894b67aa7a4bf295db5e85349078c604edaa6fa5c8721e8eca3c7729a27f2ac" +checksum = "6cfae3ead413ca051a681152bd266438d3bfa301c9bdf836939a14c721bb2a21" dependencies = [ "doc-comment", "flume", @@ -825,6 +1247,47 @@ dependencies = [ "tracing", ] +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + +[[package]] +name = "pkcs12" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695b3df3d3cc1015f12d70235e35b6b79befc5fa7a9b95b951eab1dd07c9efc2" +dependencies = [ + "cms", + "const-oid", + "der", + "digest", + "spki", + "x509-cert", + "zeroize", +] + +[[package]] +name = "pkcs5" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +dependencies = [ + "aes", + "cbc", + "der", + "pbkdf2", + "scrypt", + "sha2", + "spki", +] + [[package]] name = "polling" version = "2.8.0" @@ -832,7 +1295,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -841,20 +1304,50 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.42", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" -version = "1.0.58" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.27" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -870,6 +1363,36 @@ dependencies = [ "uuid", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "rc2" version = "0.8.1" @@ -892,159 +1415,184 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] name = "ring" -version = "0.16.20" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", + "cfg-if", + "getrandom", "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", + "spin", + "untrusted", + "windows-sys 0.52.0", ] [[package]] -name = "ring" -version = "0.17.3" +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rusticata-macros" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" dependencies = [ - "cc", - "getrandom", - "libc", - "spin 0.9.8", - "untrusted 0.9.0", - "windows-sys 0.48.0", + "nom", ] [[package]] name = "rustix" -version = "0.37.25" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.8", "windows-sys 0.48.0", ] +[[package]] +name = "rustix" +version = "0.38.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.59.0", +] + [[package]] name = "rustls" -version = "0.21.11" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ - "log", - "ring 0.17.3", - "rustls-webpki 0.101.7", - "sct", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls-connector" -version = "0.18.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c8d6cf0e464eff7cee6ba0419f56a65d29999fc164dd719c8633fbb401365f" +checksum = "2a980454b497c439c274f2feae2523ed8138bbd3d323684e1435fec62f800481" dependencies = [ "log", "rustls", "rustls-native-certs", - "rustls-webpki 0.100.2", + "rustls-pki-types", + "rustls-webpki", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", "rustls-pemfile", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", ] [[package]] -name = "rustls-webpki" -version = "0.100.2" +name = "rustls-pki-types" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.3", - "untrusted 0.9.0", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa20" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.59.0", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "sct" -version = "0.7.0" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", + "pbkdf2", + "salsa20", + "sha2", ] [[package]] name = "security-framework" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -1053,9 +1601,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -1063,18 +1611,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.163" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.163" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", @@ -1083,65 +1631,87 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] [[package]] -name = "spin" -version = "0.5.2" +name = "socket2" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] [[package]] name = "spin" @@ -1152,74 +1722,146 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.16" +version = "2.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" +checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tcp-stream" -version = "0.26.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1322b18a9e329ba45e4430b19543045b85cd1dcb2892e77d27ab471ba2039bd1" +checksum = "495b0abdce3dc1f8fd27240651c9e68890c14e9d9c61527b1ce44d8a5a7bd3d5" dependencies = [ "cfg-if", - "p12", + "p12-keystore", "rustls-connector", "rustls-pemfile", ] [[package]] -name = "tinyvec" -version = "1.6.0" +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ - "tinyvec_macros", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +dependencies = [ + "num-conv", + "time-core", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] [[package]] name = "tokio" -version = "1.28.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.8", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", @@ -1228,9 +1870,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -1239,53 +1881,31 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" [[package]] name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "untrusted" @@ -1295,35 +1915,47 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.3.1" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "uuid" -version = "1.3.3" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "wasi" @@ -1331,70 +1963,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasm-bindgen" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" - -[[package]] -name = "web-sys" -version = "0.3.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1419,153 +1987,282 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.52.6", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] -name = "yasna" -version = "0.5.2" +name = "writeable" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "x509-cert" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" +dependencies = [ + "const-oid", + "der", + "spki", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] From 473bef425aae65d6b97bc815138102b94fb46342 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 17:32:13 +0000 Subject: [PATCH 496/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.1. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.1) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 3372ab3c..bdad74fe 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.0 + 3.27.1 test From 17efadf39808967585658445b2eb4828c8cad369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 17:48:24 +0000 Subject: [PATCH 497/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.1. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.1) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c33cbe6f..1def4162 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' - testImplementation 'org.assertj:assertj-core:3.27.0' + testImplementation 'org.assertj:assertj-core:3.27.1' testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' From f55c83fb71a048eebcab3e3fd1c0bbb9cffc95c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jan 2025 17:37:01 +0000 Subject: [PATCH 498/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.2 to 5.15.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index bdad74fe..dc6794a5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.14.2 + 5.15.2 test From f848021ec2405f6876e81c091594c637805b29c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:22:45 +0000 Subject: [PATCH 499/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.15 to 1.5.16. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.15...v_1.5.16) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index f0226ba3..7a1b3ccb 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.15 + 1.5.16 From e467873239159714d0da20b481ddb19a6544840d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:24:11 +0000 Subject: [PATCH 500/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.1 to 3.27.2. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.1...assertj-build-3.27.2) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 1def4162..c95025f7 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' - testImplementation 'org.assertj:assertj-core:3.27.1' + testImplementation 'org.assertj:assertj-core:3.27.2' testImplementation 'org.mockito:mockito-core:5.14.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' From 85b68f38b758ec0ab34064d3d6a17da10ec8958f Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Mon, 6 Jan 2025 12:25:49 -0500 Subject: [PATCH 501/659] Drop Makefile It has been so out of date that it was using rabbitmq.com/releases, which was discontinued in 2016 or so. --- Makefile | 155 ------------------------------------------------------- 1 file changed, 155 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 5e2a2eef..00000000 --- a/Makefile +++ /dev/null @@ -1,155 +0,0 @@ -# Ignore this file, go straight to the directory with your language of -# choice and read the readme there. -# -# This makefile is for testing only. It's intended to install -# dependencies for all source code languages, which is an overkill for -# the great majority of users. -# - -all: - @echo "Review README in the directory with your langage of choice." - -### Test all combinations of languages -# -# -# Running everything requires quite a lot of dependencies you need at -# least (as tested on debian 5.0): -# -# apt-get install python-virtualenv git-core php5-cli \ -# ruby1.9 ruby1.9-dev rdoc1.9 unzip mono-gmcs sun-java5-jdk \ -# cpan perl -# -# -# You also need recent erlang, you may install it from sources following -# this commands: -# cd /usr/src -# apt-get -y install libncurses-dev libssl-dev -# [ -e otp_src_R14B03.tar.gz ] || wget https://www.erlang.org/download/otp_src_R14B03.tar.gz -# [ -e otp_src_R14B03 ] || tar xzf otp_src_R14B03.tar.gz -# cd otp_src_R14B03/ -# ./configure -# make -# make install -# -setup: dotnet/.ok erlang/.ok java/.ok python/.ok php/.ok ruby/.ok clojure/.ok - -setup-travisci: dotnet/.ok erlang/.ok java/.ok python/.ok ruby/.ok php/.ok clojure/.ok - -test: setup - RUBY=$(RUBY) python test.py - -test-travisci: setup-travisci - SLOWNESS=4 RUBY=ruby python travisci.py - -RABBITVER:=$(shell curl -s "https://www.rabbitmq.com/releases/rabbitmq-server/" | grep -oE '([0-9\.]{5,})' | tail -n 1) -R=https://www.rabbitmq.com/releases - -# Default value assumes CI environment -RUBY?=ruby1.9.1 - -DVER=$(RABBITVER) -dotnet/.ok: - (cd dotnet && \ - mkdir -p lib && \ - cd lib && \ - wget -qc $(R)/rabbitmq-dotnet-client/v$(DVER)/rabbitmq-dotnet-client-$(DVER)-dotnet-4.0.zip && \ - unzip -q rabbitmq-dotnet-client-$(DVER)-dotnet-4.0.zip && \ - cd .. && \ - for f in *.cs; do \ - gmcs -r:lib/bin/RabbitMQ.Client.dll $$f; \ - done && \ - touch .ok) -clean:: - (cd dotnet && \ - rm -rf .ok *.zip lib *.exe) - -EVER=$(RABBITVER) -erlang/.ok: - (cd erlang && \ - wget -qc $(R)/rabbitmq-erlang-client/v$(EVER)/rabbit_common-$(EVER).ez \ - $(R)/rabbitmq-erlang-client/v$(EVER)/amqp_client-$(EVER).ez && \ - unzip -q rabbit_common-$(EVER).ez && \ - ln -s rabbit_common-$(EVER) rabbit_common && \ - unzip -q amqp_client-$(EVER).ez && \ - ln -s amqp_client-$(EVER) amqp_client && \ - touch .ok) -clean:: - (cd erlang && \ - rm -rf .ok *.ez amqp_client* rabbit_common*) - -JVER=$(RABBITVER) -java/.ok: - (cd java && \ - wget -qc $(R)/rabbitmq-java-client/v$(JVER)/rabbitmq-java-client-bin-$(JVER).zip && \ - unzip -q rabbitmq-java-client-bin-$(JVER).zip && \ - cp rabbitmq-java-client-bin-$(JVER)/*.jar . && \ - javac -cp rabbitmq-client.jar *.java && \ - touch .ok) -clean:: - (cd java && \ - rm -rf .ok *.jar *.class *.zip rabbitmq-java-client-bin*) - -PVER=0.10.0 -python/.ok: - (cd python && \ - virtualenv venv && \ - ./venv/bin/easy_install pip && \ - ./venv/bin/pip install pika==$(PVER) && \ - touch .ok) -clean:: - (cd python && \ - rm -rf .ok venv distribute*.tar.gz) - -php/.ok: - (cd php && \ - mkdir -p ./bin && \ - curl -sS https://getcomposer.org/installer | php -- --install-dir=bin && \ - php ./bin/composer.phar install --prefer-source && \ - touch .ok) -clean:: - (cd php && \ - rm -rf .ok lib) - -GEM?=gem1.9.1 -TOPDIR:=$(PWD) -ruby/.ok: - (cd ruby && \ - GEM_HOME=gems/gems RUBYLIB=gems/lib $(GEM) install bunny --version "~> 2.7.0" --no-ri --no-rdoc && \ - touch .ok) -clean:: - (cd ruby && \ - rm -rf .ok gems) - -clean:: - (cd ruby-amqp && \ - rm -rf .ok gems) - -perl/.ok: - (cd perl && \ - PERL_MM_USE_DEFAULT=1 cpan -i -f Net::RabbitFoot && \ - PERL_MM_USE_DEFAULT=1 cpan -i -f UUID::Tiny && \ - touch .ok) - -clean:: - (cd python-puka && \ - rm -rf .ok venv distribute*.tar.gz) - -clojure/.ok: - (cd clojure && \ - mkdir -p bin && cd bin && \ - wget -qc https://raw.github.com/technomancy/leiningen/stable/bin/lein && \ - chmod +x ./lein && cd .. && \ - ./bin/lein deps && \ - touch .ok) -clean:: - (cd clojure && \ - rm -rf .ok bin/*) - -go/.ok: - (cd go && \ - go get https://github.com/streadway/amqp && \ - touch .ok) - -clean:: - (cd go && \ - rm -rf .ok) From 45c000eacb444db9c83f9f3697a4fcdf9c42dd7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:27:54 +0000 Subject: [PATCH 502/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.2 to 5.15.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c95025f7..5f400f34 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.27.2' - testImplementation 'org.mockito:mockito-core:5.14.2' + testImplementation 'org.mockito:mockito-core:5.15.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4' From f5b1f26a13c2eff79d4e49bf24f4f7520feb2493 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:41:30 +0000 Subject: [PATCH 503/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.1 to 3.27.2. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.1...assertj-build-3.27.2) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index dc6794a5..12207eec 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.1 + 3.27.2 test From 3cc9ac177933e61c2509bedf90f2b6473924a9a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:39:49 +0000 Subject: [PATCH 504/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.29 to 4.2.30. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.29...v4.2.30) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 12207eec..897e4f5b 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.29 + 4.2.30 test From 955ea4b846a7b90698431fe9f213c00f775463fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 18:02:54 +0000 Subject: [PATCH 505/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.29 to 4.2.30. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.29...v4.2.30) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 5f400f34..19b8522a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.27.2' testImplementation 'org.mockito:mockito-core:5.15.2' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.29' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4' } From 85a07425af2dec4b253ea30c94e860f20e95bc56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:33:21 +0000 Subject: [PATCH 506/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.2 to 3.27.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.2...assertj-build-3.27.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 897e4f5b..46d6fca2 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.2 + 3.27.3 test From 42543fc27f7b392d1548603f19f1002027ade14e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:52:01 +0000 Subject: [PATCH 507/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.2 to 3.27.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.2...assertj-build-3.27.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 19b8522a..c0160fc2 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.24.0' implementation 'org.slf4j:slf4j-simple:2.0.16' - testImplementation 'org.assertj:assertj-core:3.27.2' + testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.15.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' From 3ebb38a1170f73aca7b9ae9eb2d50ac656edb3c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 17:57:22 +0000 Subject: [PATCH 508/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.1...v3.2.2) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 26050b3d..d30f7ca7 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.1 + 3.2.2 From 0a5eec8b316552fa5ae43267457542b3519be7ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:33:54 +0000 Subject: [PATCH 509/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.1 to 3.4.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index d30f7ca7..64ae3f3d 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 From 198caf8b79378f5b88dce89a20febd554ddef642 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:50:37 +0000 Subject: [PATCH 510/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.1 to 3.4.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index f2f1cdb7..a96cccb6 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 From 2211bd65a3946be9179c2c8dc68cab53555f9562 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:43:50 +0000 Subject: [PATCH 511/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.21.0 to 0.22.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.21.0...v0.22.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 7a1b3ccb..2bcf746d 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.21.0 + 0.22.0 org.slf4j From f60fa9fbfecc4cf82ed7bf0dfa294d94511c9905 Mon Sep 17 00:00:00 2001 From: Jesse Ehrenzweig Date: Wed, 5 Feb 2025 12:24:50 -0500 Subject: [PATCH 512/659] Refactored PublisherConfirms.cs * Deduped PublishMessagesInBatchAsync() method's batch publishing code * Deleted outstandingMessageCount variable; use publishTasks.Count instead * Fixed potential bug by setting minimum batch size to 1 --- dotnet/PublisherConfirms/PublisherConfirms.cs | 32 ++++--------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index a295376d..cd159e6d 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -83,20 +83,20 @@ async Task PublishMessagesInBatchAsync() QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(); string queueName = queueDeclareResult.QueueName; - int batchSize = MAX_OUTSTANDING_CONFIRMS / 2; - int outstandingMessageCount = 0; + int batchSize = Math.Max(1, MAX_OUTSTANDING_CONFIRMS / 2); - var sw = new Stopwatch(); - sw.Start(); + var sw = Stopwatch.StartNew(); var publishTasks = new List(); for (int i = 0; i < MESSAGE_COUNT; i++) { byte[] body = Encoding.UTF8.GetBytes(i.ToString()); - publishTasks.Add(channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props)); - outstandingMessageCount++; + ValueTask publishTask = channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props); + publishTasks.Add(publishTask); - if (outstandingMessageCount == batchSize) + // NOTE: [publishTasks] should be published after the final message has been added, + // even if the # of tasks it contains isn't equal to [batchSize]. + if (publishTasks.Count == batchSize || i+1 == MESSAGE_COUNT) { foreach (ValueTask pt in publishTasks) { @@ -110,25 +110,7 @@ async Task PublishMessagesInBatchAsync() } } publishTasks.Clear(); - outstandingMessageCount = 0; - } - } - - if (publishTasks.Count > 0) - { - foreach (ValueTask pt in publishTasks) - { - try - { - await pt; - } - catch (Exception ex) - { - Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'"); - } } - publishTasks.Clear(); - outstandingMessageCount = 0; } sw.Stop(); From f8095d86901c995c15e52a968c8b757f349ba91d Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 5 Feb 2025 11:07:15 -0800 Subject: [PATCH 513/659] Avoid somewhat complicated if logic. --- dotnet/PublisherConfirms/PublisherConfirms.cs | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/dotnet/PublisherConfirms/PublisherConfirms.cs b/dotnet/PublisherConfirms/PublisherConfirms.cs index cd159e6d..5fbb1a10 100644 --- a/dotnet/PublisherConfirms/PublisherConfirms.cs +++ b/dotnet/PublisherConfirms/PublisherConfirms.cs @@ -1,7 +1,7 @@ -using System.Buffers.Binary; +using RabbitMQ.Client; +using System.Buffers.Binary; using System.Diagnostics; using System.Text; -using RabbitMQ.Client; const ushort MAX_OUTSTANDING_CONFIRMS = 256; @@ -94,27 +94,34 @@ async Task PublishMessagesInBatchAsync() ValueTask publishTask = channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props); publishTasks.Add(publishTask); - // NOTE: [publishTasks] should be published after the final message has been added, - // even if the # of tasks it contains isn't equal to [batchSize]. - if (publishTasks.Count == batchSize || i+1 == MESSAGE_COUNT) + await MaybeAwaitPublishes(publishTasks, batchSize); + } + + // Await any remaining tasks in case message count was not + // evenly divisible by batch size. + await MaybeAwaitPublishes(publishTasks, 0); + + sw.Stop(); + Console.WriteLine($"{DateTime.Now} [INFO] published {MESSAGE_COUNT:N0} messages in batch in {sw.ElapsedMilliseconds:N0} ms"); +} + +static async Task MaybeAwaitPublishes(List publishTasks, int batchSize) +{ + if (publishTasks.Count >= batchSize) + { + foreach (ValueTask pt in publishTasks) { - foreach (ValueTask pt in publishTasks) + try { - try - { - await pt; - } - catch (Exception ex) - { - Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'"); - } + await pt; + } + catch (Exception ex) + { + Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'"); } - publishTasks.Clear(); } + publishTasks.Clear(); } - - sw.Stop(); - Console.WriteLine($"{DateTime.Now} [INFO] published {MESSAGE_COUNT:N0} messages in batch in {sw.ElapsedMilliseconds:N0} ms"); } async Task HandlePublishConfirmsAsynchronously() From db1236e428787329fd0a20eb7cfda81f5b88f357 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 17:38:59 +0000 Subject: [PATCH 514/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.24.0 to 5.25.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.24.0...v5.25.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 46d6fca2..e3e0d94b 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.24.0 + 5.25.0 From 7d49ca4fd5e430ecb56a1c83b9a552dbe54ad221 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 17:43:30 +0000 Subject: [PATCH 515/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.24.0 to 5.25.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.24.0...v5.25.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c0160fc2..f3f6a385 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.24.0' + implementation 'com.rabbitmq:amqp-client:5.25.0' implementation 'org.slf4j:slf4j-simple:2.0.16' testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.15.2' From 16b602259a1da9ee7afc95274d48a038e1d874bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Feb 2025 18:00:26 +0000 Subject: [PATCH 516/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.2 to 3.2.3. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.2...v3.2.3) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 64ae3f3d..5843c09e 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.2 + 3.2.3 From 6a4effbeed3800f09d9df6d57d97e9a4915d893f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Feb 2025 18:04:20 +0000 Subject: [PATCH 517/659] chore(deps): bump org.apache.maven.plugins:maven-clean-plugin Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.4.0...maven-clean-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 2bcf746d..a9c47313 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -40,7 +40,7 @@ maven-clean-plugin - 3.4.0 + 3.4.1 maven-resources-plugin From 1c4aa92610e2f413b53c5eefb63d288f0d26d7b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Feb 2025 18:16:55 +0000 Subject: [PATCH 518/659] chore(deps): bump org.apache.maven.plugins:maven-clean-plugin Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.4.0...maven-clean-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index e3e0d94b..da240b64 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -84,7 +84,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.4.0 + 3.4.1 From a602450a4abd1b1a1d4013bf91ebd074e215d25f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:14:29 +0000 Subject: [PATCH 519/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.2 to 3.4.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.2...v3.4.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 5843c09e..0a38f28a 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.2 + 3.4.3 From 5f989ce91fa837b3b6548f092ffd31a53d9d2402 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:25:21 +0000 Subject: [PATCH 520/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.2 to 3.4.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.2...v3.4.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index a96cccb6..ac6c8403 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.2 + 3.4.3 From 9d63e34c7fe5626d63cafb82f2c7bfcffeb386e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:08:42 +0000 Subject: [PATCH 521/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.4 to 5.12.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index da240b64..19cff9ed 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.11.4 + 5.12.0 test From 20457c0957277d3e28430774b4c72f23ec06d867 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:08:46 +0000 Subject: [PATCH 522/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index da240b64..e64345ed 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -69,7 +69,7 @@ maven-compiler-plugin - 3.13.0 + 3.14.0 11 From 54abf14e662a1645fec6a8a430607293624d0039 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:17:25 +0000 Subject: [PATCH 523/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 0a38f28a..b76b090f 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -49,7 +49,7 @@ maven-compiler-plugin - 3.13.0 + 3.14.0 17 From bf7196e4f6a5830c367cca54e88b5d3d58a09db7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:55:17 +0000 Subject: [PATCH 524/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index a9c47313..7dbd7140 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -31,7 +31,7 @@ maven-compiler-plugin - 3.13.0 + 3.14.0 11 11 From 34e77d50ad94928e8bbeb95f194c7596a01a4f06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 17:56:45 +0000 Subject: [PATCH 525/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.4 to 5.12.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index f3f6a385..0a4f409d 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.15.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0' } test { From 639beded31a398c57e02e9b69a7c84304d2a0b79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 18:05:20 +0000 Subject: [PATCH 526/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index ac6c8403..b5f478d7 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -44,7 +44,7 @@ maven-compiler-plugin - 3.13.0 + 3.14.0 17 From 5dcf0f190d6fc708166c264f12070ec38886cd99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 19:25:54 +0000 Subject: [PATCH 527/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.4 to 5.12.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 0a4f409d..deadeab7 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.15.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0' } From 903847efdede4fb65ef422b9014232d4328ea7bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:46:29 +0000 Subject: [PATCH 528/659] chore(deps): bump org.slf4j:slf4j-simple in /java-mvn Bumps org.slf4j:slf4j-simple from 2.0.16 to 2.0.17. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 9af46aec..ac360933 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -32,7 +32,7 @@ org.slf4j slf4j-simple - 2.0.16 + 2.0.17 From 928dc1fc247a768cc27c51edf9078bd67b633b94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:46:31 +0000 Subject: [PATCH 529/659] chore(deps): bump org.slf4j:slf4j-api from 2.0.16 to 2.0.17 in /java-mvn Bumps org.slf4j:slf4j-api from 2.0.16 to 2.0.17. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 9af46aec..70b1a7ad 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-api - 2.0.16 + 2.0.17 From 3c665673de6c6c394fdb13e30555959ea25c168e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:53:12 +0000 Subject: [PATCH 530/659] chore(deps): bump org.slf4j:slf4j-api in /java-stream-mvn Bumps org.slf4j:slf4j-api from 2.0.16 to 2.0.17. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 7dbd7140..4c60d744 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -17,7 +17,7 @@ org.slf4j slf4j-api - 2.0.16 + 2.0.17 ch.qos.logback From 2f4d57fd1a9da9e12c0c05f2e2bc7128dc699e62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:01:40 +0000 Subject: [PATCH 531/659] chore(deps): bump org.slf4j:slf4j-simple in /java-gradle Bumps org.slf4j:slf4j-simple from 2.0.16 to 2.0.17. --- updated-dependencies: - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index deadeab7..c508688e 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.25.0' - implementation 'org.slf4j:slf4j-simple:2.0.16' + implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.15.2' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' From e97ef20f6f8c599ae9f42f78d6300fd3b4c98ef3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:13:27 +0000 Subject: [PATCH 532/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.16 to 1.5.17. - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.16...v_1.5.17) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 4c60d744..d3ca660f 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.16 + 1.5.17 From 1c8b344eab9d35a8e97060937b76488f0bec5274 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:35:03 +0000 Subject: [PATCH 533/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.15.2 to 5.16.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.15.2...v5.16.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c508688e..f3bbe377 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.25.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' - testImplementation 'org.mockito:mockito-core:5.15.2' + testImplementation 'org.mockito:mockito-core:5.16.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0' From cc59c8ed2092a5051f2c7f1b7c784b9fc27368db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 18:04:19 +0000 Subject: [PATCH 534/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.15.2 to 5.16.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.15.2...v5.16.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 34bdee4b..42feddfd 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.15.2 + 5.16.0 test From 5c8e4f1855b5f8cd540c80714550f3e8658eb953 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:05:26 +0000 Subject: [PATCH 535/659] chore(deps): bump ring from 0.17.8 to 0.17.13 in /rust-stream Bumps [ring](https://github.com/briansmith/ring) from 0.17.8 to 0.17.13. - [Changelog](https://github.com/briansmith/ring/blob/main/RELEASES.md) - [Commits](https://github.com/briansmith/ring/commits) --- updated-dependencies: - dependency-name: ring dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-stream/Cargo.lock | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock index 1153eaf3..b133d5f7 100644 --- a/rust-stream/Cargo.lock +++ b/rust-stream/Cargo.lock @@ -96,9 +96,9 @@ checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.2.6" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "shlex", ] @@ -770,15 +770,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" dependencies = [ "cc", "cfg-if", "getrandom", "libc", - "spin", "untrusted", "windows-sys", ] @@ -920,12 +919,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "stable_deref_trait" version = "1.2.0" From 0ab98d246ecb302023b5bb4c66b29fa50e4c4164 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 19:01:40 +0000 Subject: [PATCH 536/659] chore(deps): bump ring from 0.17.8 to 0.17.13 in /rust-lapin Bumps [ring](https://github.com/briansmith/ring) from 0.17.8 to 0.17.13. - [Changelog](https://github.com/briansmith/ring/blob/main/RELEASES.md) - [Commits](https://github.com/briansmith/ring/commits) --- updated-dependencies: - dependency-name: ring dependency-type: indirect ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 9840c056..486c71f0 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -353,9 +353,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.6" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "shlex", ] @@ -1424,15 +1424,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" dependencies = [ "cc", "cfg-if", "getrandom", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] From ac9b691f8433ba2c781de581e1ab0895cac273a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:50:19 +0000 Subject: [PATCH 537/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.12.0 to 5.12.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 42feddfd..d4188c90 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.12.0 + 5.12.1 test From 917f1f006668cdcbfb241a4a26e76c06597a4d02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:52:14 +0000 Subject: [PATCH 538/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.12.0 to 5.12.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index f3bbe377..32b636fd 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.16.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' } test { From 49fa54aa55d10432618d919527f8af02fcc0c6d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 19:35:51 +0000 Subject: [PATCH 539/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.12.0 to 5.12.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 32b636fd..22d849d3 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.16.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' } From 4d06f27b4869e96be998a0a6fd6639c4eb8957b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 17:34:58 +0000 Subject: [PATCH 540/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.3 to 3.2.4. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.3...v3.2.4) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index b76b090f..42d65714 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.3 + 3.2.4 From d5fc59db8ad38189baa4e9a88666a096cc028ad6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 17:54:53 +0000 Subject: [PATCH 541/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.16.0 to 5.16.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.16.0...v5.16.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 22d849d3..d06986c2 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.25.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' - testImplementation 'org.mockito:mockito-core:5.16.0' + testImplementation 'org.mockito:mockito-core:5.16.1' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' From a8d7817bf9151c42e6e07d512c0831fcaa56a100 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:03:12 +0000 Subject: [PATCH 542/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.16.0 to 5.16.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.16.0...v5.16.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index d4188c90..bcc655f6 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.16.0 + 5.16.1 test From 2b83572753ded596811d45e5d77865026166af5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:19:59 +0000 Subject: [PATCH 543/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.17 to 1.5.18. - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.17...v_1.5.18) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index d3ca660f..f57bc6ab 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.17 + 1.5.18 From 3ee31e724ef0b8fb45be88d6a81a737e0a70f6c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 17:25:57 +0000 Subject: [PATCH 544/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.3 to 3.4.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.3...v3.4.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index b5f478d7..54308565 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.3 + 3.4.4 From 73a8c36323a006451bfd0d98753f94ed20eea55d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 17:53:18 +0000 Subject: [PATCH 545/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.3 to 3.4.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.3...v3.4.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 42d65714..682542c4 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.3 + 3.4.4 From e2b2b764fd2f456aaafa2ba487431a7c27f90a82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 18:09:18 +0000 Subject: [PATCH 546/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.22.0 to 0.23.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.22.0...v0.23.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index f57bc6ab..3476273b 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.22.0 + 0.23.0 org.slf4j From 50a7e39733518e4a66ad1503b3a2f1386e219fe7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:32:17 +0000 Subject: [PATCH 547/659] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index bcc655f6..6a888f34 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.5.2 + 3.5.3 ${test-arguments} From 0720e118bac57329a00f3deda6d0e4f87477a5c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:51:28 +0000 Subject: [PATCH 548/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.16.1 to 5.17.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.16.1...v5.17.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.17.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 6a888f34..52ce93ae 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.16.1 + 5.17.0 test From b77423e2b2489f8603d101a071b14e12d017bddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:55:10 +0000 Subject: [PATCH 549/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.16.1 to 5.17.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.16.1...v5.17.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index d06986c2..0392cf7b 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.25.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' - testImplementation 'org.mockito:mockito-core:5.16.1' + testImplementation 'org.mockito:mockito-core:5.17.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' From 43e523ab5fea011fc7ee787f5cf39abe4d9efe51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:13:36 +0000 Subject: [PATCH 550/659] chore(deps): bump tokio from 1.28.1 to 1.38.2 in /rust-amqprs Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.28.1 to 1.38.2. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.28.1...tokio-1.38.2) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.38.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- rust-amqprs/Cargo.lock | 203 ++++++++++++++++++++++++++++++----------- 1 file changed, 152 insertions(+), 51 deletions(-) diff --git a/rust-amqprs/Cargo.lock b/rust-amqprs/Cargo.lock index 7b2d45e4..a3f6c637 100644 --- a/rust-amqprs/Cargo.lock +++ b/rust-amqprs/Cargo.lock @@ -1,6 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "amqp_serde" @@ -37,10 +52,19 @@ dependencies = [ ] [[package]] -name = "autocfg" -version = "1.1.0" +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] name = "bytes" @@ -54,6 +78,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -65,17 +95,23 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] -name = "log" -version = "0.4.17" +name = "memchr" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "miniz_oxide" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ - "cfg-if", + "adler2", ] [[package]] @@ -85,9 +121,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", - "log", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -100,17 +135,26 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "proc-macro2" -version = "1.0.58" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -132,6 +176,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "serde" version = "1.0.163" @@ -154,12 +204,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -175,11 +225,11 @@ dependencies = [ [[package]] name = "tokio" -version = "1.28.1" +version = "1.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "68722da18b0fc4a05fdc1120b302b82051265792a1e1b399086e9b204b10ad3d" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", @@ -187,14 +237,14 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", @@ -214,49 +264,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "windows-targets 0.48.0", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "windows-sys" +name = "windows-targets" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows-targets", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -265,38 +318,86 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" From 66a59116eb9cd863739d8696d669127109454739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:14:20 +0000 Subject: [PATCH 551/659] chore(deps): bump tokio from 1.42.0 to 1.43.1 in /rust-stream Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.42.0 to 1.43.1. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.42.0...tokio-1.43.1) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.43.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- rust-stream/Cargo.lock | 8 ++++---- rust-stream/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rust-stream/Cargo.lock b/rust-stream/Cargo.lock index b133d5f7..b667627b 100644 --- a/rust-stream/Cargo.lock +++ b/rust-stream/Cargo.lock @@ -979,9 +979,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "492a604e2fd7f814268a378409e6c92b5525d747d10db9a229723f55a417958c" dependencies = [ "backtrace", "bytes", @@ -997,9 +997,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", diff --git a/rust-stream/Cargo.toml b/rust-stream/Cargo.toml index d1bfdbe8..4c20b86c 100644 --- a/rust-stream/Cargo.toml +++ b/rust-stream/Cargo.toml @@ -7,5 +7,5 @@ edition = "2021" [dependencies] rabbitmq-stream-client = "0.4.4" -tokio = { version = "1.39.0", features = ["rt", "rt-multi-thread", "macros"] } +tokio = { version = "1.43.1", features = ["rt", "rt-multi-thread", "macros"] } futures = "0.3.30" From 37caa7f21c47fb5fd308be4d8bcf3d6b0895348e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 17:50:10 +0000 Subject: [PATCH 552/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.23.0 to 0.24.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.23.0...v0.24.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-version: 0.24.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 3476273b..f812f229 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.23.0 + 0.24.0 org.slf4j From 3d4a00b090fe5b47a5f7912e5e2c46429b4d3566 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:13:05 +0000 Subject: [PATCH 553/659] chore(deps): bump tokio from 1.42.0 to 1.43.1 in /rust-lapin Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.42.0 to 1.43.1. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.42.0...tokio-1.43.1) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.43.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- rust-lapin/Cargo.lock | 8 ++++---- rust-lapin/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rust-lapin/Cargo.lock b/rust-lapin/Cargo.lock index 486c71f0..ac48a3e7 100644 --- a/rust-lapin/Cargo.lock +++ b/rust-lapin/Cargo.lock @@ -1840,9 +1840,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "492a604e2fd7f814268a378409e6c92b5525d747d10db9a229723f55a417958c" dependencies = [ "backtrace", "bytes", @@ -1858,9 +1858,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", diff --git a/rust-lapin/Cargo.toml b/rust-lapin/Cargo.toml index e688a835..83de91bb 100644 --- a/rust-lapin/Cargo.toml +++ b/rust-lapin/Cargo.toml @@ -7,6 +7,6 @@ edition = "2018" [dependencies] futures = "0.3.21" lapin = "2.1.1" -tokio = { version = "1.20.4", features = ["full"] } +tokio = { version = "1.43.1", features = ["full"] } uuid = { version = "1.1.1", features = ["v4"] } tokio-stream = "0.1" From 28183916c52c5e878d0f19c244f9daee35d001cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 17:06:29 +0000 Subject: [PATCH 554/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.12.1 to 5.12.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.12.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 52ce93ae..3edd954f 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.12.1 + 5.12.2 test From c19c6caf453f69eea382bca2672f008ffdd9eb13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 17:14:57 +0000 Subject: [PATCH 555/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.12.1 to 5.12.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 0392cf7b..70e49a22 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.17.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' } From db95d9203aed36bed031a01b7af5a93a3752611e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 17:50:20 +0000 Subject: [PATCH 556/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.12.1 to 5.12.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 70e49a22..e40c0af8 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.17.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' } test { From 936ade16aafa5ce7c400f91ab00506898c6b35ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 17:49:35 +0000 Subject: [PATCH 557/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 0.24.0 to 1.0.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v0.24.0...v1.0.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-version: 1.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index f812f229..e529d417 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 0.24.0 + 1.0.0 org.slf4j From e0711d5db2411541cb0b2b9447592e8d4486b848 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 17:34:49 +0000 Subject: [PATCH 558/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.4...v3.2.5) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-version: 3.2.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 682542c4..78c33c6c 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.4 + 3.2.5 From 1adf1347485c34327a5932e196a1eb4c840bf43c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 17:24:38 +0000 Subject: [PATCH 559/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.4 to 3.4.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.4...v3.4.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 54308565..3fb974aa 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 From 5d5f8c53b186bb4606f57e59e7076bfc43228582 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 18:08:26 +0000 Subject: [PATCH 560/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.4 to 3.4.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.4...v3.4.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 78c33c6c..b4ad94cc 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 From a9dc5ae5f97c8338b2b55342debbacdb57023389 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 17:33:09 +0000 Subject: [PATCH 561/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.17.0 to 5.18.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.17.0...v5.18.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.18.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 3edd954f..56487e35 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.17.0 + 5.18.0 test From 07e0b0011d5d63abe88359a590d238f3effa5d8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 17:50:16 +0000 Subject: [PATCH 562/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.17.0 to 5.18.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.17.0...v5.18.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.18.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index e40c0af8..2544b26a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.25.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' - testImplementation 'org.mockito:mockito-core:5.17.0' + testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' From a2608394f45b06d2b025f54e978ee9b8dedc64d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 17:37:08 +0000 Subject: [PATCH 563/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.4.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.4.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.4.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 3fb974aa..466bd7d8 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.4.6 From a64315df6151307754e6da4eb89d1a9fd44b693e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 17:48:16 +0000 Subject: [PATCH 564/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.4.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.4.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.4.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index b4ad94cc..fec26466 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.4.6 From d7e9a888bf66a629cd31396b0371f90fe4e0745d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 17:10:37 +0000 Subject: [PATCH 565/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.6 to 3.5.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.6...v3.5.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index fec26466..41c37cc5 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.6 + 3.5.0 From e25c2d6ef2e989ce2473ae270a55e89dcc8add16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 18:02:53 +0000 Subject: [PATCH 566/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.6 to 3.5.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.6...v3.5.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 466bd7d8..9d8c0479 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.6 + 3.5.0 From 0ae6846f45f350dec2dbb8f54546f93de8149aa4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 17:11:02 +0000 Subject: [PATCH 567/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.30 to 4.2.32. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.30...v4.2.32) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.32 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 2544b26a..1be4e48a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.30' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' } From 5e1173bc78d472493d774e1519f7a2a77819ce5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 17:23:21 +0000 Subject: [PATCH 568/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.30 to 4.2.32. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.30...v4.2.32) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.32 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 56487e35..1c1b3a26 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.30 + 4.2.32 test From cd89a70a67254fe8ffc1e9dcad0b93b1020fae4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 17:46:40 +0000 Subject: [PATCH 569/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.12.2 to 5.13.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.2...r5.13.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 1be4e48a..044fa00a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' } From ae4abe81dfc227d0df08b9887555c080a0a3eb4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 19:39:39 +0000 Subject: [PATCH 570/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.12.2 to 5.13.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.2...r5.13.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 044fa00a..27c973d5 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.0' } test { From 52fe11115098f90812a82e0bbe1aba67812a8695 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 17:25:37 +0000 Subject: [PATCH 571/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 1.0.0 to 1.1.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v1.0.0...v1.1.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-version: 1.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index e529d417..267405f5 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 1.0.0 + 1.1.0 org.slf4j From eab6c5d5570a08c101514e7b9d2a40cb154890a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 17:27:41 +0000 Subject: [PATCH 572/659] chore(deps): bump org.apache.maven.plugins:maven-clean-plugin Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.4.1...maven-clean-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index e529d417..03537c59 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -40,7 +40,7 @@ maven-clean-plugin - 3.4.1 + 3.5.0 maven-resources-plugin From d1f6af4eda8a855852aca62d506f0a3082f2af44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 18:01:57 +0000 Subject: [PATCH 573/659] chore(deps): bump org.apache.maven.plugins:maven-clean-plugin Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.4.1...maven-clean-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 1c1b3a26..d92c2d3d 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -84,7 +84,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.4.1 + 3.5.0 From cc684436b09e344202412f563fa8273748e7a5e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 17:12:33 +0000 Subject: [PATCH 574/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.12.2 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.2...r5.13.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.13.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index d92c2d3d..5c0298e1 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.12.2 + 5.13.1 test From 7a3614f93bd8ff20dc963b3420cdd5628aeb67f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 17:34:02 +0000 Subject: [PATCH 575/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.13.0 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.13.0...r5.13.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.13.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 27c973d5..dd583e4b 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.1' } test { From 125ff765e5487211b3330d8edf2bba1cd3b0f547 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 19:20:14 +0000 Subject: [PATCH 576/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.13.0 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.13.0...r5.13.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.13.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index dd583e4b..08b7e002 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.1' } From fb8d74eb6bc6a63680be10a280fd61721ca6860e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 20:55:37 +0000 Subject: [PATCH 577/659] chore(deps): bump brace-expansion in /javascript-nodejs Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.1 to 2.0.2. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 2.0.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- javascript-nodejs/package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/javascript-nodejs/package-lock.json b/javascript-nodejs/package-lock.json index e9c43104..70292aa6 100644 --- a/javascript-nodejs/package-lock.json +++ b/javascript-nodejs/package-lock.json @@ -51,9 +51,10 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } From 1c9e36420b92a101a8ff59127bb45e157ad8cc4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 17:30:36 +0000 Subject: [PATCH 578/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.0...v3.5.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 9d8c0479..185e196c 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.0 + 3.5.1 From acec8df367a45fec479055eb3dbebbed8cf50bf6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 17:55:38 +0000 Subject: [PATCH 579/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.0...v3.5.1) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 41c37cc5..93a04f2d 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.0 + 3.5.1 From 02dc35b6b4cec11f45806a826438a12a0e552660 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:14:08 +0000 Subject: [PATCH 580/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.32 to 4.2.33. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.32...v4.2.33) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.33 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 08b7e002..a60199d3 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.32' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.1' } From 1919bbf77128452747a1a4fc0a3925f1ff0e81ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:15:14 +0000 Subject: [PATCH 581/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.1 to 3.5.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.1...v3.5.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 93a04f2d..d56b31d1 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.1 + 3.5.3 From 59d5404b843d4d689079eaca1d219f01f02b2cb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:41:59 +0000 Subject: [PATCH 582/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.32 to 4.2.33. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.32...v4.2.33) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.33 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 5c0298e1..2ca163c8 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.32 + 4.2.33 test From 846c5b162bf48bf2b21669831a1838e6c68530d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:49:33 +0000 Subject: [PATCH 583/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.1 to 3.5.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.1...v3.5.3) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 185e196c..c1e69eb6 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.1 + 3.5.3 From f7afca945cd1ba91a1cecd09d423f76416b10f58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:22:26 +0000 Subject: [PATCH 584/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.1 to 5.13.2. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.1...r5.13.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.13.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 2ca163c8..79c8e93a 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.13.1 + 5.13.2 test From aeff52012721e53ad3c62bdf4f24d87835f64694 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:33:32 +0000 Subject: [PATCH 585/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit-framework) from 5.13.1 to 5.13.2. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.1...r5.13.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.13.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index a60199d3..5f8dc026 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.2' } test { From af297e44a91900ced7b56bd79d532a236756eafe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:33:35 +0000 Subject: [PATCH 586/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit-framework) from 5.13.1 to 5.13.2. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.1...r5.13.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.13.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index a60199d3..5f8dc026 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.2' } test { From e8bc1ccbcad97c99e19736e69121822519905241 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:12:02 +0000 Subject: [PATCH 587/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.2 to 5.13.3. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.2...r5.13.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.13.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 79c8e93a..5b5d1096 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.13.2 + 5.13.3 test From 116349c764482e0f87e6e398e3dde9193aa67421 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:14:12 +0000 Subject: [PATCH 588/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit-framework) from 5.13.2 to 5.13.3. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.2...r5.13.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.13.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 5f8dc026..2fb458a8 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.3' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.3' } test { From 297f3a7c0525a6cfdb27de413a5a247a3e74b28a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:14:14 +0000 Subject: [PATCH 589/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit-framework) from 5.13.2 to 5.13.3. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.2...r5.13.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.13.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 5f8dc026..2fb458a8 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.2' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.3' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.3' } test { From 643f4f0a8758eff77f63a0664df7ea3c2a602243 Mon Sep 17 00:00:00 2001 From: Chris Wedgwood Date: Tue, 8 Jul 2025 13:07:28 -0700 Subject: [PATCH 590/659] tweak eol to avoid `git diff` confusion/noise --- dotnet/dotnet.sln | 206 +++++++++++++++++++++++----------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/dotnet/dotnet.sln b/dotnet/dotnet.sln index 6b3357dd..9b3c5c16 100644 --- a/dotnet/dotnet.sln +++ b/dotnet/dotnet.sln @@ -1,103 +1,103 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31717.71 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLog", "EmitLog\EmitLog.csproj", "{38520F1F-5F59-4D6C-815A-BCB811B8335E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogDirect", "EmitLogDirect\EmitLogDirect.csproj", "{303D712F-9107-41D9-A855-46A281DA250C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogTopic", "EmitLogTopic\EmitLogTopic.csproj", "{E1A0AF83-F505-483E-9F22-C0A137E4B190}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewTask", "NewTask\NewTask.csproj", "{7575E7F7-4C5E-42A2-894D-DDCD16D964DB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublisherConfirms", "PublisherConfirms\PublisherConfirms.csproj", "{0BBAF99D-B711-4201-B30B-114D88EDD276}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receive", "Receive\Receive.csproj", "{BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogs", "ReceiveLogs\ReceiveLogs.csproj", "{63E5ECF3-C78E-4461-8247-33F3BF019EF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsDirect", "ReceiveLogsDirect\ReceiveLogsDirect.csproj", "{D16666BC-C69F-49D4-96B9-3DC562CC11C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCClient", "RPCClient\RPCClient.csproj", "{6161C019-58A6-4A72-B3F8-D1A1FD2681E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Send", "Send\Send.csproj", "{1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "Worker\Worker.csproj", "{0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCServer", "RPCServer\RPCServer.csproj", "{7317B766-BBD8-402B-82E3-1DBAA376FA64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsTopic", "ReceiveLogsTopic\ReceiveLogsTopic.csproj", "{497698C7-9D59-478F-9394-265915455F00}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Folder", "Solution Folder", "{853BA576-BFDF-4547-BA70-BC7781EDAB10}" - ProjectSection(SolutionItems) = preProject - .gitignore = .gitignore - README.md = README.md - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.Build.0 = Release|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.Build.0 = Release|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.Build.0 = Release|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.Build.0 = Release|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.Build.0 = Release|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.Build.0 = Release|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.Build.0 = Release|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.Build.0 = Release|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.Build.0 = Release|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.Build.0 = Release|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.Build.0 = Release|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.Build.0 = Release|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {22E2792A-85EF-4497-AA49-1A9C62A33CAC} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31717.71 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLog", "EmitLog\EmitLog.csproj", "{38520F1F-5F59-4D6C-815A-BCB811B8335E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogDirect", "EmitLogDirect\EmitLogDirect.csproj", "{303D712F-9107-41D9-A855-46A281DA250C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmitLogTopic", "EmitLogTopic\EmitLogTopic.csproj", "{E1A0AF83-F505-483E-9F22-C0A137E4B190}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewTask", "NewTask\NewTask.csproj", "{7575E7F7-4C5E-42A2-894D-DDCD16D964DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublisherConfirms", "PublisherConfirms\PublisherConfirms.csproj", "{0BBAF99D-B711-4201-B30B-114D88EDD276}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receive", "Receive\Receive.csproj", "{BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogs", "ReceiveLogs\ReceiveLogs.csproj", "{63E5ECF3-C78E-4461-8247-33F3BF019EF1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsDirect", "ReceiveLogsDirect\ReceiveLogsDirect.csproj", "{D16666BC-C69F-49D4-96B9-3DC562CC11C4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCClient", "RPCClient\RPCClient.csproj", "{6161C019-58A6-4A72-B3F8-D1A1FD2681E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Send", "Send\Send.csproj", "{1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worker", "Worker\Worker.csproj", "{0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPCServer", "RPCServer\RPCServer.csproj", "{7317B766-BBD8-402B-82E3-1DBAA376FA64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReceiveLogsTopic", "ReceiveLogsTopic\ReceiveLogsTopic.csproj", "{497698C7-9D59-478F-9394-265915455F00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Folder", "Solution Folder", "{853BA576-BFDF-4547-BA70-BC7781EDAB10}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + README.md = README.md + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38520F1F-5F59-4D6C-815A-BCB811B8335E}.Release|Any CPU.Build.0 = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {303D712F-9107-41D9-A855-46A281DA250C}.Release|Any CPU.Build.0 = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1A0AF83-F505-483E-9F22-C0A137E4B190}.Release|Any CPU.Build.0 = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7575E7F7-4C5E-42A2-894D-DDCD16D964DB}.Release|Any CPU.Build.0 = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BBAF99D-B711-4201-B30B-114D88EDD276}.Release|Any CPU.Build.0 = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE7FEFA8-EA23-496F-B772-8EF9CC9A21D9}.Release|Any CPU.Build.0 = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63E5ECF3-C78E-4461-8247-33F3BF019EF1}.Release|Any CPU.Build.0 = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D16666BC-C69F-49D4-96B9-3DC562CC11C4}.Release|Any CPU.Build.0 = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6161C019-58A6-4A72-B3F8-D1A1FD2681E8}.Release|Any CPU.Build.0 = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BA2D501-C1AC-40B4-B540-2EBC9482BA2C}.Release|Any CPU.Build.0 = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B7F6DF9-E9E5-454F-B8F4-3CE332ECB983}.Release|Any CPU.Build.0 = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7317B766-BBD8-402B-82E3-1DBAA376FA64}.Release|Any CPU.Build.0 = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {497698C7-9D59-478F-9394-265915455F00}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {22E2792A-85EF-4497-AA49-1A9C62A33CAC} + EndGlobalSection +EndGlobal From bf3a83550541049f3ed3a3f7b73c312e628143e5 Mon Sep 17 00:00:00 2001 From: "v.zanfir" Date: Sat, 19 Jul 2025 16:30:46 +0300 Subject: [PATCH 591/659] Add tutorial for thesis/amqp --- php-thesis/.gitignore | 2 + php-thesis/Makefile | 50 ++++++++++++++++++++ php-thesis/README.md | 47 +++++++++++++++++++ php-thesis/composer.json | 8 ++++ php-thesis/docker-compose.yaml | 14 ++++++ php-thesis/docker/php/Dockerfile | 35 ++++++++++++++ php-thesis/hello-world/receive.php | 33 ++++++++++++++ php-thesis/hello-world/send.php | 21 +++++++++ php-thesis/pub-sub/emit_log.php | 27 +++++++++++ php-thesis/pub-sub/receive_logs.php | 36 +++++++++++++++ php-thesis/publisher-confirms/batch.php | 34 ++++++++++++++ php-thesis/publisher-confirms/message.php | 31 +++++++++++++ php-thesis/routing/emit_log_direct.php | 33 ++++++++++++++ php-thesis/routing/receive_logs_direct.php | 45 ++++++++++++++++++ php-thesis/rpc/rpc_client.php | 24 ++++++++++ php-thesis/rpc/rpc_server.php | 53 ++++++++++++++++++++++ php-thesis/topics/emit_log_topic.php | 32 +++++++++++++ php-thesis/topics/receive_logs_topic.php | 45 ++++++++++++++++++ php-thesis/work-queue/new_task.php | 29 ++++++++++++ php-thesis/work-queue/worker.php | 37 +++++++++++++++ 20 files changed, 636 insertions(+) create mode 100755 php-thesis/.gitignore create mode 100755 php-thesis/Makefile create mode 100755 php-thesis/README.md create mode 100755 php-thesis/composer.json create mode 100755 php-thesis/docker-compose.yaml create mode 100755 php-thesis/docker/php/Dockerfile create mode 100755 php-thesis/hello-world/receive.php create mode 100755 php-thesis/hello-world/send.php create mode 100644 php-thesis/pub-sub/emit_log.php create mode 100644 php-thesis/pub-sub/receive_logs.php create mode 100644 php-thesis/publisher-confirms/batch.php create mode 100644 php-thesis/publisher-confirms/message.php create mode 100644 php-thesis/routing/emit_log_direct.php create mode 100644 php-thesis/routing/receive_logs_direct.php create mode 100644 php-thesis/rpc/rpc_client.php create mode 100644 php-thesis/rpc/rpc_server.php create mode 100644 php-thesis/topics/emit_log_topic.php create mode 100644 php-thesis/topics/receive_logs_topic.php create mode 100644 php-thesis/work-queue/new_task.php create mode 100644 php-thesis/work-queue/worker.php diff --git a/php-thesis/.gitignore b/php-thesis/.gitignore new file mode 100755 index 00000000..d1502b08 --- /dev/null +++ b/php-thesis/.gitignore @@ -0,0 +1,2 @@ +vendor/ +composer.lock diff --git a/php-thesis/Makefile b/php-thesis/Makefile new file mode 100755 index 00000000..aa4121d8 --- /dev/null +++ b/php-thesis/Makefile @@ -0,0 +1,50 @@ +up: + docker compose up -d + +down: + docker compose down + +php: + docker compose exec php bash + +run-send: + docker compose exec php php hello-world/send.php + +run-receive: + docker compose exec php php hello-world/receive.php + +run-new-task: + docker compose exec php php work-queue/new_task.php "A very hard task which takes two seconds.." + +run-worker: + docker compose exec php php work-queue/worker.php + +run-emit-log: + docker compose exec php php pub-sub/emit_log.php + +run-receive-logs: + docker compose exec php php pub-sub/receive_logs.php + +run-emit-log-direct: + docker compose exec php php routing/emit_log_direct.php warning "Something went wrong" + +run-receive-logs-direct: + docker compose exec php php routing/receive_logs_direct.php info warning error + +run-emit-log-topic: + docker compose exec php php topics/emit_log_topic.php "kern.critical" "A critical kernel error" + +run-receive-logs-topic: + docker compose exec php php topics/receive_logs_topic.php "#" + +run-rpc-server: + docker compose exec php php rpc/rpc_server.php + +run-rpc-client: + docker compose exec php php rpc/rpc_client.php + +run-confirms-message: + docker compose exec php php publisher-confirms/message.php + +run-confirms-batch: + docker compose exec php php publisher-confirms/batch.php diff --git a/php-thesis/README.md b/php-thesis/README.md new file mode 100755 index 00000000..51d21ba6 --- /dev/null +++ b/php-thesis/README.md @@ -0,0 +1,47 @@ +# Non-blocking php code for RabbitMQ tutorials based on thesis/amqp + +Run rabbitmq server and php container with `make up`. + +## Code + +[Tutorial one: "Hello World!"](https://www.rabbitmq.com/tutorials/tutorial-one-php): +```shell +make run-send +make run-receive +``` + +[Tutorial two: Work Queues](https://www.rabbitmq.com/tutorials/tutorial-two-php): +```shell +make run-new-task +make run-worker +``` + +[Tutorial three: Publish/Subscribe](https://www.rabbitmq.com/tutorials/tutorial-three-php) +```shell +make run-emit-log +make run-receive-logs +``` + +[Tutorial four: Routing](https://www.rabbitmq.com/tutorials/tutorial-four-php): +```shell +make run-emit-log-direct +make run-receive-logs-direct +``` + +[Tutorial five: Topics](https://www.rabbitmq.com/tutorials/tutorial-five-php): +```shell +make run-emit-log-topic +make run-receive-logs-topic +``` + +[Tutorial six: RPC](https://www.rabbitmq.com/tutorials/tutorial-six-php): +```shell +make run-rpc-server +make run-rpc-client +``` + +[Tutorial seven: Publisher Confirms](https://www.rabbitmq.com/tutorials/tutorial-seven-php): +```shell +make run-rpc-server +make run-rpc-client +``` diff --git a/php-thesis/composer.json b/php-thesis/composer.json new file mode 100755 index 00000000..7775cf83 --- /dev/null +++ b/php-thesis/composer.json @@ -0,0 +1,8 @@ +{ + "require": { + "thesis/amqp": "^1.0" + }, + "require-dev": { + "symfony/var-dumper": "^7.3" + } +} diff --git a/php-thesis/docker-compose.yaml b/php-thesis/docker-compose.yaml new file mode 100755 index 00000000..5fc57bde --- /dev/null +++ b/php-thesis/docker-compose.yaml @@ -0,0 +1,14 @@ +services: + php: + build: + dockerfile: docker/php/Dockerfile + volumes: + - .:/app:cached + command: sh -c 'trap "exit 0" TERM; tail -f /dev/null & wait' + + rabbitmq: + image: rabbitmq:4.0-management-alpine + restart: always + ports: + - "127.0.0.1:5672:5672" + - "127.0.0.1:15672:15672" diff --git a/php-thesis/docker/php/Dockerfile b/php-thesis/docker/php/Dockerfile new file mode 100755 index 00000000..79a5b210 --- /dev/null +++ b/php-thesis/docker/php/Dockerfile @@ -0,0 +1,35 @@ +FROM composer:2.8 AS composer +FROM mlocati/php-extension-installer:2.7 AS php-extension-installer +FROM php:8.3-cli-bookworm AS php-dev + +COPY --from=composer /usr/bin/composer /usr/bin/ +COPY --from=php-extension-installer /usr/bin/install-php-extensions /usr/bin/ + +ARG UID=10001 +ARG GID=10001 + +RUN <channel(); +$channel->queueDeclare('hello'); + +echo " [*] Waiting for messages. To exit press CTRL+C\n"; + +$channel->consume( + static function (DeliveryMessage $delivery): void { + echo " [x] Received {$delivery->message->body} \n"; + }, + queue: 'hello', + noAck: true, +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); diff --git a/php-thesis/hello-world/send.php b/php-thesis/hello-world/send.php new file mode 100755 index 00000000..3a45d984 --- /dev/null +++ b/php-thesis/hello-world/send.php @@ -0,0 +1,21 @@ +channel(); + +$channel->publish(new Message('Hello World!'), routingKey: 'hello'); + +$client->disconnect(); diff --git a/php-thesis/pub-sub/emit_log.php b/php-thesis/pub-sub/emit_log.php new file mode 100644 index 00000000..f1c9919c --- /dev/null +++ b/php-thesis/pub-sub/emit_log.php @@ -0,0 +1,27 @@ +channel(); +$channel->exchangeDeclare(exchange: 'logs', exchangeType: 'fanout'); + +$channel->publish( + new Message( + body: $data = implode(' ', array_slice($argv, 1)) ?: 'info: Hello World!', + ), + exchange: 'logs', +); + +$client->disconnect(); diff --git a/php-thesis/pub-sub/receive_logs.php b/php-thesis/pub-sub/receive_logs.php new file mode 100644 index 00000000..b49a237b --- /dev/null +++ b/php-thesis/pub-sub/receive_logs.php @@ -0,0 +1,36 @@ +channel(); + +$channel->exchangeDeclare(exchange: 'logs', exchangeType: 'fanout'); +$queue = $channel->queueDeclare(exclusive: true); +$channel->queueBind(queue: $queue->name, exchange: 'logs'); + +echo " [*] Waiting for logs. To exit press CTRL+C\n"; + +$channel->consume( + callback: static function (DeliveryMessage $delivery): void { + echo " [x] {$delivery->message->body} \n"; + }, + queue: $queue->name, + noAck: true, +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); diff --git a/php-thesis/publisher-confirms/batch.php b/php-thesis/publisher-confirms/batch.php new file mode 100644 index 00000000..2d95f7ba --- /dev/null +++ b/php-thesis/publisher-confirms/batch.php @@ -0,0 +1,34 @@ +channel(); +$channel->confirmSelect(); + +$queue = $channel->queueDeclare(exclusive: true); + +$channel + ->publishBatch(array_map( + static fn(int $number): PublishMessage => new PublishMessage(new Message("{$number}"), routingKey: $queue->name), + range(1, 100), + )) + ->await() + ->ensureAllPublished() +; + +echo "Messages sent\n"; + +$client->disconnect(); diff --git a/php-thesis/publisher-confirms/message.php b/php-thesis/publisher-confirms/message.php new file mode 100644 index 00000000..72eed709 --- /dev/null +++ b/php-thesis/publisher-confirms/message.php @@ -0,0 +1,31 @@ +channel(); +$channel->confirmSelect(); + +$queue = $channel->queueDeclare(exclusive: true); + +$channel + ->publish( + new Message('Hello World!'), + routingKey: $queue->name, + ) + ?->await(); + +echo "Message sent\n"; + +$client->disconnect(); diff --git a/php-thesis/routing/emit_log_direct.php b/php-thesis/routing/emit_log_direct.php new file mode 100644 index 00000000..226c4afa --- /dev/null +++ b/php-thesis/routing/emit_log_direct.php @@ -0,0 +1,33 @@ +channel(); + +$channel->exchangeDeclare(exchange: 'direct_logs', exchangeType: 'direct'); + +$severity = $argv[1] ?? 'info'; + +$channel->publish( + new Message( + body: $data = implode(' ', array_slice($argv, 2)) ?: 'Hello World!', + ), + exchange: 'direct_logs', + routingKey: $severity, +); + +echo " [x] Sent {$severity}: {$data} \n"; + +$client->disconnect(); diff --git a/php-thesis/routing/receive_logs_direct.php b/php-thesis/routing/receive_logs_direct.php new file mode 100644 index 00000000..e6bcc709 --- /dev/null +++ b/php-thesis/routing/receive_logs_direct.php @@ -0,0 +1,45 @@ +channel(); + +$channel->exchangeDeclare(exchange: 'direct_logs', exchangeType: 'direct'); +$queue = $channel->queueDeclare(exclusive: true); + +$severities = array_slice($argv, 1); +if ($severities === []) { + file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n"); + exit(1); +} + +foreach ($severities as $severity) { + $channel->queueBind(queue: $queue->name, exchange: 'direct_logs', routingKey: $severity); +} + +echo " [*] Waiting for logs. To exit press CTRL+C\n"; + +$channel->consume( + callback: static function (DeliveryMessage $delivery): void { + echo " [x] {$delivery->routingKey}: {$delivery->message->body} \n"; + }, + queue: $queue->name, + noAck: true, +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); diff --git a/php-thesis/rpc/rpc_client.php b/php-thesis/rpc/rpc_client.php new file mode 100644 index 00000000..e24ec424 --- /dev/null +++ b/php-thesis/rpc/rpc_client.php @@ -0,0 +1,24 @@ +request( + new Message('30'), + routingKey: 'rpc_queue', +); + +echo " [.] Got {$response->body} \n"; diff --git a/php-thesis/rpc/rpc_server.php b/php-thesis/rpc/rpc_server.php new file mode 100644 index 00000000..5f9f993e --- /dev/null +++ b/php-thesis/rpc/rpc_server.php @@ -0,0 +1,53 @@ +channel(); +$channel->queueDeclare('rpc_queue'); + +echo " [x] Awaiting RPC requests\n"; + +$channel->qos(prefetchCount: 1); +$channel->consume( + callback: static function (DeliveryMessage $delivery): void { + $n = intval($delivery->message->body); + echo " [.] fib({$n})\n"; + + $delivery->reply( + new Message((string) fib($n)), + ); + }, + queue: 'rpc_queue', + noAck: true, +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); diff --git a/php-thesis/topics/emit_log_topic.php b/php-thesis/topics/emit_log_topic.php new file mode 100644 index 00000000..0cda74b9 --- /dev/null +++ b/php-thesis/topics/emit_log_topic.php @@ -0,0 +1,32 @@ +channel(); +$channel->exchangeDeclare(exchange: 'topics_logs', exchangeType: 'topic'); + +$routingKey = $argv[1] ?? 'anonymous.info'; + +$channel->publish( + message: new Message( + body: $data = implode(' ', array_slice($argv, 2)) ?: 'Hello World!', + ), + exchange: 'topics_logs', + routingKey: $routingKey, +); + +echo " [x] Sent {$routingKey}: {$data} \n"; + +$client->disconnect(); diff --git a/php-thesis/topics/receive_logs_topic.php b/php-thesis/topics/receive_logs_topic.php new file mode 100644 index 00000000..7e7a6ff2 --- /dev/null +++ b/php-thesis/topics/receive_logs_topic.php @@ -0,0 +1,45 @@ +channel(); + +$channel->exchangeDeclare(exchange: 'topics_logs', exchangeType: 'topic'); +$queue = $channel->queueDeclare(exclusive: true); + +$bindingKeys = array_slice($argv, 1); +if ($bindingKeys === []) { + file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n"); + exit(1); +} + +foreach ($bindingKeys as $bindingKey) { + $channel->queueBind(queue: $queue->name, exchange: 'topics_logs', routingKey: $bindingKey); +} + +echo " [*] Waiting for logs. To exit press CTRL+C\n"; + +$channel->consume( + callback: static function (DeliveryMessage $delivery): void { + echo " [x] {$delivery->routingKey}: {$delivery->message->body} \n"; + }, + queue: $queue->name, + noAck: true, +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); diff --git a/php-thesis/work-queue/new_task.php b/php-thesis/work-queue/new_task.php new file mode 100644 index 00000000..50b2ca07 --- /dev/null +++ b/php-thesis/work-queue/new_task.php @@ -0,0 +1,29 @@ +channel(); +$channel->queueDeclare('task_queue', durable: true); + +$channel->publish( + new Message( + body: $data = implode(' ', array_slice($argv, 1)) ?: 'Hello World!', + deliveryMode: DeliveryMode::Persistent, + ), + routingKey: 'task_queue', +); + +echo " [x] Sent {$data} \n"; diff --git a/php-thesis/work-queue/worker.php b/php-thesis/work-queue/worker.php new file mode 100644 index 00000000..1658ba6d --- /dev/null +++ b/php-thesis/work-queue/worker.php @@ -0,0 +1,37 @@ +channel(); +$channel->queueDeclare('task_queue', durable: true); + +echo " [*] Waiting for messages. To exit press CTRL+C\n"; + +$channel->qos(prefetchCount: 1); +$channel->consume( + callback: static function (DeliveryMessage $delivery): void { + echo " [x] Received {$delivery->message->body} \n"; + delay(substr_count($delivery->message->body, '.')); + echo " [x] Done\n"; + $delivery->ack(); + }, + queue: 'task_queue', +); + +trapSignal([\SIGTERM, \SIGINT]); + +$client->disconnect(); From 3403c80709d9db5b54a317daf406596fe0c042c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 18:47:06 +0000 Subject: [PATCH 592/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 5.13.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 2fb458a8..c7e5a7ba 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.3' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.3' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } test { From f90d3b3c2fbeac30ca2dd47855590aa66ec3b832 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 18:53:04 +0000 Subject: [PATCH 593/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 5.13.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 2fb458a8..c7e5a7ba 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.3' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.3' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } test { From 8a933bedef540d56cb2ae44518bd086f4756b690 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 19:52:27 +0000 Subject: [PATCH 594/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.5 to 3.2.6. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.5...v3.2.6) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-version: 3.2.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index d56b31d1..65039831 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.5 + 3.2.6 From 59c4af9d28430eaf12f5cbe93289a23958a7e7fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 20:16:01 +0000 Subject: [PATCH 595/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.3 to 5.13.4. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.3...r5.13.4) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.13.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 5b5d1096..69ad69d5 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.13.3 + 5.13.4 test From 0fbd8f3afd8ffa66ac0e96a7a87bdb9d2ef7f79d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:19:57 +0000 Subject: [PATCH 596/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.25.0 to 5.26.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.25.0...v5.26.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.26.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index c7e5a7ba..f360446a 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.25.0' + implementation 'com.rabbitmq:amqp-client:5.26.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.3' testImplementation 'org.mockito:mockito-core:5.18.0' From 0df7daced2ebfed3ac538904bfe9f324730d75aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:35:12 +0000 Subject: [PATCH 597/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 1.1.0 to 1.2.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v1.1.0...v1.2.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-version: 1.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 113e2e04..ee2bd16d 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 1.1.0 + 1.2.0 org.slf4j From cc4ea3f8a32937d6b65cb05a65ce822ca2c9e613 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:48:22 +0000 Subject: [PATCH 598/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.25.0 to 5.26.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.25.0...v5.26.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.26.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 69ad69d5..5b346a1b 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.25.0 + 5.26.0 From 004ae29c45286ca2e56c266946b293e61d194905 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 17:08:59 +0000 Subject: [PATCH 599/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.3 to 3.5.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index c1e69eb6..0275f61a 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.3 + 3.5.4 From 96b664453436d27b3c6c4de4bafcbfe3d883e472 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 17:53:06 +0000 Subject: [PATCH 600/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 65039831..32423264 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.3 + 3.5.4 From 48901690a40514529a88961cd48cf36c60cae1b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:10:09 +0000 Subject: [PATCH 601/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.3 to 3.27.4. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.3...assertj-build-3.27.4) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 5b346a1b..58e54418 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.3 + 3.27.4 test From b729a17a81e0c3e14665e6eea0ca27f2c1bd584a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:27:20 +0000 Subject: [PATCH 602/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.3 to 3.27.4. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.3...assertj-build-3.27.4) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index f360446a..b5149d3b 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.26.0' implementation 'org.slf4j:slf4j-simple:2.0.17' - testImplementation 'org.assertj:assertj-core:3.27.3' + testImplementation 'org.assertj:assertj-core:3.27.4' testImplementation 'org.mockito:mockito-core:5.18.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' From 4e828f76661964841dd38d2a07e2e17e60af426f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:11:23 +0000 Subject: [PATCH 603/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.18.0 to 5.19.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.18.0...v5.19.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.19.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 58e54418..b592e841 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.18.0 + 5.19.0 test From d28823afefe38eee1279faf55e0ab12b4bae2d2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:56:54 +0000 Subject: [PATCH 604/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.18.0 to 5.19.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.18.0...v5.19.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index b5149d3b..4611b62f 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.26.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.4' - testImplementation 'org.mockito:mockito-core:5.18.0' + testImplementation 'org.mockito:mockito-core:5.19.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' From f909c19b86a1fa2a1106c0cebd325d0773b0c993 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:23:41 +0000 Subject: [PATCH 605/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.4 to 3.5.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 32423264..7669b565 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.4 + 3.5.5 From f67ca2d3cb4d3bbac4262565baf110adb34bc366 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:04:50 +0000 Subject: [PATCH 606/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.4 to 3.5.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 0275f61a..15bdabe1 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.4 + 3.5.5 From 664560b5a8a9d3bd1c6923a032eba4a84e0a0ac5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 08:49:49 +0000 Subject: [PATCH 607/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.33 to 4.2.34. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.33...v4.2.34) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.34 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index b592e841..505a0927 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.33 + 4.2.34 test From bf5a84c436015fcaef2851b9467fdfb8cb4f1d0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 10:28:41 +0000 Subject: [PATCH 608/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.33 to 4.2.34. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.33...v4.2.34) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.34 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 4611b62f..f0205ad1 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.4' testImplementation 'org.mockito:mockito-core:5.19.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.33' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.34' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } From a79815d882e8c37bb167aed9ba0fbcabb69f0741 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:06:49 +0000 Subject: [PATCH 609/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.34 to 4.2.35. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.34...v4.2.35) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.35 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 505a0927..7babe473 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.34 + 4.2.35 test From 36d68ca35d6e7621ccb090106fc33635b4d562d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:09:18 +0000 Subject: [PATCH 610/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.34 to 4.2.35. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.34...v4.2.35) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.35 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index f0205ad1..0f5895f2 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.4' testImplementation 'org.mockito:mockito-core:5.19.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.34' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.35' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } From ac2842e1f6f32275db217a4f70990255ab5064c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 06:20:50 +0000 Subject: [PATCH 611/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.35 to 4.2.36. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.35...v4.2.36) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.36 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 0f5895f2..47bfc40b 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.4' testImplementation 'org.mockito:mockito-core:5.19.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.35' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.36' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } From 718b50b0ce4644780c68e4fd397e2fa526a19207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 06:35:33 +0000 Subject: [PATCH 612/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.35 to 4.2.36. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.35...v4.2.36) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.36 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 7babe473..18f14687 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.35 + 4.2.36 test From 46039a845c98d4cb20c3ecfb95da47d38e96ee56 Mon Sep 17 00:00:00 2001 From: Michal Kuratczyk Date: Fri, 12 Sep 2025 10:43:31 +0200 Subject: [PATCH 613/659] Add Go AMQP 1.0 direct reply-to example --- go/rpc_amqp10.go | 232 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 go/rpc_amqp10.go diff --git a/go/rpc_amqp10.go b/go/rpc_amqp10.go new file mode 100644 index 00000000..3e89ca49 --- /dev/null +++ b/go/rpc_amqp10.go @@ -0,0 +1,232 @@ +package main + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/Azure/go-amqp" +) + +const ( + amqpURL = "amqp://guest:guest@localhost:5672/" + // Request queue name for RPC requests + requestQueue = "rpc-requests" +) + +// RPC Server - handles ping requests and sends pong replies +func rpcServer(ctx context.Context) error { + // Connect to RabbitMQ + conn, err := amqp.Dial(ctx, amqpURL, nil) + if err != nil { + return fmt.Errorf("failed to connect to RabbitMQ: %w", err) + } + defer conn.Close() + + // Create a session + session, err := conn.NewSession(ctx, nil) + if err != nil { + return fmt.Errorf("failed to create session: %w", err) + } + defer session.Close(ctx) + + // Create a receiver for the request queue + receiver, err := session.NewReceiver(ctx, requestQueue, nil) + if err != nil { + return fmt.Errorf("failed to create receiver: %w", err) + } + defer receiver.Close(ctx) + + log.Println("RPC Server: Started and listening for requests...") + + for { + select { + case <-ctx.Done(): + log.Println("RPC Server: Shutting down...") + return nil + default: + // Receive a request message + msg, err := receiver.Receive(ctx, nil) + if err != nil { + log.Printf("RPC Server: Error receiving message: %v", err) + continue + } + + // Accept the message + err = receiver.AcceptMessage(ctx, msg) + if err != nil { + log.Printf("RPC Server: Error accepting message: %v", err) + continue + } + + // Extract message properties + + messageID := msg.Properties.MessageID.(string) + replyTo := *msg.Properties.ReplyTo + + log.Printf("RPC Server: Received ping request (ID: %s, ReplyTo: %s)", messageID, replyTo) + + // Check if we have a reply-to address + if replyTo == "" { + log.Println("RPC Server: No reply-to address, skipping reply") + continue + } + + // Create a sender for the reply + sender, err := session.NewSender(ctx, replyTo, nil) + if err != nil { + log.Printf("RPC Server: Error creating sender for reply: %v", err) + continue + } + + // Create the pong reply message + replyMsg := &amqp.Message{ + Properties: &amqp.MessageProperties{ + CorrelationID: messageID, + }, + Data: [][]byte{[]byte("pong")}, + } + + // Send the reply + err = sender.Send(ctx, replyMsg, nil) + if err != nil { + log.Printf("RPC Server: Error sending reply: %v", err) + } else { + log.Printf("RPC Server: Sent pong reply (CorrelationID: %s)", messageID) + } + + // Close the sender + sender.Close(ctx) + } + } +} + +// RPC Client - sends ping requests using Direct Reply-To +func rpcClient(ctx context.Context) error { + // Connect to RabbitMQ + conn, err := amqp.Dial(ctx, amqpURL, nil) + if err != nil { + return fmt.Errorf("failed to connect to RabbitMQ: %w", err) + } + defer conn.Close() + + // Create a session + session, err := conn.NewSession(ctx, nil) + if err != nil { + return fmt.Errorf("failed to create session: %w", err) + } + defer session.Close(ctx) + + // Create a receiver for Direct Reply-To + receiver, err := session.NewReceiver(ctx, "", &amqp.ReceiverOptions{ + SourceCapabilities: []string{"rabbitmq:volatile-queue"}, + SourceExpiryPolicy: amqp.ExpiryPolicyLinkDetach, + DynamicAddress: true, + RequestedSenderSettleMode: amqp.SenderSettleModeSettled.Ptr(), + }) + if err != nil { + return fmt.Errorf("failed to create Direct Reply-To receiver: %w", err) + } + defer receiver.Close(ctx) + + // Get the generated reply address from the receiver + replyAddress := receiver.Address() + log.Printf("RPC Client: Generated reply address: %s", replyAddress) + + // Create a sender for requests + sender, err := session.NewSender(ctx, requestQueue, nil) + if err != nil { + return fmt.Errorf("failed to create sender: %w", err) + } + defer sender.Close(ctx) + + log.Println("RPC Client: Started and ready to send requests...") + + requestID := 0 + ticker := time.NewTicker(1 * time.Second) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + log.Println("RPC Client: Shutting down...") + return nil + case <-ticker.C: + requestID++ + messageID := fmt.Sprintf("ping-%d", requestID) + + // Create the ping request message + requestMsg := &amqp.Message{ + Properties: &amqp.MessageProperties{ + MessageID: messageID, + ReplyTo: &replyAddress, + }, + Data: [][]byte{[]byte("ping")}, + } + + // Send the request + err = sender.Send(ctx, requestMsg, nil) + if err != nil { + log.Printf("RPC Client: Error sending request: %v", err) + continue + } + + log.Printf("RPC Client: Sent ping request (ID: %s)", messageID) + + // Try to receive the reply with a timeout + replyCtx, cancel := context.WithTimeout(ctx, 5*time.Second) + replyMsg, err := receiver.Receive(replyCtx, nil) + cancel() + + if err != nil { + log.Printf("RPC Client: Error receiving reply for %s: %v", messageID, err) + continue + } + + // Accept the reply message + err = receiver.AcceptMessage(ctx, replyMsg) + if err != nil { + log.Printf("RPC Client: Error accepting reply: %v", err) + continue + } + + // Extract correlation ID and payload + correlationID := "" + if replyMsg.Properties != nil && replyMsg.Properties.CorrelationID != nil { + correlationID = replyMsg.Properties.CorrelationID.(string) + } + + replyPayload := string(replyMsg.Data[0]) + log.Printf("RPC Client: Received reply - %s (CorrelationID: %s)", replyPayload, correlationID) + } + } +} + +func main() { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + log.Println("Starting Direct Reply-To RPC example...") + log.Println("Make sure RabbitMQ is running on localhost:5672") + + // Start the RPC server in a goroutine + go func() { + if err := rpcServer(ctx); err != nil { + log.Printf("RPC Server error: %v", err) + cancel() // Cancel context to stop the client as well + } + }() + + // Start the RPC client in a goroutine + go func() { + if err := rpcClient(ctx); err != nil { + log.Printf("RPC Client error: %v", err) + cancel() // Cancel context to stop the server as well + } + }() + + // Wait for context cancellation (Ctrl+C or error) + <-ctx.Done() + log.Println("Application shutting down...") +} From b43b4ba94802f1d4621a186a4a0d90945b7f76f0 Mon Sep 17 00:00:00 2001 From: Michal Kuratczyk Date: Fri, 12 Sep 2025 10:45:26 +0200 Subject: [PATCH 614/659] Go: Add AMQP 1.0 RPC to the README --- go/README.md | 3 +++ go/go.mod | 2 ++ go/go.sum | 2 ++ 3 files changed, 7 insertions(+) diff --git a/go/README.md b/go/README.md index 280b533a..e8e0b4bd 100644 --- a/go/README.md +++ b/go/README.md @@ -45,4 +45,7 @@ Code examples are executed via `go run`: go run rpc_server.go go run rpc_client.go 10 +[AMQP 1.0 Direct Reply-To RPC](https://www.rabbitmq.com/docs/next/direct-reply-to) + go run rpc_amqp10.go + To learn more, see [`rabbitmq/amqp091-go`](https://github.com/rabbitmq/amqp091-go). diff --git a/go/go.mod b/go/go.mod index 31d7a2c1..af63a831 100644 --- a/go/go.mod +++ b/go/go.mod @@ -3,3 +3,5 @@ module github.com/rabbitmq/rabbitmq-tutorials go 1.17 require github.com/rabbitmq/amqp091-go v1.9.0 + +require github.com/Azure/go-amqp v1.5.0 // indirect diff --git a/go/go.sum b/go/go.sum index de48a7f8..2e3ddecc 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,3 +1,5 @@ +github.com/Azure/go-amqp v1.5.0 h1:GRiQK1VhrNFbyx5VlmI6BsA1FCp27W5rb9kxOZScnTo= +github.com/Azure/go-amqp v1.5.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= 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/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From d6f2e3c69fc029d486d4d2ef38aab62f0d463f62 Mon Sep 17 00:00:00 2001 From: Michal Kuratczyk Date: Fri, 12 Sep 2025 10:50:58 +0200 Subject: [PATCH 615/659] README formatting --- go/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/go/README.md b/go/README.md index e8e0b4bd..149e8afd 100644 --- a/go/README.md +++ b/go/README.md @@ -46,6 +46,7 @@ Code examples are executed via `go run`: go run rpc_client.go 10 [AMQP 1.0 Direct Reply-To RPC](https://www.rabbitmq.com/docs/next/direct-reply-to) + go run rpc_amqp10.go To learn more, see [`rabbitmq/amqp091-go`](https://github.com/rabbitmq/amqp091-go). From d5ca8baae43c9c10421f1a0838fba4917860cd2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:43:45 +0000 Subject: [PATCH 616/659] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.3 to 3.5.4. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.3...surefire-3.5.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-version: 3.5.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 18f14687..a99bd68d 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -76,7 +76,7 @@ maven-surefire-plugin - 3.5.3 + 3.5.4 ${test-arguments} From c0a4a2ab7150c90f8cdebf57a8584c45ffdd0b99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:44:32 +0000 Subject: [PATCH 617/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.6 to 3.2.7. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.6...v3.2.7) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-version: 3.2.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 7669b565..540a5d0a 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.6 + 3.2.7 From bedc727bcba648020a1f242468d8c217cbfd9c00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:08:04 +0000 Subject: [PATCH 618/659] chore(deps-dev): bump io.dropwizard.metrics:metrics-core in /java-mvn Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.36 to 4.2.37. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.36...v4.2.37) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.37 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a99bd68d..f9ef0a35 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -45,7 +45,7 @@ io.dropwizard.metrics metrics-core - 4.2.36 + 4.2.37 test From 84c2a2d516d468c7d89ee94e9204ce2c76210d41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:10:12 +0000 Subject: [PATCH 619/659] chore(deps): bump io.dropwizard.metrics:metrics-core in /java-gradle Bumps [io.dropwizard.metrics:metrics-core](https://github.com/dropwizard/metrics) from 4.2.36 to 4.2.37. - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.36...v4.2.37) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-version: 4.2.37 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 47bfc40b..3f3332da 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.4' testImplementation 'org.mockito:mockito-core:5.19.0' - testImplementation 'io.dropwizard.metrics:metrics-core:4.2.36' + testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } From f65fdf61cd1daa94cd934abc61cd304ee387a741 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:08:41 +0000 Subject: [PATCH 620/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.5 to 3.5.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 15bdabe1..5e890453 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.5 + 3.5.6 From 42fddee101b35f93f783bf7ba406f29b6850da2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:09:02 +0000 Subject: [PATCH 621/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.5 to 3.5.6. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 540a5d0a..32e0879b 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.5 + 3.5.6 From fce56bacdff380125cd7f033416457de52a637d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:07:58 +0000 Subject: [PATCH 622/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.4 to 3.27.5. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.4...assertj-build-3.27.5) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.5 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index f9ef0a35..0cc933bf 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.4 + 3.27.5 test From 832525ef21d7c23573686e12775a2fe713d5e187 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:10:11 +0000 Subject: [PATCH 623/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.4 to 3.27.5. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.4...assertj-build-3.27.5) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 3f3332da..ee845397 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.26.0' implementation 'org.slf4j:slf4j-simple:2.0.17' - testImplementation 'org.assertj:assertj-core:3.27.4' + testImplementation 'org.assertj:assertj-core:3.27.5' testImplementation 'org.mockito:mockito-core:5.19.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' From feea7fdf200ffd1c730028e1a70cddd5e6161e47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:18:30 +0000 Subject: [PATCH 624/659] chore(deps-dev): bump org.assertj:assertj-core in /java-mvn Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.5 to 3.27.6. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.5...assertj-build-3.27.6) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0cc933bf..ca6d7584 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -52,7 +52,7 @@ org.assertj assertj-core - 3.27.5 + 3.27.6 test From 3d9c926aa6a7c76818316543233c4197edb779f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:18:43 +0000 Subject: [PATCH 625/659] chore(deps-dev): bump org.mockito:mockito-core in /java-mvn Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.19.0 to 5.20.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.19.0...v5.20.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.20.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0cc933bf..d4a18a10 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -59,7 +59,7 @@ org.mockito mockito-core - 5.19.0 + 5.20.0 test From 6135627bec7697dc15b0a1b6d8c2a7a2656a6090 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:19:56 +0000 Subject: [PATCH 626/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.0 to 3.14.1. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-version: 3.14.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0cc933bf..ed3753bc 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -69,7 +69,7 @@ maven-compiler-plugin - 3.14.0 + 3.14.1 11 From 3a9f2257de10dd49904628c5362f99adda9123b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:22:34 +0000 Subject: [PATCH 627/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.0 to 3.14.1. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-version: 3.14.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 5e890453..40f35343 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -44,7 +44,7 @@ maven-compiler-plugin - 3.14.0 + 3.14.1 17 From e29aae6ef947a6b3ee1c46fc8750733d28faa6d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:26:09 +0000 Subject: [PATCH 628/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.0 to 3.14.1. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-version: 3.14.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index ee2bd16d..98896b8b 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -31,7 +31,7 @@ maven-compiler-plugin - 3.14.0 + 3.14.1 11 11 From 26cb0ccf82e4953261a465a7999d0dd210015ede Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:29:00 +0000 Subject: [PATCH 629/659] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.0 to 3.14.1. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-version: 3.14.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 32e0879b..d428b4c8 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -49,7 +49,7 @@ maven-compiler-plugin - 3.14.0 + 3.14.1 17 From ff17fab95afffa31b3656614240d071a3108b83e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:39:17 +0000 Subject: [PATCH 630/659] chore(deps): bump org.mockito:mockito-core in /java-gradle Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.19.0 to 5.20.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.19.0...v5.20.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.20.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index ee845397..db716be2 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation 'com.rabbitmq:amqp-client:5.26.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.5' - testImplementation 'org.mockito:mockito-core:5.19.0' + testImplementation 'org.mockito:mockito-core:5.20.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' From d8769c5f72e9cf6fbc48424c11f7f8b4d9b28de2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:10:49 +0000 Subject: [PATCH 631/659] chore(deps): bump org.junit.jupiter:junit-jupiter-engine in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit-framework) from 5.13.4 to 6.0.0. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.4...r6.0.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index db716be2..53fc0ef1 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.5' testImplementation 'org.mockito:mockito-core:5.20.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' + testImplementation 'org.junit.jupiter:junit-jupiter-api:6.0.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:6.0.0' } test { From 00fc9147c76310d7e15555e06c6458abfe7a4642 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:10:54 +0000 Subject: [PATCH 632/659] chore(deps): bump org.junit.jupiter:junit-jupiter-api in /java-gradle Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit-framework) from 5.13.4 to 6.0.0. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.4...r6.0.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index db716be2..53fc0ef1 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -15,8 +15,8 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.27.5' testImplementation 'org.mockito:mockito-core:5.20.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.13.4' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.13.4' + testImplementation 'org.junit.jupiter:junit-jupiter-api:6.0.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:6.0.0' } test { From cff74c630e0012b70c5cbf593375828221b64eef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:11:04 +0000 Subject: [PATCH 633/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.18 to 1.5.19. - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/commits) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-version: 1.5.19 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index ee2bd16d..3723b6bc 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.18 + 1.5.19 From dcd72b3c97937a40fa5efe5009c6320741e755b8 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Thu, 2 Oct 2025 12:49:06 -0700 Subject: [PATCH 634/659] Add example code to Java publisher confirms tutorial For now, the Java client doesn't have built-in publisher confirmation tracking or publisher rate-limiting based on confirmations, so I have added example code to show how to do both in the PublisherConfirms.java class, via the new `handlePublishConfirmsWithAdaptiveThrottling()` method. It implements pretty much the same algorithm used by the .NET client in the latest release to track confirms and rate-limit publishes. --- java/PublisherConfirms.java | 124 ++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/java/PublisherConfirms.java b/java/PublisherConfirms.java index a26d68f8..ba9a8c67 100644 --- a/java/PublisherConfirms.java +++ b/java/PublisherConfirms.java @@ -4,6 +4,7 @@ import com.rabbitmq.client.ConnectionFactory; import java.time.Duration; +import java.util.LinkedList; import java.util.UUID; import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; @@ -21,10 +22,16 @@ static Connection createConnection() throws Exception { return cf.newConnection(); } + static final int MAX_OUTSTANDING = 1000; // Confirmation window + static final int THROTTLING_PERCENTAGE = 50; // Start throttling at 50% capacity + static final int MAX_DELAY_MS = 1000; // Maximum delay in milliseconds + public static void main(String[] args) throws Exception { publishMessagesIndividually(); publishMessagesInBatch(); handlePublishConfirmsAsynchronously(); + handlePublishConfirmsWithWindow(); + handlePublishConfirmsWithAdaptiveThrottling(); } static void publishMessagesIndividually() throws Exception { @@ -125,6 +132,123 @@ static void handlePublishConfirmsAsynchronously() throws Exception { } } + static void handlePublishConfirmsWithWindow() throws Exception { + try (Connection connection = createConnection()) { + Channel ch = connection.createChannel(); + + String queue = UUID.randomUUID().toString(); + ch.queueDeclare(queue, false, false, true, null); + ch.confirmSelect(); + + ConcurrentNavigableMap outstandingConfirms = new ConcurrentSkipListMap<>(); + + ConfirmCallback cleanOutstandingConfirms = (sequenceNumber, multiple) -> { + if (multiple) { + outstandingConfirms.headMap(sequenceNumber, true).clear(); + } else { + outstandingConfirms.remove(sequenceNumber); + } + synchronized (outstandingConfirms) { + outstandingConfirms.notifyAll(); + } + }; + + ch.addConfirmListener(cleanOutstandingConfirms, (sequenceNumber, multiple) -> { + System.err.format("Message nacked. Sequence: %d, multiple: %b%n", sequenceNumber, multiple); + cleanOutstandingConfirms.handle(sequenceNumber, multiple); + }); + + long start = System.nanoTime(); + for (int i = 0; i < MESSAGE_COUNT; i++) { + // Wait if window is full + synchronized (outstandingConfirms) { + while (outstandingConfirms.size() >= MAX_OUTSTANDING) { + outstandingConfirms.wait(); + } + } + + String body = String.valueOf(i); + outstandingConfirms.put(ch.getNextPublishSeqNo(), body); + ch.basicPublish("", queue, null, body.getBytes()); + } + + // Wait for remaining confirmations + synchronized (outstandingConfirms) { + while (!outstandingConfirms.isEmpty()) { + outstandingConfirms.wait(); + } + } + + long end = System.nanoTime(); + System.out.format("Published %,d messages with confirmation window in %,d ms%n", + MESSAGE_COUNT, Duration.ofNanos(end - start).toMillis()); + } + } + + static void handlePublishConfirmsWithAdaptiveThrottling() throws Exception { + try (Connection connection = createConnection()) { + Channel ch = connection.createChannel(); + + String queue = UUID.randomUUID().toString(); + ch.queueDeclare(queue, false, false, true, null); + ch.confirmSelect(); + + LinkedList outstandingConfirms = new LinkedList<>(); + int throttlingThreshold = MAX_OUTSTANDING * THROTTLING_PERCENTAGE / 100; + + ConfirmCallback cleanOutstandingConfirms = (sequenceNumber, multiple) -> { + synchronized (outstandingConfirms) { + if (multiple) { + outstandingConfirms.removeIf(seqNo -> seqNo <= sequenceNumber); + } else { + outstandingConfirms.removeFirstOccurrence(sequenceNumber); + } + outstandingConfirms.notifyAll(); + } + }; + + ch.addConfirmListener(cleanOutstandingConfirms, (sequenceNumber, multiple) -> { + System.err.format("Message nacked. Sequence: %d, multiple: %b%n", sequenceNumber, multiple); + cleanOutstandingConfirms.handle(sequenceNumber, multiple); + }); + + long start = System.nanoTime(); + for (int i = 0; i < MESSAGE_COUNT; i++) { + String body = String.valueOf(i); + + synchronized (outstandingConfirms) { + while (outstandingConfirms.size() >= MAX_OUTSTANDING) { + outstandingConfirms.wait(); + } + + int availablePermits = MAX_OUTSTANDING - outstandingConfirms.size(); + if (availablePermits < throttlingThreshold) { + double percentageUsed = 1.0 - (availablePermits / (double) MAX_OUTSTANDING); + int delay = (int) (percentageUsed * MAX_DELAY_MS); + if (delay > 0) { + outstandingConfirms.wait(delay); + } + } + + long seqNo = ch.getNextPublishSeqNo(); + outstandingConfirms.addLast(seqNo); + } + + ch.basicPublish("", queue, null, body.getBytes()); + } + + synchronized (outstandingConfirms) { + while (!outstandingConfirms.isEmpty()) { + outstandingConfirms.wait(); + } + } + + long end = System.nanoTime(); + System.out.format("Published %,d messages with adaptive throttling in %,d ms%n", + MESSAGE_COUNT, Duration.ofNanos(end - start).toMillis()); + } + } + static boolean waitUntil(Duration timeout, BooleanSupplier condition) throws InterruptedException { int waited = 0; while (!condition.getAsBoolean() && waited < timeout.toMillis()) { From d867ed695688ca9750329944e446f7a59bb4970d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 17:11:50 +0000 Subject: [PATCH 635/659] chore(deps): bump com.rabbitmq:stream-client in /java-stream-mvn Bumps [com.rabbitmq:stream-client](https://github.com/rabbitmq/rabbitmq-stream-java-client) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-stream-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-stream-java-client/compare/v1.2.0...v1.3.0) --- updated-dependencies: - dependency-name: com.rabbitmq:stream-client dependency-version: 1.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 3723b6bc..cec7bc65 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -12,7 +12,7 @@ com.rabbitmq stream-client - 1.2.0 + 1.3.0 org.slf4j From 83120b8841e3813ee051dfb5239aa9f0c7ba2821 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:08:50 +0000 Subject: [PATCH 636/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.26.0 to 5.27.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.26.0...v5.27.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a67fbbf1..a7b40a2a 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.26.0 + 5.27.0 From d0ed0d92ab4cabba0f0be002bd7662d3b926114c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:10:51 +0000 Subject: [PATCH 637/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.26.0 to 5.27.0. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.26.0...v5.27.0) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 53fc0ef1..03626147 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.26.0' + implementation 'com.rabbitmq:amqp-client:5.27.0' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.5' testImplementation 'org.mockito:mockito-core:5.20.0' From 7bf46c39f13fe858b16262efc1e259c01d52f5e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:25:31 +0000 Subject: [PATCH 638/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.19 to 1.5.20. - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.19...v_1.5.20) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-version: 1.5.20 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index cec7bc65..bd1333b5 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.19 + 1.5.20 From f06c92beaf3bcd475f19218ebc40d4d6592eb6ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 17:11:09 +0000 Subject: [PATCH 639/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.7 to 3.2.8. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.7...v3.2.8) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-version: 3.2.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index d428b4c8..3fc3c447 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.7 + 3.2.8 From 57b86b531284628d74dbbebc0bd1649d697086fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 04:35:59 +0000 Subject: [PATCH 640/659] chore(deps): bump org.assertj:assertj-core in /java-gradle Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.5 to 3.27.6. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.5...assertj-build-3.27.6) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index 03626147..aee9a3ca 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { implementation 'com.rabbitmq:amqp-client:5.27.0' implementation 'org.slf4j:slf4j-simple:2.0.17' - testImplementation 'org.assertj:assertj-core:3.27.5' + testImplementation 'org.assertj:assertj-core:3.27.6' testImplementation 'org.mockito:mockito-core:5.20.0' testImplementation 'io.dropwizard.metrics:metrics-core:4.2.37' testImplementation 'org.junit.jupiter:junit-jupiter-api:6.0.0' From 1548d000e652d98f45744cc89a17577220bcc25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= <514737+acogoluegnes@users.noreply.github.com> Date: Thu, 23 Oct 2025 08:20:34 +0200 Subject: [PATCH 641/659] Stick to JUnit 5 --- .github/dependabot.yml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index cb605079..b9c6f314 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,28 +8,52 @@ updates: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + ignore: + - dependency-name: "org.junit.jupiter:*" + versions: [ "[6.0,)" ] + - dependency-name: "org.junit.platform:*" + versions: [ "[6.0,)" ] - package-ecosystem: "maven" directory: "/java-stream-mvn" schedule: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + ignore: + - dependency-name: "org.junit.jupiter:*" + versions: [ "[6.0,)" ] + - dependency-name: "org.junit.platform:*" + versions: [ "[6.0,)" ] - package-ecosystem: "maven" directory: "/spring-amqp" schedule: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + ignore: + - dependency-name: "org.junit.jupiter:*" + versions: [ "[6.0,)" ] + - dependency-name: "org.junit.platform:*" + versions: [ "[6.0,)" ] - package-ecosystem: "maven" directory: "/spring-amqp-stream" schedule: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" + ignore: + - dependency-name: "org.junit.jupiter:*" + versions: [ "[6.0,)" ] + - dependency-name: "org.junit.platform:*" + versions: [ "[6.0,)" ] - package-ecosystem: "gradle" directory: "/java-gradle" schedule: interval: "daily" open-pull-requests-limit: 20 target-branch: "main" - + ignore: + - dependency-name: "org.junit.jupiter:*" + versions: [ "[6.0,)" ] + - dependency-name: "org.junit.platform:*" + versions: [ "[6.0,)" ] From 88314ee04808758ca1840d95f58c0fdf0c99ff66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 06:21:40 +0000 Subject: [PATCH 642/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.4 to 5.14.0. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.4...r5.14.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.14.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index a7b40a2a..0fa3ce85 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.13.4 + 5.14.0 test From 37f4d5a3f2252f868a21b11a37fb664caf3bcf29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 17:08:59 +0000 Subject: [PATCH 643/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.6 to 3.5.7. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.6...v3.5.7) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 40f35343..5f72ee14 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.6 + 3.5.7 From 1a7b7583f26531343e1acda196c41b6c792efa51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 17:09:20 +0000 Subject: [PATCH 644/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.6 to 3.5.7. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.6...v3.5.7) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 3fc3c447..6def002a 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.6 + 3.5.7 From d4a37a3a367c517a40558421270818855ec40618 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Oct 2025 17:08:21 +0000 Subject: [PATCH 645/659] chore(deps-dev): bump org.junit.jupiter:junit-jupiter in /java-mvn Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.14.0 to 5.14.1. - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.0...r5.14.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 5.14.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index 0fa3ce85..c71260f0 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -38,7 +38,7 @@ org.junit.jupiter junit-jupiter - 5.14.0 + 5.14.1 test From 3218f49e11ee729fba54d0875b57b294907eef19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:08:25 +0000 Subject: [PATCH 646/659] chore(deps): bump com.rabbitmq:amqp-client in /java-mvn Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.27.0 to 5.27.1. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.27.0...v5.27.1) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.27.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-mvn/pom.xml b/java-mvn/pom.xml index c71260f0..ccf9dbc2 100644 --- a/java-mvn/pom.xml +++ b/java-mvn/pom.xml @@ -20,7 +20,7 @@ com.rabbitmq amqp-client - 5.27.0 + 5.27.1 From 817369513a535e9bd7f5afcb33b4563f07df279c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:10:36 +0000 Subject: [PATCH 647/659] chore(deps): bump com.rabbitmq:amqp-client in /java-gradle Bumps [com.rabbitmq:amqp-client](https://github.com/rabbitmq/rabbitmq-java-client) from 5.27.0 to 5.27.1. - [Release notes](https://github.com/rabbitmq/rabbitmq-java-client/releases) - [Commits](https://github.com/rabbitmq/rabbitmq-java-client/compare/v5.27.0...v5.27.1) --- updated-dependencies: - dependency-name: com.rabbitmq:amqp-client dependency-version: 5.27.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-gradle/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-gradle/build.gradle b/java-gradle/build.gradle index aee9a3ca..4b4b5bbe 100644 --- a/java-gradle/build.gradle +++ b/java-gradle/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.rabbitmq:amqp-client:5.27.0' + implementation 'com.rabbitmq:amqp-client:5.27.1' implementation 'org.slf4j:slf4j-simple:2.0.17' testImplementation 'org.assertj:assertj-core:3.27.6' testImplementation 'org.mockito:mockito-core:5.20.0' From 00334d4a3db74204909f90c919d833f4a4fd793f Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 6 Nov 2025 14:15:46 -0800 Subject: [PATCH 648/659] erlang: bump client to 4.0 (for now) --- erlang/rebar.config | 6 +++--- erlang/rebar.lock | 29 ++++++++++++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/erlang/rebar.config b/erlang/rebar.config index 1412e480..7f4e8c93 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1,7 +1,7 @@ {erl_opts, [debug_info]}. {deps, [ - {amqp_client, "3.12.2"}, - {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7"}}} + {amqp_client, "4.0.3"}, + {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7.1"}}} ]}. {plugins, [rebar_alias]}. @@ -31,4 +31,4 @@ "--eval 'rpc_server:start(), init:stop().'"}]}, {rpc_client, [compile, {shell, "--eval 'rpc_client:start([\"10\"]), init:stop().'"}]} -]}. \ No newline at end of file +]}. diff --git a/erlang/rebar.lock b/erlang/rebar.lock index 9bf87d80..ae8a5a51 100644 --- a/erlang/rebar.lock +++ b/erlang/rebar.lock @@ -1,5 +1,5 @@ {"1.2.0", -[{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"3.12.2">>},0}, +[{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"4.0.3">>},0}, {<<"credentials_obfuscation">>, {pkg,<<"credentials_obfuscation">>,<<"3.4.0">>}, 1}, @@ -7,24 +7,27 @@ {git,"https://github.com/okeuday/quickrand.git", {ref,"65332de501998764f437c3ffe05d744f582d7622"}}, 1}, - {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"3.12.2">>},1}, - {<<"recon">>,{pkg,<<"recon">>,<<"2.5.3">>},2}, - {<<"thoas">>,{pkg,<<"thoas">>,<<"1.0.0">>},2}, + {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"4.0.3">>},1}, + {<<"ranch">>,{pkg,<<"ranch">>,<<"2.1.0">>},2}, + {<<"recon">>,{pkg,<<"recon">>,<<"2.5.6">>},2}, + {<<"thoas">>,{pkg,<<"thoas">>,<<"1.2.1">>},2}, {<<"uuid">>, {git,"https://github.com/okeuday/uuid.git", - {ref,"7c2d1320c8e61e0fe25a66ecf4761e4b5b5803d6"}}, + {ref,"63e32cdad70693495163ab131456905e827a5e36"}}, 0}]}. [ {pkg_hash,[ - {<<"amqp_client">>, <<"19770F1075FE697BEA8AA77E29DF38BD8A439F8D9F1D8A8FCCB56AE0C7AF73CD">>}, + {<<"amqp_client">>, <<"C7DCC8031C780CD39EC586BA827A8EB26E006E9761AF8D3F58FDED11F645EBD4">>}, {<<"credentials_obfuscation">>, <<"34E18B126B3AEFD6E8143776FBE1CECEEA6792307C99AC5EE8687911F048CFD7">>}, - {<<"rabbit_common">>, <<"FA46F2954F6F5E28D69AFDEFB10F15C4782402411FAC743BC2459A07DCF83B4C">>}, - {<<"recon">>, <<"739107B9050EA683C30E96DE050BC59248FD27EC147696F79A8797FF9FA17153">>}, - {<<"thoas">>, <<"567C03902920827A18A89F05B79A37B5BF93553154B883E0131801600CF02CE0">>}]}, + {<<"rabbit_common">>, <<"E927B882733D122F6802662220BDB1A83774852DBE67D21D4E33AAF54F3998DD">>}, + {<<"ranch">>, <<"2261F9ED9574DCFCC444106B9F6DA155E6E540B2F82BA3D42B339B93673B72A3">>}, + {<<"recon">>, <<"9052588E83BFEDFD9B72E1034532AEE2A5369D9D9343B61AEB7FBCE761010741">>}, + {<<"thoas">>, <<"19A25F31177A17E74004D4840F66D791D4298C5738790FA2CC73731EB911F195">>}]}, {pkg_hash_ext,[ - {<<"amqp_client">>, <<"004BBF9A4129751195660D5347FD89675564C298979C834189E9B24677AFAE94">>}, + {<<"amqp_client">>, <<"AE945F7280617E9A4B17A6D49E3A2F496D716E8088EC29D8E94ECC79E5DA7458">>}, {<<"credentials_obfuscation">>, <<"738ACE0ED5545D2710D3F7383906FC6F6B582D019036E5269C4DBD85DBCED566">>}, - {<<"rabbit_common">>, <<"33FE4EB510B1E72A2734B9C3D081F76059A07ED7D76C9B9403276AF9D5AFC1B1">>}, - {<<"recon">>, <<"6C6683F46FD4A1DFD98404B9F78DCABC7FCD8826613A89DCB984727A8C3099D7">>}, - {<<"thoas">>, <<"FC763185B932ECB32A554FB735EE03C3B6B1B31366077A2427D2A97F3BD26735">>}]} + {<<"rabbit_common">>, <<"EAD31BA292C2CC5FDA48A486417D7CFE8966F661994D7ED6C3E5F8840828E8EC">>}, + {<<"ranch">>, <<"244EE3FA2A6175270D8E1FC59024FD9DBC76294A321057DE8F803B1479E76916">>}, + {<<"recon">>, <<"96C6799792D735CC0F0FD0F86267E9D351E63339CBE03DF9D162010CEFC26BB0">>}, + {<<"thoas">>, <<"E38697EDFFD6E91BD12CEA41B155115282630075C2A727E7A6B2947F5408B86A">>}]} ]. From 245ad50856e6b3cef073373ae1c4968c56fc3ae0 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 6 Nov 2025 14:59:12 -0800 Subject: [PATCH 649/659] erlang: bump amqp_client to 4.2.1 yes, RabbitMQ 4.2.1 is not out yet but hex.pm forced us to re-publish the 4.2.0 release with a package contents fix (not related to the code modules) under a freaking semver name, otherwise the package was marked as "retired" which it definitely is not. --- erlang/rebar.config | 2 +- erlang/rebar.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/erlang/rebar.config b/erlang/rebar.config index 7f4e8c93..c49b4e0e 100644 --- a/erlang/rebar.config +++ b/erlang/rebar.config @@ -1,6 +1,6 @@ {erl_opts, [debug_info]}. {deps, [ - {amqp_client, "4.0.3"}, + {amqp_client, "4.2.1"}, {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.7.1"}}} ]}. diff --git a/erlang/rebar.lock b/erlang/rebar.lock index ae8a5a51..29c7c4fe 100644 --- a/erlang/rebar.lock +++ b/erlang/rebar.lock @@ -1,14 +1,14 @@ {"1.2.0", -[{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"4.0.3">>},0}, +[{<<"amqp_client">>,{pkg,<<"amqp_client">>,<<"4.2.1">>},0}, {<<"credentials_obfuscation">>, - {pkg,<<"credentials_obfuscation">>,<<"3.4.0">>}, + {pkg,<<"credentials_obfuscation">>,<<"3.5.0">>}, 1}, {<<"quickrand">>, {git,"https://github.com/okeuday/quickrand.git", {ref,"65332de501998764f437c3ffe05d744f582d7622"}}, 1}, - {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"4.0.3">>},1}, - {<<"ranch">>,{pkg,<<"ranch">>,<<"2.1.0">>},2}, + {<<"rabbit_common">>,{pkg,<<"rabbit_common">>,<<"4.2.1">>},1}, + {<<"ranch">>,{pkg,<<"ranch">>,<<"2.2.0">>},2}, {<<"recon">>,{pkg,<<"recon">>,<<"2.5.6">>},2}, {<<"thoas">>,{pkg,<<"thoas">>,<<"1.2.1">>},2}, {<<"uuid">>, @@ -17,17 +17,17 @@ 0}]}. [ {pkg_hash,[ - {<<"amqp_client">>, <<"C7DCC8031C780CD39EC586BA827A8EB26E006E9761AF8D3F58FDED11F645EBD4">>}, - {<<"credentials_obfuscation">>, <<"34E18B126B3AEFD6E8143776FBE1CECEEA6792307C99AC5EE8687911F048CFD7">>}, - {<<"rabbit_common">>, <<"E927B882733D122F6802662220BDB1A83774852DBE67D21D4E33AAF54F3998DD">>}, - {<<"ranch">>, <<"2261F9ED9574DCFCC444106B9F6DA155E6E540B2F82BA3D42B339B93673B72A3">>}, + {<<"amqp_client">>, <<"CFF0CC13186E57457DC5745F1B3A4127C6857717CB8F5920DC457C84D0AD00A2">>}, + {<<"credentials_obfuscation">>, <<"61E282ADFB4439486B3994FAAEC69543C7EE6CC7E70C6340E8853FD9DEAF8219">>}, + {<<"rabbit_common">>, <<"1D64E391E12116B76B1425EB96B7552DE51F0301093EBA669B5334F4759CC1E8">>}, + {<<"ranch">>, <<"25528F82BC8D7C6152C57666CA99EC716510FE0925CB188172F41CE93117B1B0">>}, {<<"recon">>, <<"9052588E83BFEDFD9B72E1034532AEE2A5369D9D9343B61AEB7FBCE761010741">>}, {<<"thoas">>, <<"19A25F31177A17E74004D4840F66D791D4298C5738790FA2CC73731EB911F195">>}]}, {pkg_hash_ext,[ - {<<"amqp_client">>, <<"AE945F7280617E9A4B17A6D49E3A2F496D716E8088EC29D8E94ECC79E5DA7458">>}, - {<<"credentials_obfuscation">>, <<"738ACE0ED5545D2710D3F7383906FC6F6B582D019036E5269C4DBD85DBCED566">>}, - {<<"rabbit_common">>, <<"EAD31BA292C2CC5FDA48A486417D7CFE8966F661994D7ED6C3E5F8840828E8EC">>}, - {<<"ranch">>, <<"244EE3FA2A6175270D8E1FC59024FD9DBC76294A321057DE8F803B1479E76916">>}, + {<<"amqp_client">>, <<"8AE00B055A58500E0557F73D9C0FFE257487131E603F7F84FE72CBFAAF03838A">>}, + {<<"credentials_obfuscation">>, <<"843ADBE3246861CE0F1A0FA3222F384834EB31DEFD8D6B9CBA7AFD2977C957BC">>}, + {<<"rabbit_common">>, <<"FF509B07E639B1784898C28031E5204FEA14260172E4FC339F94405586037E40">>}, + {<<"ranch">>, <<"FA0B99A1780C80218A4197A59EA8D3BDAE32FBFF7E88527D7D8A4787EFF4F8E7">>}, {<<"recon">>, <<"96C6799792D735CC0F0FD0F86267E9D351E63339CBE03DF9D162010CEFC26BB0">>}, {<<"thoas">>, <<"E38697EDFFD6E91BD12CEA41B155115282630075C2A727E7A6B2947F5408B86A">>}]} ]. From d48c09f6505f5a6dede4e09a057bfd8e09997351 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 17:41:50 +0000 Subject: [PATCH 650/659] chore(deps): bump ch.qos.logback:logback-classic in /java-stream-mvn Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.20 to 1.5.21. - [Release notes](https://github.com/qos-ch/logback/releases) - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.20...v_1.5.21) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-version: 1.5.21 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index 020a6514..dd8ef23c 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -22,7 +22,7 @@ ch.qos.logback logback-classic - 1.5.20 + 1.5.21 From c24784b471befac36a99b41ea9340516b1221a76 Mon Sep 17 00:00:00 2001 From: Gabriele Santomaggio Date: Fri, 14 Nov 2025 09:50:18 +0100 Subject: [PATCH 651/659] update documentation for rstream 0.40.0 (#692) Signed-off-by: Gabriele Santomaggio --- python-stream/offset_tracking_receive.py | 2 +- python-stream/receive.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/python-stream/offset_tracking_receive.py b/python-stream/offset_tracking_receive.py index a040643f..d3500270 100644 --- a/python-stream/offset_tracking_receive.py +++ b/python-stream/offset_tracking_receive.py @@ -30,7 +30,7 @@ async def on_message(msg: AMQPMessage, message_context: MessageContext): first_offset = offset consumer = message_context.consumer - stream = message_context.consumer.get_stream(message_context.subscriber_name) + stream = message_context.stream # store the offset after every 10 messages received message_count = message_count + 1 diff --git a/python-stream/receive.py b/python-stream/receive.py index 54f7cfc4..847a0e93 100644 --- a/python-stream/receive.py +++ b/python-stream/receive.py @@ -20,8 +20,7 @@ async def receive(): ) async def on_message(msg: AMQPMessage, message_context: MessageContext): - stream = message_context.consumer.get_stream(message_context.subscriber_name) - print("Got message: {} from stream {}".format(msg, stream)) + print("Got message: {} from stream {}".format(msg, message_context.stream)) print("Press control + C to close") await consumer.start() From ad6c2a352aa39e3514bdbfe5fc4b59307bb81779 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:11:14 +0000 Subject: [PATCH 652/659] chore(deps): bump org.springframework.amqp:spring-rabbit-stream Bumps [org.springframework.amqp:spring-rabbit-stream](https://github.com/spring-projects/spring-amqp) from 3.2.8 to 4.0.0. - [Release notes](https://github.com/spring-projects/spring-amqp/releases) - [Commits](https://github.com/spring-projects/spring-amqp/compare/v3.2.8...v4.0.0) --- updated-dependencies: - dependency-name: org.springframework.amqp:spring-rabbit-stream dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 6def002a..454a7e3c 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -31,7 +31,7 @@ org.springframework.amqp spring-rabbit-stream - 3.2.8 + 4.0.0 From fb35ed14d6cb0fbc22305ff65fd59a879e63a68f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:10:13 +0000 Subject: [PATCH 653/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.7 to 3.5.8. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.7...v3.5.8) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 5f72ee14..ba98c181 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.7 + 3.5.8 From dbce9668bde3b64389e8eef2e01b9f44fb2a9e7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:10:39 +0000 Subject: [PATCH 654/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.7 to 3.5.8. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.7...v3.5.8) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 454a7e3c..021d34ce 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.7 + 3.5.8 From 4ea6052e96a919a37c853a2ff6efdaaf12849392 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:09:45 +0000 Subject: [PATCH 655/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.8 to 4.0.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.8...v4.0.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- spring-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index ba98c181..6b870ae8 100644 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.8 + 4.0.0 From 8154212e41734df4fc757ac81569a0b10430dc47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:10:12 +0000 Subject: [PATCH 656/659] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.8 to 4.0.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.8...v4.0.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- spring-amqp-stream/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-amqp-stream/pom.xml b/spring-amqp-stream/pom.xml index 021d34ce..22b5969a 100644 --- a/spring-amqp-stream/pom.xml +++ b/spring-amqp-stream/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.8 + 4.0.0 From 0a8596eea780e26c7d488ec26e44d5fed63d3853 Mon Sep 17 00:00:00 2001 From: NathanFallet Date: Sat, 22 Nov 2025 01:07:20 +0100 Subject: [PATCH 657/659] moved original kt tutorials to kotlin-java-client + create new kotlin setup --- kotlin-java-client/.gitignore | 2 + kotlin-java-client/README.md | 95 +++++++ {kotlin => kotlin-java-client}/build.gradle | 0 kotlin-java-client/gradle.properties | 2 + .../settings.gradle | 0 .../src/main/kotlin/EmitLog.kt | 0 .../src/main/kotlin/EmitLogDirect.kt | 0 .../src/main/kotlin/EmitLogHeader.kt | 0 .../src/main/kotlin/EmitLogTopic.kt | 0 .../src/main/kotlin/NewTask.kt | 0 .../src/main/kotlin/RPCClient.kt | 0 .../src/main/kotlin/RPCServer.kt | 0 .../src/main/kotlin/ReceiveLogHeader.kt | 0 .../src/main/kotlin/ReceiveLogs.kt | 0 .../src/main/kotlin/ReceiveLogsDirect.kt | 0 .../src/main/kotlin/ReceiveLogsTopic.kt | 0 .../src/main/kotlin/Recv.kt | 0 .../src/main/kotlin/Send.kt | 0 .../src/main/kotlin/Worker.kt | 0 kotlin/.gitignore | 1 + kotlin/README.md | 94 +------ kotlin/build.gradle.kts | 29 ++ kotlin/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43764 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + kotlin/gradlew | 251 ++++++++++++++++++ kotlin/gradlew.bat | 94 +++++++ kotlin/settings.gradle.kts | 1 + kotlin/src/commonMain/kotlin/HelloWorld.kt | 60 +++++ 28 files changed, 543 insertions(+), 93 deletions(-) create mode 100644 kotlin-java-client/.gitignore create mode 100644 kotlin-java-client/README.md rename {kotlin => kotlin-java-client}/build.gradle (100%) create mode 100644 kotlin-java-client/gradle.properties rename {kotlin => kotlin-java-client}/settings.gradle (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/EmitLog.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/EmitLogDirect.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/EmitLogHeader.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/EmitLogTopic.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/NewTask.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/RPCClient.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/RPCServer.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/ReceiveLogHeader.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/ReceiveLogs.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/ReceiveLogsDirect.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/ReceiveLogsTopic.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/Recv.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/Send.kt (100%) rename {kotlin => kotlin-java-client}/src/main/kotlin/Worker.kt (100%) create mode 100644 kotlin/build.gradle.kts create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.jar create mode 100644 kotlin/gradle/wrapper/gradle-wrapper.properties create mode 100755 kotlin/gradlew create mode 100644 kotlin/gradlew.bat create mode 100644 kotlin/settings.gradle.kts create mode 100644 kotlin/src/commonMain/kotlin/HelloWorld.kt diff --git a/kotlin-java-client/.gitignore b/kotlin-java-client/.gitignore new file mode 100644 index 00000000..e51bc30b --- /dev/null +++ b/kotlin-java-client/.gitignore @@ -0,0 +1,2 @@ +build/* +.gradle/* diff --git a/kotlin-java-client/README.md b/kotlin-java-client/README.md new file mode 100644 index 00000000..91b51dec --- /dev/null +++ b/kotlin-java-client/README.md @@ -0,0 +1,95 @@ +# RabbitMQ Tutorials in Kotlin + +This is a minimalistic Kotlin port of the [RabbitMQ tutorials in Java](https://www.rabbitmq.com/getstarted.html). +The port is admittedly quite close to Java in terms of code style. + + +## Compiling the Code + +``` shell +gradle clean compileKotlin +``` + +## Running the Tutorials + +### Tutorial 1 + +Execute the following command to start a Hello, world consumer + +``` shell +gradle run -P main=Recv +``` + +Execute the following in a separate shell to publish a Hello, world messge: + +``` shell +gradle run -P main=Send +``` + +### Tutorial 2 + +Send a task message. The task will be completed immediately + +``` shell +gradle run -P main=NewTask +``` + +To start a worker (run in a separate shell): + +``` shell +gradle run -P main=Worker +``` + +Send a task message. It will wait for 1 second for each dot in the payload. + +``` shell +gradle run -P main=NewTask -P argv="rabbit1 ...." +``` + +Add more workers to the same queue, message will be distributed in the +round robin manner. + +### Tutorial 3 + +``` shell +gradle run -P main=ReceiveLogs +``` + + +``` shell +gradle run -P main=EmitLog -P argv="rabbit1, msg1" +``` + +### Tutorial 4 + +``` shell +gradle run -P main="ReceiveLogsDirect" -P argv="info,error" +``` + +``` shell +gradle run -P main=EmitLogDirect" +``` + +### Tutorial 5 + +``` shell +gradle run -P main=ReceiveLogsTopic -P argv="anonymous.*" +``` + +``` shell +gradle run -P main=EmitLogTopic -P argv="anonymous.info" +``` + +### Tutorial 6 + +In one shell: + +``` shell +gradle run -P main=RPCServer +``` + +In another shell: + +``` shell +gradle run -P main=RPCClient +``` diff --git a/kotlin/build.gradle b/kotlin-java-client/build.gradle similarity index 100% rename from kotlin/build.gradle rename to kotlin-java-client/build.gradle diff --git a/kotlin-java-client/gradle.properties b/kotlin-java-client/gradle.properties new file mode 100644 index 00000000..19b3681c --- /dev/null +++ b/kotlin-java-client/gradle.properties @@ -0,0 +1,2 @@ +main = +argv = diff --git a/kotlin/settings.gradle b/kotlin-java-client/settings.gradle similarity index 100% rename from kotlin/settings.gradle rename to kotlin-java-client/settings.gradle diff --git a/kotlin/src/main/kotlin/EmitLog.kt b/kotlin-java-client/src/main/kotlin/EmitLog.kt similarity index 100% rename from kotlin/src/main/kotlin/EmitLog.kt rename to kotlin-java-client/src/main/kotlin/EmitLog.kt diff --git a/kotlin/src/main/kotlin/EmitLogDirect.kt b/kotlin-java-client/src/main/kotlin/EmitLogDirect.kt similarity index 100% rename from kotlin/src/main/kotlin/EmitLogDirect.kt rename to kotlin-java-client/src/main/kotlin/EmitLogDirect.kt diff --git a/kotlin/src/main/kotlin/EmitLogHeader.kt b/kotlin-java-client/src/main/kotlin/EmitLogHeader.kt similarity index 100% rename from kotlin/src/main/kotlin/EmitLogHeader.kt rename to kotlin-java-client/src/main/kotlin/EmitLogHeader.kt diff --git a/kotlin/src/main/kotlin/EmitLogTopic.kt b/kotlin-java-client/src/main/kotlin/EmitLogTopic.kt similarity index 100% rename from kotlin/src/main/kotlin/EmitLogTopic.kt rename to kotlin-java-client/src/main/kotlin/EmitLogTopic.kt diff --git a/kotlin/src/main/kotlin/NewTask.kt b/kotlin-java-client/src/main/kotlin/NewTask.kt similarity index 100% rename from kotlin/src/main/kotlin/NewTask.kt rename to kotlin-java-client/src/main/kotlin/NewTask.kt diff --git a/kotlin/src/main/kotlin/RPCClient.kt b/kotlin-java-client/src/main/kotlin/RPCClient.kt similarity index 100% rename from kotlin/src/main/kotlin/RPCClient.kt rename to kotlin-java-client/src/main/kotlin/RPCClient.kt diff --git a/kotlin/src/main/kotlin/RPCServer.kt b/kotlin-java-client/src/main/kotlin/RPCServer.kt similarity index 100% rename from kotlin/src/main/kotlin/RPCServer.kt rename to kotlin-java-client/src/main/kotlin/RPCServer.kt diff --git a/kotlin/src/main/kotlin/ReceiveLogHeader.kt b/kotlin-java-client/src/main/kotlin/ReceiveLogHeader.kt similarity index 100% rename from kotlin/src/main/kotlin/ReceiveLogHeader.kt rename to kotlin-java-client/src/main/kotlin/ReceiveLogHeader.kt diff --git a/kotlin/src/main/kotlin/ReceiveLogs.kt b/kotlin-java-client/src/main/kotlin/ReceiveLogs.kt similarity index 100% rename from kotlin/src/main/kotlin/ReceiveLogs.kt rename to kotlin-java-client/src/main/kotlin/ReceiveLogs.kt diff --git a/kotlin/src/main/kotlin/ReceiveLogsDirect.kt b/kotlin-java-client/src/main/kotlin/ReceiveLogsDirect.kt similarity index 100% rename from kotlin/src/main/kotlin/ReceiveLogsDirect.kt rename to kotlin-java-client/src/main/kotlin/ReceiveLogsDirect.kt diff --git a/kotlin/src/main/kotlin/ReceiveLogsTopic.kt b/kotlin-java-client/src/main/kotlin/ReceiveLogsTopic.kt similarity index 100% rename from kotlin/src/main/kotlin/ReceiveLogsTopic.kt rename to kotlin-java-client/src/main/kotlin/ReceiveLogsTopic.kt diff --git a/kotlin/src/main/kotlin/Recv.kt b/kotlin-java-client/src/main/kotlin/Recv.kt similarity index 100% rename from kotlin/src/main/kotlin/Recv.kt rename to kotlin-java-client/src/main/kotlin/Recv.kt diff --git a/kotlin/src/main/kotlin/Send.kt b/kotlin-java-client/src/main/kotlin/Send.kt similarity index 100% rename from kotlin/src/main/kotlin/Send.kt rename to kotlin-java-client/src/main/kotlin/Send.kt diff --git a/kotlin/src/main/kotlin/Worker.kt b/kotlin-java-client/src/main/kotlin/Worker.kt similarity index 100% rename from kotlin/src/main/kotlin/Worker.kt rename to kotlin-java-client/src/main/kotlin/Worker.kt diff --git a/kotlin/.gitignore b/kotlin/.gitignore index e51bc30b..ba8d33ea 100644 --- a/kotlin/.gitignore +++ b/kotlin/.gitignore @@ -1,2 +1,3 @@ build/* .gradle/* +.kotlin diff --git a/kotlin/README.md b/kotlin/README.md index 91b51dec..4098ed9f 100644 --- a/kotlin/README.md +++ b/kotlin/README.md @@ -1,95 +1,3 @@ -# RabbitMQ Tutorials in Kotlin +# RabbitMQ Tutorials in Kotlin (JVM & Native) -This is a minimalistic Kotlin port of the [RabbitMQ tutorials in Java](https://www.rabbitmq.com/getstarted.html). -The port is admittedly quite close to Java in terms of code style. - -## Compiling the Code - -``` shell -gradle clean compileKotlin -``` - -## Running the Tutorials - -### Tutorial 1 - -Execute the following command to start a Hello, world consumer - -``` shell -gradle run -P main=Recv -``` - -Execute the following in a separate shell to publish a Hello, world messge: - -``` shell -gradle run -P main=Send -``` - -### Tutorial 2 - -Send a task message. The task will be completed immediately - -``` shell -gradle run -P main=NewTask -``` - -To start a worker (run in a separate shell): - -``` shell -gradle run -P main=Worker -``` - -Send a task message. It will wait for 1 second for each dot in the payload. - -``` shell -gradle run -P main=NewTask -P argv="rabbit1 ...." -``` - -Add more workers to the same queue, message will be distributed in the -round robin manner. - -### Tutorial 3 - -``` shell -gradle run -P main=ReceiveLogs -``` - - -``` shell -gradle run -P main=EmitLog -P argv="rabbit1, msg1" -``` - -### Tutorial 4 - -``` shell -gradle run -P main="ReceiveLogsDirect" -P argv="info,error" -``` - -``` shell -gradle run -P main=EmitLogDirect" -``` - -### Tutorial 5 - -``` shell -gradle run -P main=ReceiveLogsTopic -P argv="anonymous.*" -``` - -``` shell -gradle run -P main=EmitLogTopic -P argv="anonymous.info" -``` - -### Tutorial 6 - -In one shell: - -``` shell -gradle run -P main=RPCServer -``` - -In another shell: - -``` shell -gradle run -P main=RPCClient -``` diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts new file mode 100644 index 00000000..6efb5267 --- /dev/null +++ b/kotlin/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + kotlin("multiplatform") version "2.1.21" +} + +repositories { + mavenCentral() +} + +kotlin { + // Examples can be executed with JVM or natively for macOS, Linux, or Windows + jvm() + macosArm64() + linuxX64() + mingwX64() + + applyDefaultHierarchyTemplate() + sourceSets { + val commonMain by getting { + dependencies { + api("dev.kourier:amqp-client:0.3.1") + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} diff --git a/kotlin/gradle/wrapper/gradle-wrapper.jar b/kotlin/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b33c55baabb587c669f562ae36f953de2481846 GIT binary patch literal 43764 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/kotlin/gradlew.bat b/kotlin/gradlew.bat new file mode 100644 index 00000000..db3a6ac2 --- /dev/null +++ b/kotlin/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/kotlin/settings.gradle.kts b/kotlin/settings.gradle.kts new file mode 100644 index 00000000..fc6d81fb --- /dev/null +++ b/kotlin/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "rabbitmq-tutorial" diff --git a/kotlin/src/commonMain/kotlin/HelloWorld.kt b/kotlin/src/commonMain/kotlin/HelloWorld.kt new file mode 100644 index 00000000..8d1e1cac --- /dev/null +++ b/kotlin/src/commonMain/kotlin/HelloWorld.kt @@ -0,0 +1,60 @@ +import dev.kourier.amqp.Properties +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import io.ktor.utils.io.core.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking + +val queueName = "hello" + +suspend fun send(coroutineScope: CoroutineScope) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + channel.queueDeclare(queueName, durable = false, exclusive = false, autoDelete = false, arguments = emptyMap()) + val message = "Hello World!" + channel.basicPublish(message.toByteArray(), exchange = "", routingKey = queueName, properties = Properties()) + println("[x] Sent '$message'") + + channel.close() + connection.close() +} + +suspend fun receive(coroutineScope: CoroutineScope) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + channel.queueDeclare(queueName, durable = false, exclusive = false, autoDelete = false, arguments = emptyMap()) + println("[*] Waiting for messages. To exit press CTRL+C") + + val consumer = channel.basicConsume(queueName, noAck = true) + for (delivery in consumer) { + val message: String = delivery.message.body.decodeToString() + println("[x] Received '$message'") + } + + channel.close() + connection.close() +} + +fun main() = runBlocking { + val coroutineScope = this + + launch { send(coroutineScope) } + launch { receive(coroutineScope) } + + delay(Long.MAX_VALUE) // Keep the main thread alive to allow the consumer to run +} + From dd194cf031e4d57f571b77e64c5be3ae0827cc38 Mon Sep 17 00:00:00 2001 From: NathanFallet Date: Thu, 27 Nov 2025 20:30:00 +0100 Subject: [PATCH 658/659] done with kotlin tutorials --- kotlin/README.md | 113 ++++++++++++ kotlin/build.gradle.kts | 5 + .../src/commonMain/kotlin/PublishSubscribe.kt | 89 ++++++++++ kotlin/src/commonMain/kotlin/RPC.kt | 161 ++++++++++++++++++ kotlin/src/commonMain/kotlin/Routing.kt | 92 ++++++++++ kotlin/src/commonMain/kotlin/Topics.kt | 92 ++++++++++ kotlin/src/commonMain/kotlin/WorkQueues.kt | 95 +++++++++++ 7 files changed, 647 insertions(+) create mode 100644 kotlin/src/commonMain/kotlin/PublishSubscribe.kt create mode 100644 kotlin/src/commonMain/kotlin/RPC.kt create mode 100644 kotlin/src/commonMain/kotlin/Routing.kt create mode 100644 kotlin/src/commonMain/kotlin/Topics.kt create mode 100644 kotlin/src/commonMain/kotlin/WorkQueues.kt diff --git a/kotlin/README.md b/kotlin/README.md index 4098ed9f..44e270ef 100644 --- a/kotlin/README.md +++ b/kotlin/README.md @@ -1,3 +1,116 @@ # RabbitMQ Tutorials in Kotlin (JVM & Native) +This repository contains RabbitMQ tutorials implemented using [Kourier](https://kourier.dev), a pure Kotlin multiplatform AMQP client. +## About + +These tutorials demonstrate the core concepts of RabbitMQ using Kotlin and the Kourier AMQP client library. All examples work on JVM, macOS (ARM64), Linux (x64), and Windows (x64) platforms through Kotlin Multiplatform. + +## Prerequisites + +- RabbitMQ server running on localhost (default port 5672) +- Kotlin 2.1.21 +- Gradle + +## Building + +```bash +./gradlew build +``` + +## Tutorials + +### 1. Hello World (HelloWorld.kt) + +The simplest thing that does something - sending and receiving messages from a named queue. + +Functions: +- `send()` - Sends "Hello World!" message to the queue +- `receive()` - Receives and prints messages from the queue + +### 2. Work Queues (WorkQueues.kt) + +Distributing time-consuming tasks among multiple workers. + +Functions: +- `newTask(message)` - Sends a task to the work queue (dots represent work time) +- `worker(workerName)` - Processes tasks with fair dispatch and manual acknowledgment + +Key concepts: +- Message durability +- Fair dispatch with `basicQos` +- Manual acknowledgments + +### 3. Publish/Subscribe (PublishSubscribe.kt) + +Sending messages to many consumers at once using fanout exchanges. + +Functions: +- `emitLog(message)` - Publishes log messages to all subscribers +- `receiveLogs(subscriberName)` - Subscribes to all log messages + +Key concepts: +- Fanout exchanges +- Temporary queues +- Broadcasting messages + +### 4. Routing (Routing.kt) + +Receiving messages selectively using direct exchanges and routing keys. + +Functions: +- `emitLogDirect(severity, message)` - Publishes log with specific severity +- `receiveLogsDirect(subscriberName, severities)` - Subscribes to specific severities + +Key concepts: +- Direct exchanges +- Routing keys +- Multiple bindings per queue + +### 5. Topics (Topics.kt) + +Receiving messages based on patterns using topic exchanges. + +Functions: +- `emitLogTopic(routingKey, message)` - Publishes with topic routing key +- `receiveLogsTopic(subscriberName, bindingKeys)` - Subscribes using patterns + +Key concepts: +- Topic exchanges +- Wildcard patterns (`*` = one word, `#` = zero or more words) +- Pattern-based routing + +### 6. RPC (RPC.kt) + +Request/reply pattern for remote procedure calls. + +Functions: +- `rpcServer()` - Processes Fibonacci number requests +- `rpcClient(n)` - Sends RPC request and waits for response + +Key concepts: +- Callback queues +- Correlation IDs +- Reply-to pattern + +## Running Examples + +These tutorials are designed as library functions. You can call them from your own code or tests. For example: + +```kotlin +import kotlinx.coroutines.runBlocking + +fun main() = runBlocking { + // Example: Run work queue tutorial + launch { worker(this, "Worker-1") } + launch { worker(this, "Worker-2") } + + delay(1000) // Give workers time to start + + newTask(this, "Task with work...") +} +``` + +## More Information + +For detailed explanations of each tutorial, see the [Kourier documentation](https://kourier.dev/tutorials/). diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts index 6efb5267..f33985ee 100644 --- a/kotlin/build.gradle.kts +++ b/kotlin/build.gradle.kts @@ -15,6 +15,11 @@ kotlin { applyDefaultHierarchyTemplate() sourceSets { + all { + languageSettings.apply { + optIn("kotlin.uuid.ExperimentalUuidApi") + } + } val commonMain by getting { dependencies { api("dev.kourier:amqp-client:0.3.1") diff --git a/kotlin/src/commonMain/kotlin/PublishSubscribe.kt b/kotlin/src/commonMain/kotlin/PublishSubscribe.kt new file mode 100644 index 00000000..fcd04eba --- /dev/null +++ b/kotlin/src/commonMain/kotlin/PublishSubscribe.kt @@ -0,0 +1,89 @@ +import dev.kourier.amqp.BuiltinExchangeType +import dev.kourier.amqp.Properties +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import io.ktor.utils.io.core.* +import kotlinx.coroutines.* + +suspend fun emitLog(coroutineScope: CoroutineScope, message: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare a fanout exchange - broadcasts to all bound queues + channel.exchangeDeclare( + "logs", + BuiltinExchangeType.FANOUT, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Publish to the exchange (routing key is ignored for fanout) + channel.basicPublish( + message.toByteArray(), + exchange = "logs", + routingKey = "", // Routing key is ignored by fanout exchanges + properties = Properties() + ) + println(" [x] Sent '$message'") + + channel.close() + connection.close() +} + +suspend fun receiveLogs(coroutineScope: CoroutineScope, subscriberName: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare the same fanout exchange + channel.exchangeDeclare( + "logs", + BuiltinExchangeType.FANOUT, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Declare a temporary, exclusive, auto-delete queue + // The server generates a unique name for us + val queueDeclared = channel.queueDeclare( + name = "", // Empty name = server generates a unique name + durable = false, + exclusive = true, // Queue is deleted when connection closes + autoDelete = true, // Queue is deleted when no consumers + arguments = emptyMap() + ) + val queueName = queueDeclared.queueName + println(" [$subscriberName] Created temporary queue: $queueName") + + // Bind the queue to the exchange + channel.queueBind( + queue = queueName, + exchange = "logs", + routingKey = "" // Routing key is ignored for fanout + ) + println(" [$subscriberName] Waiting for logs. To exit press CTRL+C") + + // Consume messages with auto-ack (since these are just logs) + val consumer = channel.basicConsume(queueName, noAck = true) + + for (delivery in consumer) { + val message = delivery.message.body.decodeToString() + println(" [$subscriberName] $message") + } + + channel.close() + connection.close() +} diff --git a/kotlin/src/commonMain/kotlin/RPC.kt b/kotlin/src/commonMain/kotlin/RPC.kt new file mode 100644 index 00000000..460d49b8 --- /dev/null +++ b/kotlin/src/commonMain/kotlin/RPC.kt @@ -0,0 +1,161 @@ +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import dev.kourier.amqp.properties +import io.ktor.utils.io.core.* +import kotlinx.coroutines.* +import kotlin.uuid.Uuid + +/** + * Fibonacci function - calculates Fibonacci number recursively. + * Note: This is a simple recursive implementation for demonstration. + * Not suitable for large numbers in production. + */ +private fun fib(n: Int): Int { + return when { + n == 0 -> 0 + n == 1 -> 1 + else -> fib(n - 1) + fib(n - 2) + } +} + +/** + * RPC Server - Processes Fibonacci requests and sends responses. + */ +suspend fun rpcServer(coroutineScope: CoroutineScope) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + try { + // Declare the RPC queue + channel.queueDeclare( + "rpc_queue", + durable = false, + exclusive = false, + autoDelete = false, + arguments = emptyMap() + ) + + // Fair dispatch - don't give more than one message at a time + channel.basicQos(count = 1u, global = false) + + println(" [x] Awaiting RPC requests") + + // Consume RPC requests + val consumer = channel.basicConsume("rpc_queue", noAck = false) + + for (delivery in consumer) { + try { + val props = delivery.message.properties + val correlationId = props.correlationId + val replyTo = props.replyTo + + // Parse request (expecting an integer) + val requestMessage = delivery.message.body.decodeToString() + val n = requestMessage.toIntOrNull() ?: 0 + + println(" [.] fib($n)") + + // Calculate Fibonacci + val response = fib(n) + + // Build response properties with correlation ID + val replyProps = properties { + this.correlationId = correlationId + } + + // Send response to the callback queue + if (replyTo != null) { + channel.basicPublish( + response.toString().toByteArray(), + exchange = "", + routingKey = replyTo, + properties = replyProps + ) + } + + // Acknowledge the request + channel.basicAck(delivery.message, multiple = false) + } catch (e: Exception) { + println(" [.] Error processing request: ${e.message}") + e.printStackTrace() + channel.basicAck(delivery.message, multiple = false) + } + } + } finally { + // Ensure cleanup happens even when coroutine is cancelled + channel.close() + connection.close() + } +} + +/** + * RPC Client - Sends Fibonacci requests and waits for responses. + */ +suspend fun rpcClient(coroutineScope: CoroutineScope, n: Int): Int { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + try { + // Create an exclusive callback queue for receiving responses + val callbackQueueDeclared = channel.queueDeclare( + name = "", + durable = false, + exclusive = true, // Exclusive to this connection + autoDelete = true, + arguments = emptyMap() + ) + val callbackQueueName = callbackQueueDeclared.queueName + + // Generate a unique correlation ID for this request + val correlationId = Uuid.random().toString() + + // Start consuming BEFORE sending the request to avoid race condition + val consumer = channel.basicConsume(callbackQueueName, noAck = true) + var result = 0 + + // Build request properties + val requestProps = properties { + this.correlationId = correlationId + this.replyTo = callbackQueueName + } + + // Send the RPC request + channel.basicPublish( + n.toString().toByteArray(), + exchange = "", + routingKey = "rpc_queue", + properties = requestProps + ) + println(" [x] Requesting fib($n)") + + withTimeout(10000) { // 10 second timeout + for (delivery in consumer) { + val responseCorrelationId = delivery.message.properties.correlationId + + if (responseCorrelationId == correlationId) { + // Found matching response + val responseMessage = delivery.message.body.decodeToString() + result = responseMessage.toInt() + println(" [.] Got $result") + break + } + } + } + + return result + } finally { + // Ensure cleanup happens even on timeout or error + channel.close() + connection.close() + } +} diff --git a/kotlin/src/commonMain/kotlin/Routing.kt b/kotlin/src/commonMain/kotlin/Routing.kt new file mode 100644 index 00000000..df33a1bb --- /dev/null +++ b/kotlin/src/commonMain/kotlin/Routing.kt @@ -0,0 +1,92 @@ +import dev.kourier.amqp.BuiltinExchangeType +import dev.kourier.amqp.Properties +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import io.ktor.utils.io.core.* +import kotlinx.coroutines.* + +suspend fun emitLogDirect(coroutineScope: CoroutineScope, severity: String, message: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare a direct exchange - routes based on exact routing key match + channel.exchangeDeclare( + "direct_logs", + BuiltinExchangeType.DIRECT, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Publish with severity as the routing key + channel.basicPublish( + message.toByteArray(), + exchange = "direct_logs", + routingKey = severity, // Routing key determines which queues receive the message + properties = Properties() + ) + println(" [x] Sent '$severity':'$message'") + + channel.close() + connection.close() +} + +suspend fun receiveLogsDirect(coroutineScope: CoroutineScope, subscriberName: String, severities: List) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare the same direct exchange + channel.exchangeDeclare( + "direct_logs", + BuiltinExchangeType.DIRECT, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Declare a temporary queue + val queueDeclared = channel.queueDeclare( + name = "", + durable = false, + exclusive = true, + autoDelete = true, + arguments = emptyMap() + ) + val queueName = queueDeclared.queueName + println(" [$subscriberName] Created temporary queue: $queueName") + + // Bind the queue to the exchange with each severity + for (severity in severities) { + channel.queueBind( + queue = queueName, + exchange = "direct_logs", + routingKey = severity // Only receive messages with this routing key + ) + println(" [$subscriberName] Binding queue to '$severity'") + } + println(" [$subscriberName] Waiting for ${severities.joinToString(", ")} logs. To exit press CTRL+C") + + // Consume messages + val consumer = channel.basicConsume(queueName, noAck = true) + + for (delivery in consumer) { + val routingKey = delivery.message.routingKey + val message = delivery.message.body.decodeToString() + println(" [$subscriberName] Received '$routingKey':'$message'") + } + + channel.close() + connection.close() +} diff --git a/kotlin/src/commonMain/kotlin/Topics.kt b/kotlin/src/commonMain/kotlin/Topics.kt new file mode 100644 index 00000000..aa158ee7 --- /dev/null +++ b/kotlin/src/commonMain/kotlin/Topics.kt @@ -0,0 +1,92 @@ +import dev.kourier.amqp.BuiltinExchangeType +import dev.kourier.amqp.Properties +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import io.ktor.utils.io.core.* +import kotlinx.coroutines.* + +suspend fun emitLogTopic(coroutineScope: CoroutineScope, routingKey: String, message: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare a topic exchange - routes based on pattern matching + channel.exchangeDeclare( + "topic_logs", + BuiltinExchangeType.TOPIC, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Publish with a topic routing key (dot-separated words) + channel.basicPublish( + message.toByteArray(), + exchange = "topic_logs", + routingKey = routingKey, // Format: . or similar + properties = Properties() + ) + println(" [x] Sent '$routingKey':'$message'") + + channel.close() + connection.close() +} + +suspend fun receiveLogsTopic(coroutineScope: CoroutineScope, subscriberName: String, bindingKeys: List) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare the same topic exchange + channel.exchangeDeclare( + "topic_logs", + BuiltinExchangeType.TOPIC, + durable = false, + autoDelete = false, + internal = false, + arguments = emptyMap() + ) + + // Declare a temporary queue + val queueDeclared = channel.queueDeclare( + name = "", + durable = false, + exclusive = true, + autoDelete = true, + arguments = emptyMap() + ) + val queueName = queueDeclared.queueName + println(" [$subscriberName] Created temporary queue: $queueName") + + // Bind the queue with topic patterns + for (bindingKey in bindingKeys) { + channel.queueBind( + queue = queueName, + exchange = "topic_logs", + routingKey = bindingKey // Pattern with wildcards: * or # + ) + println(" [$subscriberName] Binding queue to pattern '$bindingKey'") + } + println(" [$subscriberName] Waiting for messages matching ${bindingKeys.joinToString(", ")}") + + // Consume messages + val consumer = channel.basicConsume(queueName, noAck = true) + + for (delivery in consumer) { + val routingKey = delivery.message.routingKey + val message = delivery.message.body.decodeToString() + println(" [$subscriberName] Received '$routingKey':'$message'") + } + + channel.close() + connection.close() +} diff --git a/kotlin/src/commonMain/kotlin/WorkQueues.kt b/kotlin/src/commonMain/kotlin/WorkQueues.kt new file mode 100644 index 00000000..4d53e8a7 --- /dev/null +++ b/kotlin/src/commonMain/kotlin/WorkQueues.kt @@ -0,0 +1,95 @@ +import dev.kourier.amqp.connection.amqpConfig +import dev.kourier.amqp.connection.createAMQPConnection +import dev.kourier.amqp.properties +import io.ktor.utils.io.core.* +import kotlinx.coroutines.* + +suspend fun newTask(coroutineScope: CoroutineScope, message: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare a durable queue to survive broker restarts + channel.queueDeclare( + "task_queue", + durable = true, // Queue survives broker restart + exclusive = false, + autoDelete = false, + arguments = emptyMap() + ) + + // Mark messages as persistent (deliveryMode = 2) + val properties = properties { + deliveryMode = 2u // Persistent message + } + + channel.basicPublish( + message.toByteArray(), + exchange = "", + routingKey = "task_queue", + properties = properties + ) + println(" [x] Sent '$message'") + + channel.close() + connection.close() +} + +suspend fun worker(coroutineScope: CoroutineScope, workerName: String) { + val config = amqpConfig { + server { + host = "localhost" + } + } + val connection = createAMQPConnection(coroutineScope, config) + val channel = connection.openChannel() + + // Declare the same durable queue + channel.queueDeclare( + "task_queue", + durable = true, + exclusive = false, + autoDelete = false, + arguments = emptyMap() + ) + println(" [$workerName] Waiting for messages. To exit press CTRL+C") + + // Fair dispatch: don't give more than one message to a worker at a time + channel.basicQos(count = 1u, global = false) + + // Consume with manual acknowledgment (noAck = false) + val consumer = channel.basicConsume("task_queue", noAck = false) + + for (delivery in consumer) { + val message = delivery.message.body.decodeToString() + println(" [$workerName] Received '$message'") + + try { + // Simulate work - each dot represents 1 second of work + doWork(message) + println(" [$workerName] Done") + } finally { + // Manual acknowledgment - message is removed from queue + channel.basicAck(delivery.message, multiple = false) + } + } + + channel.close() + connection.close() +} + +/** + * Simulates time-consuming work. + * Each dot in the task string represents 1 second of work. + */ +private suspend fun doWork(task: String) { + for (ch in task) { + if (ch == '.') { + delay(1000) // Sleep for 1 second per dot + } + } +} From 505c30c82c3b1406aac7e08f320f0525adfaf2b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:51:00 +0000 Subject: [PATCH 659/659] chore(deps): bump org.apache.maven.plugins:maven-resources-plugin Bumps [org.apache.maven.plugins:maven-resources-plugin](https://github.com/apache/maven-resources-plugin) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-resources-plugin/releases) - [Commits](https://github.com/apache/maven-resources-plugin/compare/maven-resources-plugin-3.3.1...v3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-resources-plugin dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- java-stream-mvn/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-stream-mvn/pom.xml b/java-stream-mvn/pom.xml index dd8ef23c..2053064f 100644 --- a/java-stream-mvn/pom.xml +++ b/java-stream-mvn/pom.xml @@ -44,7 +44,7 @@ maven-resources-plugin - 3.3.1 + 3.4.0

    SFJ-00z{cSks+xwP>TvnN}VPX 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

  • 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

    SFJ-00z{cSks+xwP>TvnN}VPX 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

    lD6yA@)A{jQ60V6bwZg?EhdsR44+umrivs|P4% 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%0D4+JNRW9tAY;+T)pgr80_dSq? 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%0A#^n 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 b{5tXT%cM2{ql7?Wz<*O9EZ8jq-Gux<11)h6 diff --git a/java-idea/lib/amqp-client-3.5.4.jar b/java-idea/lib/amqp-client-3.5.4.jar deleted file mode 100644 index 97aa29140ab1357ed3fe8da185427eae47f581cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417376 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