diff --git a/src/facilities/incubator/incubatorInteract.js b/src/facilities/incubator/incubatorInteract.js index b4b783d308797e0204d38c3b3ee2fd5228608cd1..12b1d5284db76baf1417f0ad3bebe5dad686d196 100644 --- a/src/facilities/incubator/incubatorInteract.js +++ b/src/facilities/incubator/incubatorInteract.js @@ -223,9 +223,9 @@ App.UI.incubator = function() { const choices = document.createElement("div"); choices.classList.add("choices"); r.push(App.UI.DOM.slaveDescriptionDialog(slave)); - r.push(` is ${slave.pregWeek} ${(slave.pregWeek === 1) ? `week`:`weeks`} pregnant with`); + r.push(` is ${slave.pregWeek} ${(slave.pregWeek === 1) ? `week` : `weeks`} pregnant with`); if (slave.pregSource === 0 || slave.preg <= 5) { - r.push(`someone's${(slave.preg <= 5) ? `, though it is too early to tell whose,`:``}`); + r.push(`someone's${(slave.preg <= 5) ? `, though it is too early to tell whose,` : ``}`); } else if (slave.pregSource === -1) { r.push(`your`); } else if (slave.pregSource === -2) { @@ -282,9 +282,8 @@ App.UI.incubator = function() { `Keep another child`, () => { WombAddToGenericReserve(slave, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); if (_reservedIncubator > 0) { @@ -293,9 +292,8 @@ App.UI.incubator = function() { `Keep one less child`, () => { WombCleanGenericReserve(slave, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -305,9 +303,8 @@ App.UI.incubator = function() { `Keep none of ${his} children`, () => { WombCleanGenericReserve(slave, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -317,9 +314,8 @@ App.UI.incubator = function() { `Keep the rest of ${his} children`, () => { WombAddToGenericReserve(slave, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -341,9 +337,8 @@ App.UI.incubator = function() { `Keep one less child`, () => { WombCleanGenericReserve(slave, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); if (_reservedIncubator > 1) { @@ -352,9 +347,8 @@ App.UI.incubator = function() { `Keep none of ${his} children`, () => { WombCleanGenericReserve(slave, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -379,9 +373,8 @@ App.UI.incubator = function() { `Keep ${his} ${((_WL > 1) ? "children" : "child")} here instead`, () => { WombChangeReserveType(slave, 'nursery', 'incubator'); - }, - [], - `Incubator` + refresh(); + } ) ); } else { @@ -410,9 +403,8 @@ App.UI.incubator = function() { `Keep ${(_WL > 1) ? "a" : "the"} child`, () => { WombAddToGenericReserve(slave, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); if ((_WL > 1) && (V.reservedChildren + _WL - _reservedIncubator) <= _freeTanks) { @@ -421,9 +413,8 @@ App.UI.incubator = function() { `Keep all of ${his} children`, () => { WombAddToGenericReserve(slave, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -503,9 +494,8 @@ App.UI.incubator = function() { `Keep another child`, () => { WombAddToGenericReserve(V.PC, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); if (_reservedIncubator > 0) { @@ -514,9 +504,8 @@ App.UI.incubator = function() { `Keep one less child`, () => { WombCleanGenericReserve(V.PC, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -526,9 +515,8 @@ App.UI.incubator = function() { `Keep none of your children`, () => { WombCleanGenericReserve(V.PC, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -538,9 +526,8 @@ App.UI.incubator = function() { `Keep the rest of your children`, () => { WombAddToGenericReserve(V.PC, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -560,9 +547,8 @@ App.UI.incubator = function() { `Keep one less child`, () => { V.reservedChildren -= 1; - }, - [], - `Incubator` + refresh(); + } ) ); if (_reservedIncubator > 1) { @@ -570,9 +556,8 @@ App.UI.incubator = function() { `Keep none of your children`, () => { WombCleanGenericReserve(V.PC, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ); } } @@ -589,9 +574,8 @@ App.UI.incubator = function() { `Keep your ${(_WL === 1) ? `child` : `children`} here instead`, () => { WombChangeReserveType(V.PC, 'nursery', 'incubator'); - }, - [], - `Incubator` + refresh(); + } ); } else { r.push(``); @@ -614,18 +598,16 @@ App.UI.incubator = function() { `Keep ${(_WL > 1) ? `a` : `your`} child`, () => { WombAddToGenericReserve(V.PC, 'incubator', 1); - }, - [], - `Incubator` + refresh(); + } ); if ((_WL > 1) && (V.reservedChildren + _WL - _reservedIncubator) <= _freeTanks) { App.UI.DOM.link( `Keep all of your children|Incubator`, () => { WombAddToGenericReserve(V.PC, 'incubator', 9999); - }, - [], - `Incubator` + refresh(); + } ); } } @@ -661,9 +643,8 @@ App.UI.incubator = function() { } WombCleanGenericReserve(V.PC, 'incubator', 9999); } - }, - [], - "Incubator" + refresh(); + } ) ); } @@ -942,7 +923,7 @@ App.UI.incubator = function() { V.tanks[i].slaveName, (v) => { V.tanks[i].slaveName = v; - Engine.play("Incubator"); + refresh(); } ) ); @@ -1010,21 +991,31 @@ App.UI.incubator = function() { r = []; if (V.tanks[i].ovaries === 0) { if (V.tankOrgans.ovaries !== 1) { - r.push(makeLink("Prepare ovaries", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "ovaries"); })); + r.push( + makeLink( + "Prepare ovaries", + () => { + App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "ovaries"); + }, + refresh + ) + ); } else { r.push(App.UI.DOM.makeElement("span", `Ovaries are already prepared.`, "detail")); } } if (V.tanks[i].dick === 0) { if (V.tankOrgans.penis !== 1) { - r.push(makeLink("Prepare penis", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "penis"); })); + r.push( + makeLink("Prepare penis", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "penis"); }, refresh) + ); } else { r.push(App.UI.DOM.makeElement("span", `A penis is already prepared`, "detail")); } } if (V.tanks[i].balls === 0) { if (V.tankOrgans.testicles !== 1) { - r.push(makeLink("Prepare testicles", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "testicles"); })); + r.push(makeLink("Prepare testicles", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "testicles"); }, refresh)); } else { r.push(App.UI.DOM.makeElement("span", `Testicles are already prepared.`, "detail")); } @@ -1042,10 +1033,10 @@ App.UI.incubator = function() { r.push(App.UI.DOM.makeElement("span", `${He} appears to be blind in ${his} right eye:`)); } if (vision.left === 0 && V.tankOrgans.leftEye !== 1) { - r.push(makeLink("Prepare left eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "leftEye"); })); + r.push(makeLink("Prepare left eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "leftEye"); }, refresh)); } if (vision.right === 0 && V.tankOrgans.rightEye !== 1) { - r.push(makeLink("Prepare right eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "rightEye"); })); + r.push(makeLink("Prepare right eye", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "rightEye"); }, refresh)); } if (vision.left === 0 && vision.right === 0 && linkArray.length === 2) { r.push( @@ -1054,7 +1045,8 @@ App.UI.incubator = function() { () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "rightEye"); App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "leftEye"); - } + }, + refresh ) ); } @@ -1071,7 +1063,7 @@ App.UI.incubator = function() { r = []; r.push(`${He} appears to be mute: `); if (V.tankOrgans.voicebox !== 1) { - r.push(makeLink("Prepare vocal cords", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "voicebox"); })); + r.push(makeLink("Prepare vocal cords", () => { App.Medicine.OrganFarm.growIncubatorOrgan(V.tanks[i], "voicebox"); }, refresh)); } else { r.push(App.UI.DOM.makeElement("span", `Vocal cords are already prepared.`, `detail`)); } @@ -1087,19 +1079,19 @@ App.UI.incubator = function() { if (V.incubatorWeightSetting === 1) { row.append(`Weight is not being properly managed; excessive weight gain is likely. `); } else { - linkArray.push(makeLink(`Estimate only`, () => { V.incubatorWeightSetting = 1; })); + linkArray.push(makeLink(`Estimate only`, () => { V.incubatorWeightSetting = 1; }, refresh)); } if (V.incubatorWeightSetting === 2) { row.append(`Weight is being carefully managed; children will be released at a healthy weight. `); } else { - linkArray.push(makeLink(`Activate`, () => { V.incubatorWeightSetting = 2; })); + linkArray.push(makeLink(`Activate`, () => { V.incubatorWeightSetting = 2; }, refresh)); } if (V.incubatorWeightSetting === 0) { row.append(`Weight management systems are offline; children will likely be malnourished. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorWeightSetting = 0; })); + linkArray.push(makeLink(`Disable`, () => { V.incubatorWeightSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); el.append(row); @@ -1110,19 +1102,19 @@ App.UI.incubator = function() { if (V.incubatorMusclesSetting === 2) { row.append(`Strength levels are purposefully set higher than recommended; excessive muscle gain is likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorMusclesSetting = 2; })); + linkArray.push(makeLink(`Overload`, () => { V.incubatorMusclesSetting = 2; }, refresh)); } if (V.incubatorMusclesSetting === 1) { row.append(`Musculature is being carefully managed; children will be released with near normal strength. `); } else { - linkArray.push(makeLink(`Activate`, () => { V.incubatorMusclesSetting = 1; })); + linkArray.push(makeLink(`Activate`, () => { V.incubatorMusclesSetting = 1; }, refresh)); } if (V.incubatorMusclesSetting === 0) { row.append(`Strength management systems are offline; children will likely be released extremely weak. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorMusclesSetting = 0; })); + linkArray.push(makeLink(`Disable`, () => { V.incubatorMusclesSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); @@ -1134,19 +1126,19 @@ App.UI.incubator = function() { if (V.incubatorReproductionSetting === 2) { row.append(`Hormone levels are purposefully set higher than recommended; over-active reproductive systems are likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorReproductionSetting = 2; })); + linkArray.push(makeLink(`Overload`, () => { V.incubatorReproductionSetting = 2; }, refresh)); } if (V.incubatorReproductionSetting === 1) { row.append(`Hormone levels are being carefully managed; children will be released with fully functional reproductive organs. `); } else { - linkArray.push(makeLink(`Limit`, () => { V.incubatorReproductionSetting = 1; })); + linkArray.push(makeLink(`Limit`, () => { V.incubatorReproductionSetting = 1; }, refresh)); } if (V.incubatorReproductionSetting === 0) { row.append(`Reproduction management systems are offline; children will undergo normal puberty. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorReproductionSetting = 0; })); + linkArray.push(makeLink(`Disable`, () => { V.incubatorReproductionSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); el.append(row); @@ -1158,25 +1150,25 @@ App.UI.incubator = function() { if (V.incubatorPregAdaptationSetting === 3) { row.append(`Pregnancy adaptation system online: All. `); } else { - linkArray.push(makeLink(`All`, () => { V.incubatorPregAdaptationSetting = 3; })); + linkArray.push(makeLink(`All`, () => { V.incubatorPregAdaptationSetting = 3; }, refresh)); } if (V.incubatorPregAdaptationSetting === 2) { row.append(`Pregnancy adaptation system online: Males only. `); } else { - linkArray.push(makeLink(`Males`, () => { V.incubatorPregAdaptationSetting = 2; })); + linkArray.push(makeLink(`Males`, () => { V.incubatorPregAdaptationSetting = 2; }, refresh)); } if (V.incubatorPregAdaptationSetting === 1) { row.append(`Pregnancy adaptation system online: Females only. `); } else { - linkArray.push(makeLink(`Females`, () => { V.incubatorPregAdaptationSetting = 1; })); + linkArray.push(makeLink(`Females`, () => { V.incubatorPregAdaptationSetting = 1; }, refresh)); } if (V.incubatorPregAdaptationSetting === 0) { row.append(`Pregnancy adaptation system offline. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorPregAdaptationSetting = 0; })); + linkArray.push(makeLink(`Disable`, () => { V.incubatorPregAdaptationSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); el.append(row); @@ -1188,25 +1180,25 @@ App.UI.incubator = function() { if (V.incubatorPregAdaptationPower === 1) { row.append(`Pregnancy adaptation programmed to advanced procedures. Up to triplet pregnancy should be safe for the subjects.`); } else { - linkArray.push(makeLink(`Advanced`, () => { V.incubatorPregAdaptationSetting = 1; })); + linkArray.push(makeLink(`Advanced`, () => { V.incubatorPregAdaptationSetting = 1; }, refresh)); } if (V.incubatorPregAdaptationPower === 2) { row.append(`Pregnancy adaptation programmed to intensive procedures. Up to octuplet pregnancy should be possible for the subjects. Warning! Side effects may occur to health and mental condition.`); } else { - linkArray.push(makeLink(`Intensive`, () => { V.incubatorPregAdaptationSetting = 2; })); + linkArray.push(makeLink(`Intensive`, () => { V.incubatorPregAdaptationSetting = 2; }, refresh)); } if (V.incubatorPregAdaptationPower === 3) { row.append(`Pregnancy adaptation programmed to extreme procedures. Normally unsustainable pregnancies may be possible for some subjects. Actual capacity will vary with genetic and other individual conditions. WARNING! Extreme side effects may occur to health and mental condition!`); } else { - linkArray.push(makeLink(`Extreme`, () => { V.incubatorPregAdaptationSetting = 3; })); + linkArray.push(makeLink(`Extreme`, () => { V.incubatorPregAdaptationSetting = 3; }, refresh)); } if (V.incubatorPregAdaptationPower === 0) { row.append(`Pregnancy adaptation programmed to standard procedures. Normal pregnancy should be safe for subjects.`); } else { - linkArray.push(makeLink(`Standard`, () => { V.incubatorPregAdaptationSetting = 0; })); + linkArray.push(makeLink(`Standard`, () => { V.incubatorPregAdaptationSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); App.UI.DOM.appendNewElement("span", row, `Due to the high complexity and steep risks of the procedure, settings will not be changed on tanks in use.`, "note"); @@ -1219,19 +1211,19 @@ App.UI.incubator = function() { if (V.incubatorGrowthStimsSetting === 2) { row.append(`Children are injected with higher than recommended doses of stimulants; exceeding expected final height is likely. `); } else { - linkArray.push(makeLink(`Overload`, () => { V.incubatorGrowthStimsSetting = 2; })); + linkArray.push(makeLink(`Overload`, () => { V.incubatorGrowthStimsSetting = 2; }, refresh)); } if (V.incubatorGrowthStimsSetting === 1) { row.append(`Children are injected with the recommended dosage of stimulants; they will grow to their full expected height. `); } else { - linkArray.push(makeLink(`Limit`, () => { V.incubatorGrowthStimsSetting = 1; })); + linkArray.push(makeLink(`Limit`, () => { V.incubatorGrowthStimsSetting = 1; }, refresh)); } if (V.incubatorGrowthStimsSetting === 0) { row.append(`Growth stimulant injection systems are offline; children will develop normally. `); } else { - linkArray.push(makeLink(`Disable`, () => { V.incubatorGrowthStimsSetting = 0; })); + linkArray.push(makeLink(`Disable`, () => { V.incubatorGrowthStimsSetting = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); el.append(row); @@ -1244,7 +1236,7 @@ App.UI.incubator = function() { if (V.tanks[_inc].growTime <= 0) { V.incubatorOldID = V.tanks[_inc].ID; /* single slave case */ - const _tempObject = { object: V.tanks[_inc], ID: V.tanks[_inc].ID }; + const _tempObject = {object: V.tanks[_inc], ID: V.tanks[_inc].ID}; V.newSlavePool.push(clone(_tempObject)); V.tanks.splice(_inc, 1); _inc--; @@ -1275,7 +1267,7 @@ App.UI.incubator = function() { V.incubatorName, (v) => { V.incubatorName = v; - Engine.play("Incubator"); + refresh(); } ) ); @@ -1299,7 +1291,7 @@ App.UI.incubator = function() { V.targetAge, (v) => { V.targetAge = v; - Engine.play("Incubator"); + refresh(); }, true ) @@ -1310,9 +1302,8 @@ App.UI.incubator = function() { `Minimum Legal Age`, () => { V.targetAge = V.minimumSlaveAge; - }, - [], - `Incubator` + refresh(); + } ) ); linkArray.push( @@ -1320,9 +1311,8 @@ App.UI.incubator = function() { `Average Age of Fertility`, () => { V.targetAge = V.fertilityAge; - }, - [], - `Incubator` + refresh(); + } ) ); linkArray.push( @@ -1330,9 +1320,8 @@ App.UI.incubator = function() { `Average Age of Potency`, () => { V.targetAge = V.potencyAge; - }, - [], - `Incubator` + refresh(); + } ) ); linkArray.push( @@ -1340,9 +1329,8 @@ App.UI.incubator = function() { `Legal Adulthood`, () => { V.targetAge = 18; - }, - [], - `Incubator` + refresh(); + } ) ); r.push(App.UI.DOM.generateLinksStrip(linkArray)); @@ -1357,9 +1345,8 @@ App.UI.incubator = function() { `Individual release`, () => { V.incubatorBulkRelease = 0; - }, - [], - `Incubator` + refresh(); + } ) ); } else { @@ -1369,9 +1356,8 @@ App.UI.incubator = function() { `Bulk release`, () => { V.incubatorBulkRelease = 1; - }, - [], - `Incubator` + refresh(); + } ) ); } @@ -1390,9 +1376,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeSpeed = 52; + refresh(); }, - [], - "Incubator" ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1405,9 +1390,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeSpeed = 18; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1420,9 +1404,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeSpeed = 9; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1435,9 +1418,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeSpeed = 6; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1457,9 +1439,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeWeight = 1; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1479,9 +1460,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeMuscles = 1; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1501,9 +1481,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeReproduction = 1; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1523,9 +1502,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeOrgans = 1; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1547,9 +1525,8 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradeOrgans = 1; - }, - [], - "Incubator" + refresh(); + } ) ); App.UI.DOM.appendNewElement("span", row, `Costs ${cashFormat(cost)} and will increase upkeep costs`, "note"); @@ -1587,8 +1564,9 @@ App.UI.incubator = function() { () => { cashX(forceNeg(cost), "capEx"); V.incubatorUpgradePregAdaptation = 1; + refresh(); }, - "Incubator", + "", `Costs ${cashFormat(cost)} and will increase upkeep costs` ) ); @@ -1665,23 +1643,30 @@ App.UI.incubator = function() { } } - function makeLink(title, func) { + /** + * + * @param {string} title + * @param {function():void} func + * @param {function():void} refresh + */ + function makeLink(title, func, refresh) { return App.UI.DOM.link( title, - func, - [], - "Incubator" + () => { + func; + refresh; + } ); } /** * * @param {string} title * @param {function():void} func - * @param {string} [passage="Incubator"] + * @param {string} [passage=""] * @param {string} [note] * @returns {HTMLElement} */ - function choice(title, func, passage = "Incubator", note = "") { + function choice(title, func, passage = "", note = "") { const div = document.createElement("div"); div.classList.add("choices"); div.append( @@ -1703,9 +1688,9 @@ App.UI.incubator = function() { } /** - * - * @param {string} id - * @param {HTMLElement} element + * + * @param {string} id + * @param {HTMLElement} element * @returns {HTMLElement} */ function makeSpanIded(id, element) {