### v0.6.1
* Updating xapp_fwk to v0.4.15, that contains RIC_HEALTH_CHECK message types

### v0.6.0
* Updating RMR version to 4.0.5 

### v0.5.9
* Updating to xapp frw v0.4.10, for dcap to adxapp new message type

### v0.5.8
* Updating to RMR version 4.0.2

### v0.5.7-3
* Updating to RMR version 3.8.2

### v0.5.7-2
* Supporting of reading subscriptions from subscription manager while restarting rtmgr

### v0.5.7-1
* Increased http client timeout to 15sec 

### v0.5.7
* Commented subscription list retrieval during rtmgr startUp 

### v0.5.6-2
* RT records are sent in a group rather than individually. Group is configurabl 

### v0.5.6-1
* Moving to ubuntu 18 and fixing UT's

### v0.5.6
* Fix to convert service name to IP during Route update Request

### v0.5.5
* Supporting xApp to xApp Routes handling 

### v0.5.3
* RMR updated to v3.6.0 with support for E2 Setup message types

### v0.5.2
* Switch to RMR Si95 mode 

### v0.5.1
* Removal of go mangoes and using RMR nng

### v0.4.16
* getAllSubscriptions API (RM -> SM) during restart of routing manager handled

### v0.4.15
* Retained (E2M->E2T issue) - retrying when is_Ready flag in socket handle is false 

### v0.4.14
* Restart/Start of RM, fetch E2T data from E2manager - implementation in RM for v1/e2t/list API handling 

### v0.4.13
* Corrected route table syntax in case of broadcast message 

### v0.4.12
* Added debug API to request route and configuration details in routing manager 

### v0.4.11
* Added code for subscription merge and added RMR from xapp-framework 

### v0.4.10
* Temporary Fix for R3 (E2M->E2T issue) - retrying when is_Ready flag in socket handle is false 

### v0.4.8
* Entry in meid map will only contain the delta change 

### v0.4.7
* Check DNS lookup for E2T address, RED Button and KEEP alive message routes added for new E2T Address 

### v0.4.6
* Static platform routes can be configured via configuration file

### v0.4.5
* Multiple E2T instance Feature: Introduced APIs Delete E2T Instance, associate RANs to E2T and disassociate RANs from E2T Instance.

### v0.4.4
* Create E2T Instance API introduced for Multiple E2T Feature

### v0.4.3
* Included RMR changes that has MEID implementation

### v0.4.2
* Added Routes when AC-xApp is deployed 
* included xapp-framework. Using only config and Logger module for now.

### v0.4.1
* Fixed integration and subscription routes related issues for R3

### v0.3.9
* Added RSM platform component routes for message types RAN_CONNECTED, RAN_RESTARTED, RAN_RECONFIGURED, RIC_RES_STATUS_REQ,RIC_RES_STATUS_RESP and RIC_RES_STATUS_FAILURE
* xApp manager interface changes for Subscription Request API

### v0.3.8
* Adding docs and updating release notes for routing manager

### v0.3.7
* Fix routes for RIC_ENDC_X2_SETUP_REQ, RIC_ENDC_X2_SETUP_RESP and RIC_ENDC_X2_SETUP_FAILURE

### v0.3.6
* Routing Manager is more resilient to missing components
* Put in order the message types

### v0.3.5
* Added platform route to send RIC_SCTP_CLEAR_ALL message to implement big red button.
* Added E2_TERM_INIT and RIC_SCTP_CONNECTION_FAILURE message type routes.

### v0.3.4
* The following tools made available in the final docker image: iputils-ping, net-tools, curl and tcpdump

### v0.3.3
* Introduced delete API over REST interface for subscriptions.

### v0.3.2
* Minor code changes due to appmgr/rtmgr api differences
* Doc update
* UT fixes 

### v0.3.1
* Removed "rte" route types and made all routes to construct of "mse" literal. 

### v0.3.0
* Introduced platform-specific routes: basic components (e2term, ueman, subman, e2man) are stored in a json file (example in manifests/rtmgr/rtmgr-cfg.yaml)
* Introduced subscription add functionality: /ric/v1/xapp-subscriptions endpoint is active, on a POST method it generates endpoint specific mse routing table entries

### v0.2.0
* Introduced http rest functionality
* A way to get intial xapp data from xapp manager while booting the routing manager
* A way to create a sinple webhook registration in the xapp-manager to listen on updates abpout changes in xapps

### v0.1.1
* Changes in swagger API definition
* UTs for SBI, SDL and RPE modules
* New message types according to RMR

### v0.1.0
* Introduces NNGPush SBI module
* Bugfixes in argument handling
* different RMR policy generator for Push and Pub communication

### v0.0.3
* RMR Policy Engine has been refactored to handle receiving groups properly
* Debugging feature has been added
* Multi level logging
* A complex JSON file has been added to xApp Manager to test new behavior

### v0.0.2
* RTMGR (Routing Manager) implementation in Golang 
* Updated project folder structure
* Integration manifests

### v0.0.1
* Initial version of Routing Manager for CI/CD pipeline 
* Dummy solution: still has no real routing capability
* Container is based on the _**tx**_ version of [admin xApp] which already implements [RMR library]
