
}
.green{
    background: hsl(120, 54%, 59%);
}
.red{
    background: rgb(182, 84, 84);
}
Hi! I've been on keto now for just under two years. I'm female and 24 years old. I started at 233.6lbs (16.7 stone) and am currently 144.6lbs (10.3 stone). I do fluctuate with my weight but as long as I stay under around 145lbs, and can fit in my clothes comfortably, I'm happy. So, I've lost 89lbs (over 6 stone) which is amazing! 
When I first started keto everyone told me I was being stupid, that I couldn't lose weight on such a diet. I stuck with it and have never looked back! I still log my food on myfitnesspal (over 600 day streak now!) even if it estimating as I'm not as strict anymore. I went through a very strict phase of weighing everything but I'm at the stage now where I've been doing this long enough to know what I can and can't have. If I do overindulge I get back right on it! (I'm looking at you hotel chocolat with your gorgeous tempting dark chocolate!) 
My advise would be just have a go! Be strict on yourself, read the keto boards on here and see what others are eating for inspiration. Logging and weighing food was essential for me as it gave me clear goals and boundaries. Another tip that always helped me is I would plan out tomorrow's food before I went to bed, measurements included. Then all my calories would be assigned for the day and I would only eat what I had set myself the night before.
I hope my ramblings helped! If anyone has any questions feel free to ask and I'll try and help best I can.// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// Created by <NAME>
// See the file LICENSE for licensing terms.
package xrouterapi

import (
	"encoding/json"
	"net/http"
	"sort"
	"strconv"
	"strings"

	avaxjson "github.com/ava-labs/avalanchego/utils/json"
	"github.com/ava-labs/avalanchego/utils/logging"
	"github.com/blocknetdx/go-xrouter/xrouter"
	"github.com/btcsuite/btcd/chaincfg"
	"github.com/gorilla/rpc/v2"

	"github.com/ava-labs/avalanchego/snow/engine/common"
)

// XRouter is the API service for unprivileged info on a node
type XRouterService struct {
	log    logging.Logger
	config chaincfg.Params
	client *xrouter.Client
}

// NewService returns a new XRouter API service
func NewService(log logging.Logger, config chaincfg.Params, client *xrouter.Client) (*common.HTTPHandler, error) {
	newServer := rpc.NewServer()
	codec := avaxjson.NewCodec()
	newServer.RegisterCodec(codec, "application/json")
	newServer.RegisterCodec(codec, "application/json;charset=UTF-8")
	if err := newServer.RegisterService(&XRouterService{
		log:    log,
		config: config,
		client: client,
	}, "xrouterapi"); err!= nil {
		return nil, err
	}
	return &common.HTTPHandler{Handler: newServer}, nil
}

// GetNetworkServices
type GetNetworkServicesReply struct {
	Reply interface{} `json:"reply"`
}

// GetNetworkServices
// ListNetworkServices lists all known SPV and XCloud network services (xr and xrs).
func (service *XRouterService) GetNetworkServices(_ *http.Request, _ *struct{}, reply *GetNetworkServicesReply) error {
	service.log.Info("XRouter: GetNetworkServices called")

	networkServicesReply := service.client.ListNetworkServices()
	sort.Strings(networkServicesReply)
	reply.Reply = networkServicesReply
	return nil
}

// GetTransaction
type GetTransactionArgs struct {
	Blockchain string `json:"blockchain"`
	ID         string `json:"tx_id"`
	NodeCount  int    `json:"node_count"`
}

type GetTransactionReply struct {
	UUID  string                   `json:"uuid"`
	Reply []map[string]interface{} `json:"reply"`
	Error map[string]interface{}   `json:"error"`
}

// GetTransaction
func (service *XRouterService) GetTransaction(_ *http.Request, args *GetTransactionArgs, reply *GetTransactionReply) error {
	service.log.Info("XRouter: GetTransaction called")
	if uuid, xrouterReply, err := service.client.GetTransactionRaw(args.Blockchain, args.ID, args.NodeCount); err!= nil {
		service.log.Fatal("error: %v", err)
		return err
	} else {
		reply.UUID = uuid
		var b map[string]interface{}
		if strings.Contains(string(xrouterReply[0].Reply), "error") {
			json.Unmarshal(xrouterReply[0].Reply, &b)
			reply.Error = b
			return nil
		}
		for i := range xrouterReply {
			json.Unmarshal(xrouterReply[i].Reply, &b)
			reply.Reply = append(reply.Reply, b)
		}
		return nil
	}
}

// DecodeTransactionRaw
type DecodeTransactionRawArgs struct {
	Blockchain string `json:"blockchain"`
	Tx         string `json:"tx"`
	NodeCount  int    `json:"node_count"`
}

type DecodeTransactionRawReply struct {
	UUID  string                 `json:"uuid"`
	Reply map[string]interface{} `json:"reply"`
	Error map[string]interface{} `json:"error"`
}

// DecodeTransactionRaw
func (service *XRouterService) DecodeTransactionRaw(_ *http.Request, args *DecodeTransactionRawArgs, reply *DecodeTransactionRawReply) error {
	service.log.Info("XRouter: DecodeTransactionRaw %s called with %v", args.Blockchain, args.Tx)
	if uuid, xrouterReply, err := service.client.DecodeTransactionRaw(args.Blockchain, args.Tx, args.NodeCount); err!= nil {
		service.log.Fatal("error: %v", err)
		return err
	} else {
		reply.UUID = uuid
		var b map[string]interface{}
		if strings.Contains(string(xrouterReply[0].Reply), "error") {
			json.Unmarshal(xrouterReply[0].Reply, &b)
			reply.Error = b
			return nil
		}

		json.Unmarshal(xrouterReply[0].Reply, &b)
		reply.Reply = b
	}
	return nil
}

// SendTransaction
type SendTransactionArgs struct {
	Blockchain string      `json:"blockchain"`
	Tx         interface{} `json:"tx"`
	NodeCount  int         `json:"node_count"`
}

type SendTransactionReply struct {
	UUID  string                 `json:"uuid"`
	Reply string                 `json:"reply"`
	Error map[string]interface{} `json:"error"`
}

// SendTransaction
func (service *XRouterService) SendTransaction(_ *http.Request, args *SendTransactionArgs, reply *SendTransactionReply) error {
	service.log.Info("XRouter: SendTransaction called")
	if uuid, xrouterReply, err := service.client.SendTransactionRaw(args.Blockchain, args.Tx, args.NodeCount); err!= nil {
		service.log.Fatal("error: %v", err)
		return err
	} else {
		reply.UUID = uuid
		var b map[string]interface{}
		if strings.Contains(string(xrouterReply[0].Reply), "error") {
			json.Unmarshal(xrouterReply[0].Reply, &b)
			reply.Error = b
			return nil
		}
		reply.Reply = string(xrouterReply[0].Reply)

	}
	return nil
}

// GetTransactions
type GetTransactionsArgs struct {
	Blockchain string `json:"blockchain"`
	IDS        string `json:"tx_ids"`
	NodeCount  int    `json:"node_count"`
}

type GetTransactionsReply struct {
	UUID  string                   `json:"uuid"`
	Reply []map[string]interface{} `json:"reply"`
	Error map[string]interface