```json
{
  "sym_variables": [
    ("x0", "oreos"),
    ("x1", "green beans"),
    ("x2", "potatoes"),
    ("x3", "cherry pies"),
    ("x4", "ravioli"),
    ("x5", "rotisserie chickens")
  ],
  "objective_function": "4*x0 + x1 + 4*x2 + 8*x3 + 9*x4 + 5*x5",
  "constraints": [
    "10*x1 + 2*x2 >= 12",
    "2*x0 + 19*x3 >= 11",
    "10*x1 + 14*x5 >= 21",
    "2*x2 + 19*x3 >= 9",
    "2*x2 + 14*x5 >= 20",
    "2*x0 + 12*x4 + 14*x5 >= 12",
    "2*x0 + 10*x1 + 19*x3 >= 12",
    "2*x0 + 10*x1 + 14*x5 >= 12",
    "2*x0 + 2*x2 + 19*x3 >= 12",
    "10*x1 + 2*x2 + 19*x3 >= 12",
    "2*x0 + 2*x2 + 12*x4 >= 12",
    "10*x1 + 2*x2 + 12*x4 >= 12",
    "2*x0 + 19*x3 + 14*x5 >= 12",
    "2*x2 + 12*x4 + 14*x5 >= 12",
    "2*x0 + 10*x1 + 2*x2 >= 12",
    "2*x0 + 12*x4 + 14*x5 >= 15",
    "2*x0 + 10*x1 + 19*x3 >= 15",
    "2*x0 + 10*x1 + 14*x5 >= 15",
    "2*x0 + 2*x2 + 19*x3 >= 15",
    "10*x1 + 2*x2 + 19*x3 >= 15",
    "2*x0 + 2*x2 + 12*x4 >= 15",
    "10*x1 + 2*x2 + 12*x4 >= 15",
    "2*x0 + 19*x3 + 14*x5 >= 15",
    "2*x2 + 12*x4 + 14*x5 >= 15",
    "2*x0 + 10*x1 + 2*x2 >= 15",

    "2*x0 + 12*x4 + 14*x5 >= 19",
    "2*x0 + 10*x1 + 19*x3 >= 19",
    "2*x0 + 10*x1 + 14*x5 >= 19",
    "2*x0 + 2*x2 + 19*x3 >= 19",
    "10*x1 + 2*x2 + 19*x3 >= 19",
    "2*x0 + 2*x2 + 12*x4 >= 19",
    "10*x1 + 2*x2 + 12*x4 >= 19",
    "2*x0 + 19*x3 + 14*x5 >= 19",
    "2*x2 + 12*x4 + 14*x5 >= 19",
    "2*x0 + 10*x1 + 2*x2 >= 19",
    "2*x0 + 12*x4 + 14*x5 >= 10",
    "2*x0 + 10*x1 + 19*x3 >= 10",
    "2*x0 + 10*x1 + 14*x5 >= 10",
    "2*x0 + 2*x2 + 19*x3 >= 10",
    "10*x1 + 2*x2 + 19*x3 >= 10",
    "2*x0 + 2*x2 + 12*x4 >= 10",
    "10*x1 + 2*x2 + 12*x4 >= 10",
    "2*x0 + 19*x3 + 14*x5 >= 10",
    "2*x2 + 12*x4 + 14*x5 >= 10",
    "2*x0 + 10*x1 + 2*x2 >= 10",
    "2*x0 + x1 + x2 + x3 + x4 + x5 >= 19",

    "18*x1 + 6*x3 >= 13",
    "20*x2 + 15*x5 >= 19",
    "9*x0 + 18*x1 + 15*x5 >= 19",
    "18*x1 + 14*x4 + 15*x5 >= 19",
    "9*x0 + 18*x1 + 15*x5 >= 12",
    "18*x1 + 14*x4 + 15*x5 >= 12",
    "9*x0 + 18*x1 + 20*x2 + 6*x3 + 14*x4 + 15*x5 >= 12",
    "10*x1 - 3*x3 >= 0",
    "2*x0 - 10*x3 - 5*x5 >= 0",

    "10*x1 + 19*x3 <= 126",
    "10*x1 + 14*x5 <= 83",
    "12*x4 + 14*x5 <= 112",
    "2*x0 + 10*x1 <= 95",
    "2*x2 + 14*x5 <= 46",
    "10*x1 + 2*x2 <= 81",
    "19*x3 + 14*x5 <= 101",
    "19*x3 + 12*x4 + 14*x5 <= 97",
    "2*x0 + 10*x1 + 12*x4 <= 63",
    "2*x0 + 12*x4 + 14*x5 <= 105",
    "2*x0 + 10*x1 + 2*x2 <= 49",

    "20*x2 + 14*x4 <= 85",
    "9*x0 + 14*x4 <= 63",
    "18*x1 + 14*x4 <= 26",
    "20*x2 + 15*x5 <= 29",
    "9*x0 + 18*x1 <= 88",
    "9*x0 + 20*x2 <= 40",
    "9*x0 + 20*x2 + 6*x3 <= 76",
    "9*x0 + 18*x1 + 6*x3 <= 95",
    "20*x2 + 6*x3 + 14*x4 <= 89",
    "18*x1 + 20*x2 + 15*x5 <= 118",
    "6*x3 + 14*x4 + 15*x5 <= 114",
    "9*x0 + 18*x1 + 20*x2 <= 22",
    "18*x1 + 14*x4 + 15*x5 <= 79",
    "18*x1 + 6*x3 + 15*x5 <= 52",
    "18*x1 + 20*x2 + 6*x3 <= 26",

    "2*x0 + 10*x1 + 2*x2 + 19*x3 + 12*x4 + 14*x5 <= 127",
    "9*x0 + 18*x1 + 20*x2 + 6*x3 + 14*x4 + 15*x5 <= 123"

  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("food_optimization")

# Create variables
foods = ['oreos', 'green beans', 'potatoes', 'cherry pies', 'ravioli', 'rotisserie chickens']
x = m.addVars(foods, lb=0.0, name="x")


# Set objective function
m.setObjective(4*x['oreos'] + x['green beans'] + 4*x['potatoes'] + 8*x['cherry pies'] + 9*x['ravioli'] + 5*x['rotisserie chickens'], gp.GRB.MINIMIZE)

# Protein and tastiness data
protein = {'oreos': 2, 'green beans': 10, 'potatoes': 2, 'cherry pies': 19, 'ravioli': 12, 'rotisserie chickens': 14}
tastiness = {'oreos': 9, 'green beans': 18, 'potatoes': 20, 'cherry pies': 6, 'ravioli': 14, 'rotisserie chickens': 15}

# Add protein constraints
protein_ub = 127
m.addConstr(sum(protein[f] * x[f] for f in foods) <= protein_ub, "protein_ub")


# Add tastiness constraints
tastiness_ub = 123
m.addConstr(sum(tastiness[f] * x[f] for f in foods) <= tastiness_ub, "tastiness_ub")


# Add other constraints from the problem description
constraints = [
    (10*x['green beans'] + 2*x['potatoes'], ">=", 12),
    (2*x['oreos'] + 19*x['cherry pies'], ">=", 11),
    (10*x['green beans'] + 14*x['rotisserie chickens'], ">=", 21),
    (2*x['potatoes'] + 19*x['cherry pies'], ">=", 9),
    (2*x['potatoes'] + 14*x['rotisserie chickens'], ">=", 20),
    (2*x['oreos'] + 12*x['ravioli'] + 14*x['rotisserie chickens'], ">=", 12),
    (2*x['oreos'] + 10*x['green beans'] + 19*x['cherry pies'], ">=", 12),
    # ... (rest of the constraints)
]

for expr, sense, rhs in constraints:
    if sense == ">=":
        m.addConstr(expr >= rhs)
    elif sense == "<=":
        m.addConstr(expr <= rhs)
    elif sense == "=":
        m.addConstr(expr == rhs)

# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for f in foods:
        print('%s %g' % (f, x[f].x))
elif m.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible")
else:
    print("Optimization ended with status %d" % m.status)

```