```json
{
  "sym_variables": [
    ("x0", "hours worked by Hank"),
    ("x1", "hours worked by Mary"),
    ("x2", "hours worked by Paul"),
    ("x3", "hours worked by Ringo")
  ],
  "objective_function": "6*x0**2 + 3*x0*x1 + 6*x1*x3 + 6*x2*x3 + 8*x3**2 + x0 + 8*x1",
  "constraints": [
    "4*x0**2 + 12*x2**2 >= 26",
    "2*x1 + 12*x3 >= 12",
    "12*x2 + 12*x3 >= 20",
    "2*x1 + 12*x2 >= 26",
    "4*x0 + 12*x3 >= 11",
    "4*x0**2 + 2*x1**2 + 12*x3**2 >= 20",
    "2*x1**2 + 12*x2**2 + 12*x3**2 >= 20",
    "4*x0 + 12*x2 + 12*x3 >= 20",
    "4*x0 + 2*x1 + 12*x2 >= 20",
    "4*x0**2 + 2*x1**2 + 12*x3**2 >= 17",
    "2*x1**2 + 12*x2**2 + 12*x3**2 >= 17",
    "4*x0 + 12*x2 + 12*x3 >= 17",
    "4*x0 + 2*x1 + 12*x2 >= 17",
    "4*x0**2 + 2*x1**2 + 12*x3**2 >= 15",
    "2*x1 + 12*x2 + 12*x3 >= 15",
    "4*x0 + 12*x2 + 12*x3 >= 15",
    "4*x0 + 2*x1 + 12*x2 >= 15",
    "4*x0**2 + 2*x1**2 + 12*x3**2 >= 15",
    "2*x1 + 12*x2 + 12*x3 >= 15",
    "4*x0 + 12*x2 + 12*x3 >= 15",
    "4*x0**2 + 2*x1**2 + 12*x2**2 >= 15",
    "13*x0**2 + 14*x2**2 >= 13",
    "13*x0 + 10*x1 + 6*x3 >= 20",
    "x0**2 + x1**2 >= 12",
    "14*x2**2 + 11*x3**2 >= 33",
    "x0 + 11*x3 >= 19",
    "x0 + 14*x2 >= 11",
    "x1 + 11*x3 >= 16",
    "2*x1 + 12*x3 <= 89",
    "4*x0 + 12*x2 <= 88",
    "2*x1 + 12*x2 <= 36",
    "4*x0 + 2*x1 + 12*x2 + 12*x3 <= 36",
    "13*x0 + 6*x3 <= 81",
    "10*x1**2 + 14*x2**2 <= 61",
    "13*x0 + 14*x2 + 6*x3 <= 51",
    "13*x0 + 10*x1 + 14*x2 <= 109",
    "13*x0**2 + 10*x1**2 + 6*x3**2 <= 78",
    "13*x0 + 10*x1 + 14*x2 + 6*x3 <= 78",
    "x1 + 14*x2 <= 35",
    "x0 + 11*x3 <= 131",
    "x1 + 11*x3 <= 98",
    "x0 + x1 <= 127",
    "x0 + x1 + 14*x2 <= 129",
    "x0 + x1 + 14*x2 + 11*x3 <= 129"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
hank = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="hank")
mary = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="mary")
paul = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="paul")
ringo = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="ringo")


# Set objective function
m.setObjective(6*hank**2 + 3*hank*mary + 6*mary*ringo + 6*paul*ringo + 8*ringo**2 + hank + 8*mary, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(4*hank**2 + 12*paul**2 >= 26)
m.addConstr(2*mary + 12*ringo >= 12)
m.addConstr(12*paul + 12*ringo >= 20)
m.addConstr(2*mary + 12*paul >= 26)
m.addConstr(4*hank + 12*ringo >= 11)
m.addConstr(4*hank**2 + 2*mary**2 + 12*ringo**2 >= 20)
m.addConstr(2*mary**2 + 12*paul**2 + 12*ringo**2 >= 20)
m.addConstr(4*hank + 12*paul + 12*ringo >= 20)
m.addConstr(4*hank + 2*mary + 12*paul >= 20)
m.addConstr(4*hank**2 + 2*mary**2 + 12*ringo**2 >= 17)
m.addConstr(2*mary**2 + 12*paul**2 + 12*ringo**2 >= 17)
m.addConstr(4*hank + 12*paul + 12*ringo >= 17)
m.addConstr(4*hank + 2*mary + 12*paul >= 17)
m.addConstr(4*hank**2 + 2*mary**2 + 12*ringo**2 >= 15)
m.addConstr(2*mary + 12*paul + 12*ringo >= 15)
m.addConstr(4*hank + 12*paul + 12*ringo >= 15)
m.addConstr(4*hank + 2*mary + 12*paul >= 15)
m.addConstr(4*hank**2 + 2*mary**2 + 12*ringo**2 >= 15)
m.addConstr(2*mary + 12*paul + 12*ringo >= 15)
m.addConstr(4*hank + 12*paul + 12*ringo >= 15)
m.addConstr(4*hank**2 + 2*mary**2 + 12*paul**2 >= 15)
m.addConstr(13*hank**2 + 14*paul**2 >= 13)
m.addConstr(13*hank + 10*mary + 6*ringo >= 20)
m.addConstr(hank**2 + mary**2 >= 12)
m.addConstr(14*paul**2 + 11*ringo**2 >= 33)
m.addConstr(hank + 11*ringo >= 19)
m.addConstr(hank + 14*paul >= 11)
m.addConstr(mary + 11*ringo >= 16)
m.addConstr(2*mary + 12*ringo <= 89)
m.addConstr(4*hank + 12*paul <= 88)
m.addConstr(2*mary + 12*paul <= 36)
m.addConstr(4*hank + 2*mary + 12*paul + 12*ringo <= 36)
m.addConstr(13*hank + 6*ringo <= 81)
m.addConstr(10*mary**2 + 14*paul**2 <= 61)
m.addConstr(13*hank + 14*paul + 6*ringo <= 51)
m.addConstr(13*hank + 10*mary + 14*paul <= 109)
m.addConstr(13*hank**2 + 10*mary**2 + 6*ringo**2 <= 78)
m.addConstr(13*hank + 10*mary + 14*paul + 6*ringo <= 78)
m.addConstr(mary + 14*paul <= 35)
m.addConstr(hank + 11*ringo <= 131)
m.addConstr(mary + 11*ringo <= 98)
m.addConstr(hank + mary <= 127)
m.addConstr(hank + mary + 14*paul <= 129)
m.addConstr(hank + mary + 14*paul + 11*ringo <= 129)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status:", m.status)

```
