code:
App.Events.REStaffedMorning = class REStaffedMorning extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => fuckSlavesLength() >= 4,
		];
	}

	actorPrerequisites() {
		const req = [
			s => s.devotion > 50,
			s => s.fuckdoll === 0,
			s => ["please you", "serve in the master suite", "be your Concubine"].includes(s.assignment),
			s => s.rules.release.master === 1,
			canMove,
			hasAllLimbs,
		];

		return [
			req,
			req,
			req,
			req,
		];
	}

	execute(node) {
		let bedSlaves = this.actors.map(getSlave);

		const {
			He, he, his, him, girl
		} = getPronouns(bedSlaves[0]);

		const {
			He2, his2, him2, girl2
		} = getPronouns(bedSlaves[1]).appendSuffix('2');

		const {
			He3, he3, his3, him3, girl3
		} = getPronouns(bedSlaves[2]).appendSuffix('3');

		const {
			He4, his4, him4, himself4
		} = getPronouns(bedSlaves[3]).appendSuffix('4');
		let playerPronouns = getPronouns(V.PC);

		App.Events.drawEventArt(node, bedSlaves.slice(0, 2), "no clothing");

		let t = [
			`Sleep leaves you quickly one morning to the sensation of two of your fucktoys performing human alarm clock duty. You open your eyes and look down: it's ${bedSlaves[0].slaveName} and ${contextualIntro(bedSlaves[0], bedSlaves[1])} today.`
		];

		if (V.PC.dick !== 0) {
			t.push(`${bedSlaves[0].slaveName} is ${(bedSlaves[0].fetish === "cumslut") ? "rapturously" : "industriously"} sucking your dick as it rapidly hardens in ${his} `);
			if (V.PC.vagina !== -1) {
				t.push(`mouth, occasionally letting it pop free so ${he} can run ${his} tongue up and down your cunt.`);
			} else {
				t.push(`mouth.`);
			}
			t.push(`Meanwhile, ${bedSlaves[1].slaveName} is ${(bedSlaves[1].fetish === "cumslut") ? "hungrily" : "gently"} sucking your nuts.`);
			t.push(`The two slaves have crowded close together, and not just so they can both have access to your cock and balls. They're`);
			if (((canAchieveErection(bedSlaves[0]) && bedSlaves[0].chastityPenis === 0) || bedSlaves[0].clit > 3) && ((canAchieveErection(bedSlaves[1]) && bedSlaves[1].chastityPenis === 0) || bedSlaves[1].clit > 3)) {
				t.push(`jerking each other off`);
			} else {
				t.push(`manually stimulating each other`);
			}
			t.push(`as they work.`);
		} else {
			t.push(`An absolutely wonderful mélange of sensations rises to meet you. Each slave is gently sucking one of your hardening nipples, and one hand from each slave is moving delicately across your womanhood, kindling a fire in your lower `);
			if (V.PC.preg > 0 && V.PC.pregData.normalBirth / 1.75) {
				t.push(`belly and exciting the occupant${V.PC.pregType > 1 ? "s" : ""} in your womb.`);
			} else {
				t.push(`belly.`);
			}
			t.push(`They're cuddled up closely under your arms, with a warm body pressed against each side of you. You can feel`);
			if (bedSlaves[0].belly + bedSlaves[1].belly >= 10000 && bedSlaves[0].belly > 4000) {
				t.push(`their swollen middles`);
				if (bedSlaves[0].belly + bedSlaves[1].belly >= 1000000) {
					t.push(`pushing against each other upon you`);
				} else if (bedSlaves[0].belly + bedSlaves[1].belly >= 100000) {
					t.push(`resting against you`);
				} else {
					t.push(`against your ribcage`);
				}
			} else if (bedSlaves[0].belly >= 10000) {
				t.push(`${bedSlaves[0].slaveName}'s ${bellyAdjective(bedSlaves[0])} belly`);
				if (bedSlaves[0].belly >= 100000) {
					t.push(`resting heavily on you`);
				} else {
					t.push(`against your ribcage`);
				}
			} else if (bedSlaves[1].belly >= 10000) {
				t.push(`${bedSlaves[1].slaveName}'s ${bellyAdjective(bedSlaves[1])} belly`);
				if (bedSlaves[1].belly >= 100000) {
					t.push(`resting heavily on you`);
				} else {
					t.push(`against your ribcage`);
				}
			} else if (bedSlaves[0].boobs > 300 && bedSlaves[1].boobs > 300) {
				t.push(`their`);
				if (bedSlaves[0].boobsImplant / bedSlaves[0].boobs >= .60 && bedSlaves[1].boobsImplant / bedSlaves[1].boobs >= .60) {
					t.push(`firm`);
				} else {
					t.push(`soft`);
				}
				t.push(`breasts`);
			} else {
				t.push(`steady breathing`);
			}
			if (canAchieveErection(bedSlaves[0]) && bedSlaves[0].chastityPenis === 0 && canAchieveErection(bedSlaves[1]) && bedSlaves[1].chastityPenis === 0) {
				t.push(`and the twin erections resting against your thighs.`);
			} else {
				t.push(`and the heat between their legs against your thighs.`);
			}
			t.push(`You feel absolutely buried in attentive slave.`);
		}

		t.push(`The bathroom door is open and the shower is running. Though the steam is beginning to fill the glass-walled shower, you can see a pair of naked bodies in there; that would be ${bedSlaves[2].slaveName} and ${contextualIntro(bedSlaves[2], bedSlaves[3])}, ready to attend you as you bathe.`);

		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result("Leave them satisfied", satisfied),
			new App.Events.Result("Leave them exhausted", exhausted)
		]);

		function satisfied() {
			const frag = document.createDocumentFragment();
			let sexTarget = "";
			t = [];

			if (V.PC.dick !== 0) {
				t.push(`You begin to thrust gently into ${bedSlaves[0].slaveName}'s mouth. ${girl === girl2 ? `The ${girl}` : "Your bedmate"}s moan and giggle into you at the signal that you're not going to get up right this instant, and`);
				if (((canAchieveErection(bedSlaves[0]) && bedSlaves[0].chastityPenis === 0) || bedSlaves[0].clit > 3) && ((canAchieveErection(bedSlaves[1]) && bedSlaves[1].chastityPenis === 0) || bedSlaves[1].clit > 3)) {
					t.push(`start jerking each other off harder, making lewd noises and humping each other's hands.`);
				} else {
					t.push(`start really exploring each other's body, jerking around lewdly as their arousal builds.`);
				}
				if (V.PC.vagina !== -1) {
					t.push(`They always spare at least one hand for your cunt, despite your thrusting.`);
				}
				t.push(`When you climax, they do, too, one after the other. They quickly switch mouth positions and suck you back to full mast so you can enjoy your shower.`);
				seX(bedSlaves[0], "oral", V.PC, "penetrative");
				seX(bedSlaves[1], "oral", V.PC, "penetrative");
			} else {
				t.push(`You reach down and run a possessive hand across each slave's scalp, neck, and back, eliciting shivers. Then, you gently hook them under the armpits and pull them up a bit, without breaking their lip locks with your nipples, or forcing them to stop playing with your cunt. Each slave ends curled up, mostly face-down, with their mouths still sucking on your ${V.PC.boobs >= 300 ? "boobs" : "chest"} and their free hands trapped between their legs. They get the message and begin to look after themselves, too; their resultant moaning against your nipples grows when you reach down and start teasing their butts. The three of you climax more or less together, and you bounce up with undiminished arousal to enjoy your shower.`);
				seX(bedSlaves[0], "oral", V.PC, "vaginal");
				seX(bedSlaves[1], "oral", V.PC, "vaginal");
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`By now, the shower is an impenetrable fog of steam. The wet, soapy bodies inside are easy to find, though. ${bedSlaves[2].slaveName} happens to be closest, so you kiss ${his3} laughing mouth`);
			if (V.PC.dick !== 0) {
				if ((canDoVaginal(bedSlaves[2]) && bedSlaves[2].vagina > 0) || (canDoAnal(bedSlaves[2]) && bedSlaves[2].anus > 0)) {
					t.push(`hard and fuck ${him3}`);
					if (bedSlaves[2].belly < 30000) {
						t.push(`with ${his3} back against the shower`);
						if (bedSlaves[2].boobs > 10000) {
							t.push(`wall, ${his3} giant soapy tits wobbling around you deliciously.`);
						} else if (bedSlaves[2].boobs > 2000) {
							t.push(`wall, ${his3} huge soapy tits sliding around deliciously.`);
						} else if (bedSlaves[2].weight > 95) {
							t.push(`wall, ${his3} plush belly sliding around delightfully against you.`);
						} else if (canAchieveErection(bedSlaves[2]) && bedSlaves[2].chastityPenis === 0) {
							t.push(`wall, ${his3} lathered up erection rubbing lasciviously between you.`);
						} else {
							t.push(`wall.`);
						}
					} else {
						t.push(`with ${his3} expansive flank against the shower`);
						if (bedSlaves[2].boobs > 2000) {
							t.push(`wall, ${his3} huge soapy tits flopping around deliciously.`);
						} else if (bedSlaves[2].weight > 95) {
							t.push(`wall, ${his3} plush belly wobbling around delightfully beneath ${him3}.`);
						} else {
							t.push(`wall.`);
						}
					}
					if (canDoVaginal(bedSlaves[2]) && bedSlaves[2].vagina > 0) {
						t.push(VCheck.Vaginal(bedSlaves[2], 1));
					} else {
						t.push(VCheck.Anal(bedSlaves[2], 1));
					}
				} else if (bedSlaves[2].weight > 95 && bedSlaves[2].belly < 1500) {
					t.push(`hard, sandwich your dick with ${his3} soft belly, and fuck ${his3} soapy, jiggly body against the shower wall.`);
					seX(bedSlaves[2], "mammary", V.PC, "penetrative");
				} else {
					t.push(`hard and, not finding anything to stick your erection into, guide ${his3} hand down to your wanting dick.`);
					seX(bedSlaves[2], "oral", V.PC, "penetrative");
				}
				t.push(`${He3} does ${his3} best to soap your front while ${he3}`);
				if ((canDoVaginal(bedSlaves[2]) && bedSlaves[2].vagina > 0) || (canDoAnal(bedSlaves[2]) && bedSlaves[2].anus > 0)) {
					t.push(`takes`);
				} else {
					t.push(`rubs`);
				}
				t.push(`cock, and ${bedSlaves[3].slaveName} washes your back${V.PC.vagina !== -1 ? ", reaching under your butt to tease your pussy" : ""}. After a short while, you let ${him3} down and seize ${bedSlaves[3].slaveName}, sliding your cock`);
				if (bedSlaves[3].vagina > 0 && canDoVaginal(bedSlaves[3])) {
					t.push(`into ${his4} willing pussy,`);
				} else if (bedSlaves[3].anus > 0 && canDoAnal(bedSlaves[3])) {
					t.push(`${bedSlaves[3].butt > 4 ? `between ${his4} huge buttocks and` : ""} up ${his4} willing ass,`);
				} else if (bedSlaves[3].butt > 4) {
					t.push(`between ${his4} huge buttocks,`);
				} else {
					t.push(`between ${his4} thighs,`);
				}
				if (canDoVaginal(bedSlaves[3]) && bedSlaves[3].vagina > 0) {
					t.push(VCheck.Vaginal(bedSlaves[3], 1));
				} else {
					t.push(VCheck.Anal(bedSlaves[3], 1));
				}
				t.push(`taking ${him4} from behind while ${bedSlaves[2].slaveName} does ${his3} best to get ${his3} wits back and take over washing duty. They towel you together, and you head back out of the bathroom.`);
			} else {
				if ((bedSlaves[2].toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(bedSlaves[2]) && (V.PC.vagina > 0 || V.PC.anus > 0) && bedSlaves[2].belly + V.PC.belly < 30000) {
					sexTarget = "penetrative";
					if (V.PC.vagina > 0) {
						t.push(`hard, slip ${his2} dick into your pussy, and ride ${him3}`);
						seX(bedSlaves[2], "penetrative", V.PC, "vaginal");
						if (canImpreg(V.PC, bedSlaves[2])) {
							knockMeUp(V.PC, 5, 0, 0);
						}
					} else {
						t.push(`hard, slip ${his2} dick up your ass, and ride ${him3}`);
						seX(bedSlaves[2], "penetrative", V.PC, "anal");
						if (canImpreg(V.PC, bedSlaves[2])) {
							knockMeUp(V.PC, 5, 1, 0);
						}
					}
					t.push(`with ${his3} back against the shower`);
					if (bedSlaves[2].boobs > 10000) {
						t.push(`wall, ${his3} giant soapy tits wobbling around you deliciously.`);
					} else if (bedSlaves[2].boobs > 2000) {
						t.push(`wall, ${his3} huge soapy tits sliding around deliciously.`);
					} else if (bedSlaves[2].weight > 95) {
						t.push(`wall, ${his3} plush belly sliding around delightfully against you.`);
					} else {
						t.push(`wall.`);
					}
				} else if (canDoVaginal(bedSlaves[2])) {
					t.push(`hard and trib ${him3}`);
					if (bedSlaves[2].belly < 30000) {
						t.push(`with ${his3} back against the shower`);
						if (bedSlaves[2].boobs > 10000) {
							t.push(`wall, ${his3} giant soapy tits wobbling around you deliciously.`);
						} else if (bedSlaves[2].boobs > 2000) {
							t.push(`wall, ${his3} huge soapy tits sliding around deliciously.`);
						} else if (bedSlaves[2].weight > 95) {
							t.push(`wall, ${his3} plush belly sliding around delightfully against you.`);
						} else if (canAchieveErection(bedSlaves[2]) && bedSlaves[2].chastityPenis === 0) {
							t.push(`wall, ${his3} lathered up erection rubbing lasciviously between you.`);
						} else {
							t.push(`wall.`);
						}
					} else {
						t.push(`with ${his3} expansive flank against the shower`);
						if (bedSlaves[2].boobs > 2000) {
							t.push(`wall, ${his3} huge soapy tits flopping around deliciously.`);
						} else if (bedSlaves[2].weight > 95) {
							t.push(`wall, ${his3} plush belly wobbling around delightfully beneath ${him3}.`);
						} else {
							t.push(`wall.`);
						}
					}
					seX(bedSlaves[2], "vaginal", V.PC, "vaginal");
				} else {
					t.push(`hard and guide ${his3} hand down to your wanting pussy.`);
					seX(bedSlaves[2], "oral", V.PC, "vaginal");
				}
				t.push(`${He3} does ${his3} best to soap your front while`);
				if (sexTarget === "penetrative") {
					t.push(`fucking you`);
				} else if (canDoVaginal(bedSlaves[2])) {
					t.push(`you hump ${his3} thigh${bedSlaves[2].vagina > 0 ? " and pussy" : ""},`);
				} else {
					t.push(`teasing your pussy`);
				}
				t.push(`and ${bedSlaves[3].slaveName} washes your back. After a short while,`);
				if (sexTarget === "penetrative") {
					t.push(`${he3} comes inside you and slides out so you may`);
				} else if (canDoVaginal(bedSlaves[2])) {
					t.push(`you let ${him3} down and`);
				} else {
					t.push(`you let ${him3} stop and`);
				}
				t.push(`seize ${bedSlaves[3].slaveName}, pushing ${his4} face against the wall and`);
				if (canDoVaginal(bedSlaves[3]) || canDoAnal(bedSlaves[3])) {
					t.push(`sliding your fingers inside ${him4} while you`);
				}
				t.push(`straddle one of ${his4} legs. ${bedSlaves[2].slaveName} does ${his3} best to get ${his3} wits back and take over washing duty. They towel you together, and you head back out of the bathroom.`);
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`Your clothes have been laid out, ready for ${bedSlaves[0].slaveName} and ${bedSlaves[1].slaveName} to dress you, but`);
			if (V.PC.dick !== 0) {
				t.push(`next to the neat stack of clothes, the two slaves are bent over the bed with their buttocks spread. You select ${bedSlaves[1].slaveName}`);
				if (bedSlaves[1].vagina > 0 && canDoVaginal(bedSlaves[1])) {
					t.push(`and slide your dick into ${his2} ${bedSlaves[1].vagina > 2 ? "loose pussy" : (bedSlaves[1].vagina > 1 ? "inviting pussy" : "tight pussy")}, fucking ${him2}`);
					t.push(VCheck.Vaginal(bedSlaves[1], 1));
				} else if (bedSlaves[1].anus > 0 && canDoAnal(bedSlaves[1])) {
					t.push(`and slide your dick up ${his2} ${bedSlaves[1].anus > 2 ? "welcoming asspussy" : (bedSlaves[1].anus > 1 ? "soft butthole" : "tight anus")}, sodomizing ${him2}`);
					t.push(VCheck.Anal(bedSlaves[1], 1));
				} else {
					t.push(`and turn ${him2} around before sliding your dick into ${his2} welcoming mouth`);
					seX(bedSlaves[1], "oral", V.PC, "penetrative");
				}
				t.push(`while ${bedSlaves[0].slaveName} buttons your shirt. When it's done, you push ${him} down next to ${bedSlaves[1].slaveName} and switch partners, letting ${bedSlaves[1].slaveName} up to do ${his2} best to help you into your trousers in the meantime. ${He2} gets them on and fastens everything, except the fly, of course.`);
				SimpleSexAct.Player(bedSlaves[0]);
			} else {
				t.push(`next to the neat stack of clothes, the two slaves are kneeling on the floor and looking at you with mock innocence. You select ${bedSlaves[1].slaveName} and straddle ${his2} face, letting ${him2}`);
				if (bedSlaves[1].lips > 40) {
					t.push(`use ${his2} big soft lips to`);
				}
				t.push(`eat you out while ${bedSlaves[0].slaveName}`);
				if (V.PC.career === "servant") {
					t.push(`helps you into your dress. Once ${he} straightens out your apron,`);
				} else if (V.PC.career === "escort") {
					if (V.PC.boobs >= 1400) {
						t.push(`gropes your huge breasts in a losing battle to get them to stay in your barely-there top. Once they've stopped popping out,`);
					} else if (V.PC.boobs >= 1200) {
						t.push(`spends an invigoratingly long time wrestling your big tits into your way too small top. Once they're content to stay put,`);
					} else if (V.PC.boobs >= 1000) {
						t.push(`struggles to shove your breasts into your too small top. Once they're content to stay put,`);
					} else if (V.PC.boobs >= 300) {
						t.push(`wrangles your breasts into your revealing top. Once they're situated perfectly,`);
					} else {
						t.push(`ties your skimpy top over your flat chest. Once it's situated perfectly,`);
					}
				} else {
					t.push(`helps you into your top. When you're buttoned,`);
				}
				t.push(`you take ${his} face in your hands and kiss ${him} deeply, favoring ${him} with the sensation of kissing ${his} ${getWrittenTitle(bedSlaves[0])} while ${playerPronouns.he} orgasms. You keep making out with ${him} while ${bedSlaves[1].slaveName}`);
				if (V.PC.career === "servant") {
					t.push(`slips out from beneath your skirt.`);
				} else if (V.PC.career === "escort") {
					t.push(`tries to find the perfect balance between your extra short skirt showing either your pussy or butthole.`);
				} else {
					t.push(`dresses your lower half.`);
				}
				seX(bedSlaves[1], "oral", V.PC, "vaginal");
			}

			t.push(`When you finally leave the suite, ${bedSlaves[0].slaveName} and ${bedSlaves[1].slaveName} head into the shower for their turn, while ${bedSlaves[2].slaveName} and ${bedSlaves[3].slaveName} have finished drying each other off so they can`);
			if (App.Utils.sexAllowed(bedSlaves[2], bedSlaves[3])) {
				t.push(`have sex`);
				SimpleSexAct.Slaves(bedSlaves[2], bedSlaves[3]);
			} else {
				t.push(`nap together in the afterglow`);
			}
			t.push(`on the bed without getting the sheets wet. They pause for a moment to wave at you as you go, though. <span class="trust inc">Your fucktoys are very satisfied with their morning routine.</span>`);
			if (App.Utils.sexAllowed(bedSlaves[0], bedSlaves[1])) {
				SimpleSexAct.Slaves(bedSlaves[0], bedSlaves[1]);
			}
			bedSlaves.forEach(s => (s.trust += 4));

			App.Events.addParagraph(frag, t);

			return frag;
		}

		function exhausted() {
			const frag = document.createDocumentFragment();
			let noShowerSex = 0;
			t = [];

			if (V.PC.dick !== 0) {
				t.push(`${bedSlaves[0].slaveName} feels a hand snake behind ${his} head and relaxes ${his} throat, knowing what's coming. You fuck the bitch's mouth hard, and since the pounding pulls your balls out of ${bedSlaves[1].slaveName}'s mouth,`);
				t.push(`you yank ${him2} up towards you so you can`); // strength check
				if (bedSlaves[1].boobs > 300) {
					t.push(`maul ${his2} breasts. The compliant slave thrusts out ${his2} chest, presenting ${his2} tits`);
				} else {
					t.push(`torment ${his2} flat breasts. The compliant slave thrusts out ${his2} chest, presenting ${his2} nipples`);
				}
				t.push(`for use as toys, and then gasps as you pinch, squeeze, and twist. You blow your load down ${bedSlaves[0].slaveName}'s throat`);
				seX(bedSlaves[0], "oral", V.PC, "penetrative");
			} else {
				t.push(`You shove ${bedSlaves[0].slaveName} down towards your pussy and grab`);
				if (bedSlaves[0].hLength > 10) {
					t.push(`${his} hair.`);
				} else if (bedSlaves[0].bald === 1) {
					t.push(`${his} bald head.`);
				} else {
					t.push(`the back of ${his} head.`);
				}
				t.push(`${He} takes a deep breath, knowing what's coming. You grind your cunt against the bitch's mouth hard, and since there's no room for ${bedSlaves[1].slaveName}'s hand there any more,`);
				t.push(`you yank ${him2} up towards you so you can`); // strength check
				if (bedSlaves[1].boobs > 300) {
					t.push(`maul ${his2} breasts. The compliant slave thrusts out ${his2} chest, presenting ${his2} tits`);
				} else {
					t.push(`torment ${his2} flat breasts. The compliant slave thrusts out ${his2} chest, presenting ${his2} nipples`);
				}
				t.push(`for use as toys, and then gasps as you pinch, squeeze, and twist. You climax against ${bedSlaves[0].slaveName}'s face`);
				seX(bedSlaves[0], "oral", V.PC, "vaginal");
			}
			t.push(`and bounce up to fuck bitches in the shower, knocking ${bedSlaves[0].slaveName} aside and sending ${bedSlaves[1].slaveName} sprawling. As you go, you tell them they've got ten minutes to get your clothes laid out and their bodies ready for more. They nod furiously and scramble.`);
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`By now, the shower is an impenetrable fog of steam. The wet, soapy bodies inside are easy to find, though. ${bedSlaves[2].slaveName} happens to be closest, so you`);
			t.push(`grab ${him3} and shove ${him3} into a corner of the`); // strength
			if (bedSlaves[2].belly >= 10000) {
				t.push(`shower, ${his3} ${bellyAdjective(bedSlaves[2])} soapy belly pushing uncomfortably against the glass.`);
			} else if (bedSlaves[2].boobs > 2000) {
				t.push(`shower, ${his3} huge soapy tits slapping painfully against the glass.`);
			} else if (bedSlaves[2].weight > 95) {
				t.push(`${his3} fat soapy gut slapping painfully against the glass.`);
			} else {
				t.push(`shower.`);
			}
			if (V.PC.dick !== 0) {
				t.push(`${He3} does ${his3} best to angle ${his3} hips for you as you push your cock`);
				if (bedSlaves[2].vagina > 0 && canDoVaginal(bedSlaves[2])) {
					t.push(`into ${his3} pussy to give ${him3} a good hard fuck.`);
					t.push(VCheck.Vaginal(bedSlaves[2], 1));
				} else if (bedSlaves[2].anus > 0 && canDoAnal(bedSlaves[2])) {
					t.push(`up ${his3} ass and give ${him3} a good hard reaming.`);
					t.push(VCheck.Anal(bedSlaves[2], 1));
				} else {
					t.push(`between ${his4} thighs and go to town.`);
					seX(bedSlaves[2], "anal", V.PC, "penetrative", );
				}
				t.push(`${bedSlaves[3].slaveName} does ${his4} best to wash your`);
				if (V.PC.vagina > -1) {
					t.push(`back and give your pussy some manual attention,`);
				} else {
					t.push(`back,`);
				}
				t.push(`but finds ${himself4} taking ${bedSlaves[2].slaveName}'s place soon enough, smashed into the corner with your dick pistoning`);
				if (bedSlaves[3].vagina > 0 && canDoVaginal(bedSlaves[3])) {
					t.push(`in and out of ${his4} holes.`);
					t.push(VCheck.Vaginal(bedSlaves[3], 1));
				} else if (bedSlaves[3].anus > 0 && canDoAnal(bedSlaves[3])) {
					t.push(`in and out of ${his4} holes.`);
					t.push(VCheck.Anal(bedSlaves[3], 1));
				} else {
					t.push(`between ${his4} legs.`);
					seX(bedSlaves[3], "anal", V.PC, "penetrative");
				}
			} else {
				t.push(`${He3} does ${his3} best to angle ${his3} hips for you as you`);
				if (canDoVaginal(bedSlaves[2])) {
					t.push(`fingerfuck ${him3},`);
					seX(bedSlaves[2], "vaginal", V.PC, "penetrative");
				} else if (canDoAnal(bedSlaves[2])) {
					t.push(`fingerfuck ${him3},`);
					seX(bedSlaves[2], "anal", V.PC, "penetrative");
				} else {
					t.push(`molest ${him3},`);
					noShowerSex++;
				}
				t.push(`forcing complete submission out of the compliant ${girl3}. ${bedSlaves[3].slaveName} does ${his4} best to wash your back, but finds ${himself4} taking ${bedSlaves[2].slaveName}'s place soon enough, smashed into the corner with your fingers`);
				if (bedSlaves[3].vagina > 0 && canDoVaginal(bedSlaves[3])) {
					t.push(`pistoning in and out of ${his4} holes.`);
					seX(bedSlaves[3], "vaginal", V.PC, "penetrative");
				} else if (bedSlaves[3].anus > 0 && canDoAnal(bedSlaves[3])) {
					t.push(`pistoning in and out of ${his4} holes.`);
					seX(bedSlaves[3], "anal", V.PC, "penetrative");
				} else {
					t.push(`running across every ${V.showInches === 2 ? "inch" : "centimeter"} of ${his4} body.`);
					noShowerSex++;
				}
			}
			t.push(`You're in a hurry, but it'll be a sad day when you aren't able to ${noShowerSex > 1 ? "push" : "fuck"} a slave into total submission in five minutes. You release ${bedSlaves[3].slaveName} to drop to the shower floor and let ${bedSlaves[2].slaveName} towel you off.`);
			if (V.PC.dick === 0 && ((bedSlaves[3].anus > 0 && canDoAnal(bedSlaves[3])) || (bedSlaves[3].vagina > 0 && canDoVaginal(bedSlaves[3])))) {
				t.push(`${bedSlaves[3].slaveName}`);
				if (canStand(bedSlaves[3])) {
					t.push(`gets to ${his4} feet`);
				} else {
					t.push(`hoists ${himself4} upright`);
				}
				t.push(`and helpfully holds up a strap-on questioningly; you shake your head and point to another, larger one. ${He4} helps you into it, and you ram it up ${his4}`);
				if (bedSlaves[3].vagina > 0 && canDoVaginal(bedSlaves[3])) {
					t.push(`loosened pussy`);
					seX(bedSlaves[3], "vaginal", V.PC, "penetrative");
				} else {
					t.push(`loosened ass`);
					seX(bedSlaves[3], "anal", V.PC, "penetrative");
				}
				t.push(`experimentally, nodding in satisfaction when the big phallus forces a pained gasp out of ${him4}.`);
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`Back in the bedroom, your clothes have been laid out, ready for ${bedSlaves[0].slaveName} and ${bedSlaves[1].slaveName} to dress you.`);

			let dick = V.PC.dick !== 0 ? "dick" : "strap-on";

			t.push(`Next to the neat stack of clothes, the two slaves are bent over the bed with their buttocks spread. They're perfectly still, awaiting your pleasure. You select ${bedSlaves[1].slaveName} and`);
			if (bedSlaves[1].vagina > 0 && canDoVaginal(bedSlaves[1])) {
				t.push(`push your ${dick} up ${his2} ${bedSlaves[1].vagina > 2 ? "loose pussy" : (bedSlaves[1].vagina > 1 ? "inviting pussy" : "tight pussy")}, raping ${him2} without mercy`);
				t.push(VCheck.Vaginal(bedSlaves[1], 1));
			} else if (bedSlaves[1].anus > 0 && canDoAnal(bedSlaves[1])) {
				t.push(`ram your ${dick} up ${his2} ${bedSlaves[1].anus > 2 ? "welcoming asspussy" : (bedSlaves[1].anus > 1 ? "soft butthole" : "tight anus")}, assraping ${him2} without mercy`);
				t.push(VCheck.Anal(bedSlaves[1], 1));
			} else {
				t.push(`spin ${him2} around, then push your ${dick} down ${his2} throat, facefucking ${him2} without mercy`);
				seX(bedSlaves[1], "oral", V.PC, "penetrative");
			}
			t.push(`while ${bedSlaves[0].slaveName}`);
			if (V.PC.dick !== 0) {
				t.push(`buttons your shirt.`);
			} else if (V.PC.career === "servant") {
				t.push(`helps you into your dress.`);
			} else if (V.PC.career === "escort") {
				if (V.PC.boobs >= 1400) {
					t.push(`faces a losing battle to get your huge breasts to stay in your barely-there top.`);
				} else if (V.PC.boobs >= 1200) {
					t.push(`wrestles your big tits into your way too small top.`);
				} else if (V.PC.boobs >= 1000) {
					t.push(`struggles to shove your breasts into your too small top.`);
				} else if (V.PC.boobs >= 300) {
					t.push(`wrangles your breasts into your revealing top.`);
				} else {
					t.push(`ties your skimpy top over your flat chest.`);
				}
			} else {
				t.push(`helps you into your top.`);
			}
			t.push(`When it's done, you push ${him} down next to ${bedSlaves[1].slaveName} and switch partners, letting ${bedSlaves[1].slaveName} up to do ${his2} best to`);
			if (V.PC.dick !== 0) {
				t.push(`help you into your trousers in the meantime. ${He2} gets them on and fastens everything, except the fly, of course.`);
			} else if (V.PC.career === "servant") {
				t.push(`tie your apron and keep it out of the way.`);
			} else if (V.PC.career === "escort") {
				t.push(`dress your lower half. ${He2} gets your skimpy bottom on, thong not included of course, quickly enough.`);
			} else {
				t.push(`dress your lower half.`);
			}
			t.push(`When ${bedSlaves[0].slaveName} has been fucked into helplessness, you throw ${him} away like the human sex toy ${he} is and pound ${bedSlaves[1].slaveName} and then the dried-off ${bedSlaves[3].slaveName} and ${bedSlaves[2].slaveName} senseless, careful to frequently pull far enough out that the slaves have to take the pain of initial penetration again.`);
			SimpleSexAct.Player(bedSlaves[0]);
			SimpleSexAct.Player(bedSlaves[1]);
			SimpleSexAct.Player(bedSlaves[2]);
			SimpleSexAct.Player(bedSlaves[3]);
			t.push(`When you finally leave the suite, all four slaves are lying like discarded tissues on the bed, face-down and spread-eagled, carefully avoiding resting on any sensitive parts. <span class="devotion inc">Your fucktoys are reminded of who you are.</span>`);

			App.Events.addParagraph(frag, t);
			bedSlaves.forEach(s => (s.devotion += 4));

			return frag;
		}
	}
};


code:
App.Events.REStandardPunishment = class REStandardPunishment extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [[
			(s) => s.devotion >= -50,
			(s) => s.devotion <= 50,
			hasAnyArms,
			canMove
		]];
	}

	execute(node) {
		const slave = getSlave(this.actors[0]);
		const {
			He, His,
			he, his, him, himself
		} = getPronouns(slave);
		const {He2} = getPronouns(S.HeadGirl || {pronoun: 0}).appendSuffix("2");
		const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A");

		/** @type {EventArtObject[]} */
		const artArray = [slave];
		if (V.HeadGirlID !== 0) {
			artArray.push(S.HeadGirl);
		} else {
			artArray.push("assistant");
		}
		App.Events.drawEventArt(node, artArray);

		const desc = SlaveTitle(slave);
		let r = [];

		const sinsArray = [];
		sinsArray.push("dawdling");
		if (canDoAnal(slave)) {
			if (slave.fetish !== "buttslut") {
				if (slave.anus !== 0) {
					sinsArray.push("anal reluctance");
				}
			}
		}
		if (canDoVaginal(slave)) {
			if (slave.vagina !== 0) {
				if (slave.fetish !== "pregnancy") {
					sinsArray.push("vaginal reluctance");
				}
			}
		}
		if (canTalk(slave)) {
			sinsArray.push("chatting");
		}
		if (V.universalRulesConsent === 0) {
			if (slave.energy <= 60) {
				sinsArray.push("slave refusal");
			}
		} else {
			if (slave.energy > 40) {
				if (slave.rules.release.slaves === 1 || App.Utils.hasFamilySex(slave)) {
					sinsArray.push("slave molestation");
				}
			}
		}

		r.push(App.UI.DOM.slaveDescriptionDialog(slave));

		const sin = sinsArray.random();
		switch (sin) {
			case "anal reluctance":
				r.push(`is sometimes punished for reluctance to take it up the ass. You run across the aftermath of one such incident as`);
				break;
			case "vaginal reluctance":
				r.push(`is sometimes punished for reluctance to give up ${his} pussy. You run across the aftermath of one such incident as`);
				break;
			case "chatting":
				r.push(`can be overly chatty with other slaves, and often makes ${himself} late for ${his} next task by losing ${himself} in gossip. You happen to appear after ${he}'s been late as`);
				break;
			case "dawdling":
				r.push(`is sometimes late to ${his} next task. This is probably the most common minor infraction among slaves, especially when they're assigned to do things they don't like. You happen to appear after ${he}'s been late as`);
				break;
			case "slave refusal":
				r.push(`lacks the sexual energy to be at home among your slaves, since ${his} peers can demand sex from ${him} whenever they want it. ${He} sometimes tries to evade them or even outright refuse. You come upon the aftermath of such a scene as`);
				break;
			case "slave molestation":
				r.push(`struggles with the consent you require before sex between slaves. ${His} need for release pushes ${him} to overstep ${his} bounds. You come upon the aftermath of an example of ${his} sexual aggressiveness as`);
				break;
			default:
				r.push(`ERROR: bad sin`);
		}

		if (V.HeadGirlID !== 0) {
			r.push(`${S.HeadGirl.slaveName} is`);
			if (slave.rules.punishment === "situational") {
				r.push(`assessing an appropriate punishment.`);
			} else {
				r.push(`sentencing ${him} to ${his} standard punishment,`);
				switch (slave.rules.punishment) {
					case "confinement":
						r.push(`several hours in confinement.`);
						break;
					case "whipping":
						r.push(`a whipping.`);
						break;
					case "chastity":
						r.push(`several hours in chastity.`);
				}
			}
			r.push(`${He2} immediately defers to you, should you wish to take over.`);
		} else {
			r.push(`${V.assistant.name} is`);
			if (slave.rules.punishment === "situational") {
				r.push(`assessing an appropriate punishment.`);
			} else {
				r.push(`sentencing ${him} to ${his} standard punishment,`);
				switch (slave.rules.punishment) {
					case "confinement":
						r.push(`several hours in confinement.`);
						break;
					case "whipping":
						r.push(`a whipping.`);
						break;
					case "chastity":
						r.push(`several hours in chastity.`);
				}
			}
			r.push(`${HeA} immediately defers to you, should you wish to take over.`);
		}

		App.Events.addParagraph(node, r);

		const choices = [];

		/* STANDARD PUNISHMENTS */
		switch (slave.rules.punishment) {
			case "confinement":
				choices.push(new App.Events.Result(`Confine ${him} firmly but fairly`, confine));
				choices.push(new App.Events.Result(`Confine ${him} cruelly`, confineCruelly));
				break;
			case "whipping":
				choices.push(new App.Events.Result(`Give ${him} a solid whipping`, whip));
				choices.push(new App.Events.Result(`Whip ${him} cruelly`, whipCruelly));
				break;
			case "chastity":
				choices.push(new App.Events.Result(`Restrain ${him} in your office`, chastity));
				choices.push(new App.Events.Result(`Torment ${him} with vibration`, chastityCruelly));
				break;
		}

		/* SITUATIONAL PUNISHMENTS */
		switch (sin) {
			case "anal reluctance":
				choices.push(new App.Events.Result(`Punish ${his} ass`, ass));
				break;
			case "vaginal reluctance":
				choices.push(new App.Events.Result(`Punish ${his} pussy`, pussy));
				break;
			case "chatting":
				choices.push(new App.Events.Result(`Put ${his} mouth to better use`, mouth));
				break;
			case "dawdling":
				choices.push(new App.Events.Result(`Make ${him} run`, run));
				break;
			case "slave refusal":
				choices.push(new App.Events.Result(`Make sure ${he} knows ${he}'s for use`, use));
				break;
			case "slave molestation":
				choices.push(new App.Events.Result(`Make ${him} apologize and then dominate ${him}`, dominate));
				break;
			default:
				r.push(`ERROR: bad sin`);
		}

		App.Events.addResponses(node, choices);

		function confine() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use confinement as a standard slave punishment,`);
			if (V.cellblock !== 0) {
				r.push(`in addition to ${V.cellblockName},`);
			}
			r.push(`you have little cubicles designed for the purpose scattered around the penthouse. You order ${slave.slaveName} into one of these. ${He} obeys,`);
			if (slave.devotion > 20) {
				r.push(`knowing ${he} deserves punishment and eager to get it over with.`);
			} else if (slave.trust < -20) {
				r.push(`if only out of terror, knowing ${he}'ll make ${his} situation far worse if ${he} doesn't.`);
			} else {
				r.push(`warily, willing to go along until something worth real resistance happens.`);
			}
			r.push(`The cell is padded and has leather restraints; you use these to secure ${him} to the wall, preventing ${him} from doing anything to relieve boredom in the tiny space. You restate the rule ${he} broke, state the length of ${his} punishment, and remonstrate firmly with ${him} before closing the door. As it shuts on ${him}, plunging ${him} into darkness, you hear`);
			if (canTalk(slave)) {
				r.push(`${him} try at an apology in a tiny voice`);
			} else if (slave.voice !== 0) {
				r.push(`a tiny apologetic moan.`);
			} else {
				r.push(`a sad little intake of breath.`);
			}
			r.push(`You're there to let ${him} out after a reasonable time, and ${he} exits the soft little cell <span class="trust inc">with relief.</span>`);
			slave.trust += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function confineCruelly() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use confinement as a standard slave punishment,`);
			if (V.cellblock !== 0) {
				r.push(`in addition to ${V.cellblockName},`);
			}
			r.push(`you have several boxes designed for the purpose in convenient areas. You order ${slave.slaveName} to your office, and direct a box to be brought there. ${He} begins to cry when ${he} sees it,`);
			if (slave.devotion > 20) {
				r.push(`but obediently gets inside, not wanting ${his} punishment to be extended. ${His} obedience notwithstanding,`);
			} else if (slave.trust < -20) {
				r.push(`but desperately hurries to get inside, terrified that you might extend ${his} sentence. ${His} obedience notwithstanding,`);
			} else {
				r.push(`making no move towards it. ${He} knows that active resistance will merely extend ${his} sentence, and lets you stuff ${his} sobbing body inside. Once ${he}'s in,`);
			}
			if (canTalk(slave)) {
				r.push(`${he} begs tearfully`);
			} else if (slave.voice !== 0) {
				r.push(`${he} tries frantically to beg`);
			} else if (hasAnyArms(slave)) {
				r.push(`${he} uses ${his} ${hasBothArms(slave) ? "hands" : "hand"} to supplicate you`);
			} else {
				r.push(`${he} attempts to beg in any pitiful way ${he} can muster`);
			}
			r.push(`as you close the lid with exquisite slowness. The harshest thing you do is keep silent, not giving ${him} any indication of when ${he}'s getting out. When you finally let ${him} out, ${he}'s almost crazy with fear of ever going back in the box and, for now, willing to do almost anything to avoid it.`);
			slave.devotion += 4;
			slave.trust -= 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function whip() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use whipping as a standard slave punishment, there are many sets of restraints set high up on the walls for the purpose. You order ${him} to place ${his} ${hasBothArms(slave) ? "hands" : "hand"} in one of them, and ${he}`);
			if (slave.devotion > 20) {
				r.push(`sobs with fear but obeys, obviously hoping you'll be reasonable.`);
			} else if (slave.trust < -20) {
				r.push(`starts to cry but doesn't let that stop ${him} from hurriedly obeying. ${He} knows that resistance will earn ${him} more strokes.`);
			} else {
				r.push(`breaks down and makes no move to obey, but does not resist as you take ${his} ${hasBothArms(slave) ? "wrists" : "wrist"} in your hands and lift them into the restraints.`);
			}
			r.push(`The shackles can be moved up or down, and you move them up, raising the shivering, frightened ${desc} to the tips of ${his} toes. ${He} struggles a little to find ${his} balance, and is distracted when the first stroke lands on ${his} ${slave.skin} buttocks. Your leather instrument is exquisitely designed and balanced to produce pain without breaking the skin or leaving a permanent mark. You tell ${him} to count, and ${he}`);
			if (canTalk(slave)) {
				r.push(`gasps "one" through ${his} agony.`);
			} else if (slave.voice !== 0) {
				r.push(`grunts once, doing ${his} best.`);
			} else {
				r.push(`sticks up one finger despite ${his} restrained ${hasBothArms(slave) ? "hands" : "hand"}.`);
			}
			r.push(`You flog ${his} bottom until it's pleasantly warm to the touch, and then let ${him} down. ${He}'s <span class="trust inc">relieved</span> at your moderation.`);
			slave.trust += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function whipCruelly() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use whipping as a standard slave punishment, there are many sets of restraints set high up on the walls for the purpose. You order ${him} to place ${his} ${hasBothArms(slave) ? "hands" : "hand"} in one of them, and ${he}`);
			if (slave.devotion > 20) {
				r.push(`sobs with fear but obeys, despite something in your tone that makes ${his} knees go weak with terror.`);
			} else if (slave.trust < -20) {
				r.push(`starts to cry but doesn't let that stop ${him} from hurriedly obeying. ${He} stumbles once, something in your tone that making ${his} knees go weak with terror.`);
			} else {
				r.push(`breaks down and makes no move to obey, but does not resist as you take ${his} ${hasBothArms(slave) ? "wrists" : "wrist"} in your hands and hoist ${him} into the restraints.`);
			}
			r.push(`The shackles can be moved up or down, and you move them down, forcing the weeping slave to spread ${his} legs. You let ${him} anticipate the pain for a long time before you start whipping ${his} buttocks. Your leather instrument is exquisitely designed and balanced to produce pain without breaking the skin or leaving a permanent mark, and you make cruel use of it. After a short preliminary asswhipping, you vary your strokes, letting ${him} feel the whip on ${his} ${hasBothLegs(slave) ? "thighs" : "thigh"}, ${hasBothLegs(slave) ? "calves" : "calf"} and ${hasBothLegs(slave) ? "flanks" : "flank"} before placing strokes against ${his}`);
			if (slave.scrotum > 0) {
				r.push(`poor ballsack.`);
			} else if (slave.dick > 0) {
				r.push(`poor penis.`);
			} else {
				r.push(`poor pussy.`);
			}
			r.push(`${He} loses all control,`);
			if (canTalk(slave)) {
				r.push(`shamelessly begging for mercy.`);
			} else if (slave.voice !== 0) {
				r.push(`sobbing and moaning incoherently.`);
			} else {
				r.push(`rasping pathetic little sobs past ${his} mute throat.`);
			}
			r.push(`When you're done, ${he}'s <span class="trust dec">almost crazy with fear</span> of future whippings.`);
			slave.trust -= 6;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function chastity() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use chastity as a punishment, you're accustomed to using your office for supervising sexual denial. You bring ${him} up and restrain ${him} standing, ${hasBothArms(slave) ? "hands" : "hand"} over ${his} head in one of the sets of shackles set high on the walls, facing out so ${he} can`);
			if (canSee(slave)) {
				r.push(`see`);
			} else {
				r.push(`face`);
			}
			r.push(`everything that goes on in your office. You gag ${him} securely,`);
			if (slave.voice === 0) {
				r.push(`despite ${his} muteness, a sad mockery.`);
			} else {
				r.push(`not wanting your work disturbed by unseemly noises.`);
			}
			r.push(`Then you ignore ${him}. Business as usual in your office is profoundly sexual.`);
			if (slave.energy > 60) {
				r.push(`${His} healthy sex drive makes this torture for ${him}; ${he}`);
				if (canSee(slave)) {
					r.push(`watches`);
				} else if (canHear(slave)) {
					r.push(`listens to`);
				} else {
					r.push(`is aware of`);
				}
				r.push(`everything that happens in the office with desperate longing. Before long,`);
			} else if (slave.devotion > 20) {
				r.push(`${He}'s used to the idea of sexual slavery, and inevitably`);
				if (canSee(slave)) {
					r.push(`sees`);
				} else if (canHear(slave)) {
					r.push(`hears`);
				} else {
					r.push(`is surrounded by`);
				}
				r.push(`people ${he} finds attractive doing things ${he} considers sexy in the office. Before long,`);
			} else if (slave.devotion >= -50) {
				r.push(`${He}'s not comfortable with sexual slavery, but the heavily sexual atmosphere of the office affects even ${him}. After a few hours,`);
			} else {
				r.push(`The office being what it is, ${he}`);
				if (canSee(slave)) {
					r.push(`sees`);
				} else if (canHear(slave)) {
					r.push(`hears`);
				} else {
					r.push(`is surrounded by`);
				}
				r.push(`many naked, attractive people doing sexy things over the course of the day. Despite ${his} resistance, after a few hours,`);
			}
			r.push(`${he}'s quite horny. Restrained as ${he} is, ${he}`);
			if (slave.devotion > 20) {
				r.push(`couldn't`);
			} else {
				r.push(`can't`);
			}
			r.push(`hide`);
			if (slave.dick > 0) {
				if (canAchieveErection(slave)) {
					r.push(`${his}`);
					if (slave.dick > 2) {
						r.push(`prominent`);
					} else {
						r.push(`pathetic`);
					}
					r.push(`erection,`);
				} else {
					r.push(`the string of precum hanging off ${his} limp dick,`);
				}
			} else {
				if (slave.vaginaLube > 0) {
					r.push(`the lovely pussyjuice slicking ${his} thighs,`);
				} else {
					r.push(`how flushed and eager ${his} cunt is,`);
				}
			}
			if (slave.devotion > 20) {
				r.push(`even if ${he} wanted to.`);
			} else {
				r.push(`though ${he} seems to want to.`);
			}
			r.push(`Satisfied that ${he}'s been tormented enough for today, you let ${him} down and send ${him} on ${his} way. ${He}'s obviously more willing than usual to apply ${himself} to ${his} next sexual task, whatever it is.`);
			slave.devotion += 4;

			App.Events.addParagraph(frag, r);
			return frag;
		}

		function chastityCruelly() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Since you use chastity as a punishment, you're accustomed to using your office for supervising sexual denial. You order ${him} to place ${his} ${hasBothArms(slave) ? "hands" : "hand"} in one of the many sets of restraints set high up on the office walls for the purpose.`);
			if (!slave.piercing.genitals.smart) {
				r.push(`You equip ${him} with a set of smart vibrators. The first is attached`);
				if (slave.dick > 0) {
					r.push(`to ${his} dickhead,`);
				} else {
					r.push(`against ${his} clit,`);
				}
			} else {
				r.push(`${His} smart piercing makes the next step easy. ${He} gets three vibrators in total:`);
			}
			r.push(`the second`);
			if (slave.vagina > 0) {
				r.push(`comfortably fills ${his} pussy,`);
			} else if (slave.vagina === 0) {
				r.push(`rests against ${his} virgin pussy without breaking ${his} virtue,`);
			} else {
				r.push(`is a nice little bullet vibe for ${his} soft perineum,`);
			}
			r.push(`and the third`);
			if (slave.anus > 0) {
				r.push(`is, of course, a vibrating plug for ${his} asspussy.`);
			} else {
				r.push(`rests against ${his} unfucked rosebud without penetrating it.`);
			}
			r.push(`Then you walk away, setting the vibrators to bring ${him} to the edge of orgasm and keep ${him} there. The effect is almost instant, and as you go ${he} begins to writhe,`);
			if (canTalk(slave)) {
				r.push(`desperately calling after you to beg for mercy`);
			} else if (slave.voice !== 0) {
				r.push(`moaning desperately.`);
			} else {
				r.push(`panting mutely.`);
			}
			r.push(`When you finally come back and let ${him} down, ${he}'s`);
			if (canStand(slave)) {
				r.push(`unsteady on ${his} feet`);
			} else {
				r.push(`unable to right ${himself}`);
			}
			r.push(`and <span class="devotion inc">very submissive,</span> though a bit <span class="libido dec">burned out</span> on stimulation.`);
			slave.devotion += 6;
			slave.energy -= 1;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function ass() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Deciding that the most appropriate punishment is some corrective assrape, you shove the slave to`);
			if (hasBothLegs(slave)) {
				r.push(`${his} knees`);
			} else {
				r.push(`the floor`);
			}
			r.push(`and stuff`);
			if (V.PC.dick !== 0) {
				r.push(`your cock`);
			} else {
				r.push(`a formidable dildo`);
			}
			r.push(`up ${his}`);
			if (slave.anus > 2) {
				r.push(`big butthole. It slides right in, the slave's relaxed sphincter offering no resistance. Announcing that you'll find ${his} limits, wherever they are, you insert fingers until ${he}'s cruelly stretched and you're almost jerking`);
				if (V.PC.dick !== 0) {
					r.push(`yourself`);
				} else {
					r.push(`the phallus`);
				}
				r.push(`off inside ${him}.`);
			} else if (slave.anus > 1) {
				r.push(`defenseless asshole. You meet some delicious resistance and push past it, enjoying the feeling of the slave's sphincter spasming as you do. You pound ${him} hard, much harder than ${he} can comfortably take it up the ass.`);
			} else {
				r.push(`tight hole. ${His} poor little anus doesn't want to let you in, but you force yourself in anyway, making the slave wriggle desperately beneath you as ${he} feels the invading phallus force ${his} anal ring to accommodate its girth.`);
			}
			r.push(`You tell ${him} that many slaves enjoy anal, and that if ${he}'s a good ${desc}, ${he} can too, but that it's against the rules for ${him} to show reluctance to be assfucked. The slave below you is too discomfited by anal pain to respond coherently, but ${he} gets the message. ${He}'ll be better about submitting in the future, but due to the connection between sex and punishment ${he}'ll be a little less eager for sex, especially anal.`);
			r.push(VCheck.Anal(slave, 1));
			slave.devotion += 4;
			slave.energy -= 2;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function pussy() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Deciding that the most appropriate punishment is some corrective rape, you push the slave down on ${his} back and shove`);
			if (V.PC.dick !== 0) {
				r.push(`your cock`);
			} else {
				r.push(`a formidable dildo`);
			}
			r.push(`inside ${his}`);
			if (slave.anus > 2) {
				r.push(`roomy cunt, which can take it easily. Announcing that you'll find ${his} limits, wherever they are, you insert fingers until ${he}'s cruelly stretched and you're almost jerking`);
				if (V.PC.dick !== 0) {
					r.push(`yourself`);
				} else {
					r.push(`the phallus`);
				}
				r.push(`off inside ${him}.`);
			} else if (slave.anus > 1) {
				r.push(`poor womanhood. You fuck ${him} mercilessly, intentionally pulling out far enough that you have to spear ${him} again. You use ${his} poor boobs as leverage, pulling against them to batter ${him} harder.`);
			} else {
				r.push(`poor tight pussy. ${He}'s tight, and the initial penetration was uncomfortable for ${him}, but you make it worse by treating ${his} cunt like a veteran whore's. ${He} begins to struggle a little as you hammer ${him}.`);
			}
			r.push(`You tell ${him} that many slaves enjoy getting fucked, and that if ${he}'s a good ${desc}, ${he} can too, but that it's against the rules for ${him} to show reluctance to be penetrated. The slave below you is too discomfited to respond coherently, but ${he} gets the message. ${He}'ll be better about submitting in the future, but due to the connection between sex and punishment ${he}'ll be a little less eager for sex, especially vaginal.`);
			r.push(VCheck.Vaginal(slave, 1));
			slave.devotion += 4;
			slave.energy -= 2;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function mouth() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You announce that ${he}'ll have less trouble gossiping instead of being prompt if ${his} mouth is nice and tired. Comprehension and apprehension dawn on ${his} face in the moment before you`);
			if (slave.collar !== "none") {
				r.push(`grab ${him} by the collar and pull`);
			} else {
				r.push(`put a hand on ${his} shoulder and shove`);
			}
			r.push(`${him} to the ground. ${He} goes down without resistance,`);
			if (V.PC.dick !== 0) {
				r.push(`already opening wide for your stiff prick.`);
			} else {
				r.push(`${his} look of unconcern vanishing when ${he} sees you pulling out a strap-on. ${He} doesn't get to eat pussy today; today ${he} gets fucked in the face.`);
			}
			r.push(`You shove it down ${his}`);
			if (slave.sexualQuirk === "gagfuck queen") {
				r.push(`spectacularly unresisting throat. The gagfuck queen has no gag reflex to speak of, but even ${he} has ${his} limit. You rape ${his} face without mercy, deliberately ruining ${his} practiced ability to breathe while giving a cock deep oral.`);
			} else if (slave.fetish === "cumslut") {
				r.push(`eager throat. The ${slave.fetishKnown === 1 ? "cumslut" : "bitch"} loves giving oral, but soon realizes that you have no intention of letting ${him} love this. You rape ${his} face without mercy, hilting ${his} lips against`);
				if (V.PC.dick !== 0) {
					r.push(`your base.`);
				} else {
					r.push(`the harness.`);
				}
			} else {
				r.push(`gagging throat, enjoying the sensations of ${his} lips and tongue writhing against you as ${he} desperately tries to accommodate the intruder.`);
			}
			r.push(`${He} begins to struggle a little, so you snake a hand down behind ${his} head to hold ${him} in place. When you're done, ${he}'s an inelegant mess, coughing and gasping for air.`);
			if (canTalk(slave)) {
				r.push(`Once ${he}'s got ${his} breath back, ${he} tearfully`);
			} else {
				r.push(`Even as ${he} pants, ${he} uses shaky gestures to beg forgiveness, and ${he} even`);
			}
			r.push(`promises to be less chatty. ${He}'ll be more punctual in the future, but due to the connection between sex and punishment ${he}'ll be a little less eager for sex, especially oral.`);
			seX(slave, "oral", V.PC, "penetrative", 1);
			slave.devotion += 4;
			slave.energy -= 2;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function run() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that ${he} clearly needs practice being prompt.`);
			if (canHear(slave)) {
				r.push(`Your tone is conversational, but ${he} doesn't mistake it for kindness. It's the tone you use with`);
			} else {
				r.push(`Your gestures are soft, but ${he} doesn't mistake that for kindness. It's what you use with deaf`);
			}
			r.push(`slaves when imparting guidance which is to be accepted and followed on pain of terrible punishment. You make ${him} explain where ${he} was and what ${he} was doing previously, and require ${him} to walk you there. ${He} does,`);
			if (slave.trust > 20) {
				r.push(`trustingly`);
			} else if (slave.trust >= -20) {
				r.push(`rather fearfully,`);
			} else {
				r.push(`shaking with fear,`);
			}
			r.push(`and when you get there you tell ${him} to run to ${his} next task. ${He} hesitates for an instant, until you`);
			if (V.PC.title === 1) {
				r.push(`bellow`);
			} else {
				r.push(`shriek`);
			}
			r.push(`at ${him} to run! ${He} takes off,`);
			if (!canWalk(slave)) {
				r.push(`crawling as fast as ${his} body will let ${him}. Sure ${he} isn't running, since ${he} can't, but ${he} is struggling along at an impressive pace.`);
			} else if (shoeHeelCategory(slave) === 3) {
				r.push(`tottering agonizingly along in ${his} extreme heels. ${He} isn't running, not really, but ${his} slutty shoes are so ridiculous that ${he} can't. ${He}'s going as fast as ${he} possibly can.`);
			} else if (shoeHeelCategory(slave) > 1) {
				r.push(`running awkwardly in ${his} ${slave.shoes}.`);
			} else {
				r.push(`running as fast as ${his} legs can carry ${him}.`);
			}
			r.push(`As ${he} goes,`);
			if (slave.dick > 3) {
				r.push(`${his}`);
				if (slave.dick > 5) {
					r.push(`ridiculous penis`);
				} else {
					r.push(`big dick`);
				}
				r.push(`flops around painfully, hitting ${his} thighs, but ${he} tries to ignore it.`);
			} else if (slave.scrotum > 3) {
				r.push(`${his}`);
				if (slave.scrotum > 5) {
					r.push(`huge ballsack`);
				} else {
					r.push(`generous scrotum`);
				}
				r.push(`gets painfully pinched between ${his} thighs, but ${he} tries to ignore it.`);
			} else if (slave.belly >= 10000) {
				r.push(`${his} huge`);
				if (slave.pregKnown === 1) {
					r.push(`pregnancy`);
				} else {
					r.push(`belly`);
				}
				r.push(`impedes ${him} terribly, but ${he} tries to ${canWalk(slave) ? "waddle" : "push"} along as best ${he} can.`);
			} else if (slave.boobsImplant > 600) {
				r.push(`${his} implants bounce around painfully, so ${he} cradles ${his} fake tits in ${his} arm${hasBothArms(slave) ? "s" : ""}, trying to support them as much as possible.`);
			} else if (slave.boobs > 2000) {
				r.push(`${his} huge tits bounce around painfully, so ${he} cradles ${his} udders in ${his} arm${hasBothArms(slave) ? "s" : ""}, trying to support them as much as possible.`);
			} else if (slave.butt > 2) {
				r.push(`${his} big buttocks impede ${him} a bit, but ${he} does ${his} best, making them work around delightfully.`);
			} else {
				r.push(`${his} cute rear makes a pretty picture.`);
			}
			r.push(`You make ${him} repeat the exercise until ${he}'s quite tired, hounding ${him} mercilessly, and then send ${him} off to rinse away the sweat ${he} worked up before getting back to work. ${He}'ll be more punctual in the future.`);
			slave.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function use() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Deciding to ensure the ${desc} really understands that ${he}'s a sex slave and can be used by anyone, even other slaves, you order ${him} to put ${his} mouth to work on the slave who demanded sex from ${him}.`);
			actX(slave, "oral");
			if (slave.devotion > 20) {
				r.push(`${He} hurries to comply, knowing ${he}'s in trouble and not wanting to make it any worse.`);
			} else if (slave.trust < -20) {
				r.push(`${He} hurries to obey, terrified that resistance will make it worse.`);
			} else {
				r.push(`${He} looks momentarily mutinous, but decides not to resist and gets down to it.`);
			}
			r.push(`Once ${he}'s working away, you pull ${his} hips up and`);
			if (canDoVaginal(slave) && (slave.vagina !== 0)) {
				r.push(`push ${his}`);
				if (hasBothLegs(slave)) {
					r.push(`legs`);
				} else {
					r.push(`cheeks`);
				}
				r.push(`apart, leaving ${his}`);
				if (slave.vagina > 2) {
					r.push(`loose`);
				} else if (slave.vagina > 1) {
					r.push(`poor`);
				} else {
					r.push(`tight little`);
				}
				r.push(`pussy vulnerable. You fuck ${him} hard, making it a punishment.`);
				r.push(VCheck.Vaginal(slave, 1));
			} else if (canDoAnal(slave) && (slave.anus !== 0)) {
				r.push(`paw ${his} butt, using a couple of fingers to tease ${his}`);
				if (slave.anus > 2) {
					r.push(`relaxed`);
				} else if (slave.anus > 1) {
					r.push(`slutty`);
				} else {
					r.push(`tight little`);
				}
				r.push(`asshole before penetration. You fuck ${him} hard, making it a punishment.`);
				r.push(VCheck.Anal(slave, 1));
			} else {
				r.push(`push ${his}`);
				if (hasBothLegs(slave)) {
					r.push(`legs`);
				} else {
					r.push(`cheeks`);
				}
				r.push(`together, settling for some`);
				if (V.PC.dick !== 0) {
					r.push(`frottage`);
					seX(slave, "anal", V.PC, "penetrative", 1);
				} else {
					r.push(`tribbing`);
					seX(slave, "anal", V.PC, "vaginal", 1);
				}
				r.push(`to preserve ${his}`);
				if (slave.vagina === -1) {
					r.push(`virginity.`);
				} else {
					r.push(`virginities.`);
				}
				r.push(`Since you're not fucking ${him}, you spank ${his} ass mercilessly to make it an effective punishment.`);
			}
			r.push(`The horny slave getting oral enjoys the oral attention, especially once ${slave.slaveName} starts to groan with discomfort. You discard ${him} once everyone except ${him} has gotten off. ${He}'ll be more submissive to sexual demands from now on, though ${he}'ll be slightly less interested in sex for ${his} own pleasure.`);
			slave.devotion += 4;
			slave.energy -= 2;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function dominate() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You order the horny ${desc} to apologize to the slave ${he} grabbed, which ${he} does,`);
			if (canTalk(slave)) {
				r.push(`managing to sound authentically sorry.`);
			} else {
				r.push(`gesturing ${his} regret with apparent sincerity.`);
			}
			r.push(`It seems ${he} might feel some actual guilt at molesting a fellow slave, but ${he}'s about to feel much sorrier. Once the other slave has been dismissed, you grab ${him} by the neck and`);
			if (canDoVaginal(slave) && (slave.vagina !== 0)) {
				r.push(`shove ${him} up against the nearest wall, using a bit of warning pressure of your fingers against ${his} throat to warn ${him} to take ${his} punishment. Then you`);
				if (V.PC.dick !== 0) {
					r.push(`jam your cock inside ${him}, making ${him} wriggle from the uncomfortable angle.`);
				} else {
					r.push(`grind your pussy against ${him}, fucking ${him} hard despite the lack of penetration.`);
				}
				r.push(VCheck.Vaginal(slave, 1));
			} else if (canDoAnal(slave) && (slave.anus !== 0)) {
				r.push(`shove ${his} face against the nearest wall, using a bit of warning pressure of your fingers against ${his} throat to warn ${him} to take ${his} punishment. Then you`);
				if (V.PC.dick !== 0) {
					r.push(`jam your cock up ${his} butt, making ${his} sphincter spasm from the rough penetration.`);
				} else {
					r.push(`use one hand to fuck ${his} ass and the other to look after yourself.`);
				}
				r.push(VCheck.Anal(slave, 1));
			} else {
				r.push(`pull ${him} to ${his} ${hasBothLegs(slave) ? "knees" : "knee"},`);
				if (V.PC.dick !== 0) {
					r.push(`shoving your dick down ${his} throat.`);
					seX(slave, "oral", V.PC, "penetrative", 1);
				} else {
					r.push(`straddling ${his} face and grinding yourself against ${his} mouth.`);
					seX(slave, "oral", V.PC, "vaginal", 1);
				}
			}
			r.push(`The slut needs it so badly that ${he} almost climaxes, but you ruin ${his} building orgasms whenever you detect them. When you've gotten yours, you drop ${him} and walk off, leaving ${him} feeling comprehensively fucked, but no less horny. ${He}'ll be very willing to do anything that will earn ${his} release.`);
			slave.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};

repo_name: Banyanael/fc

license: mit


code:
App.Events.RECIButthole = class RECIButthole extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REButtholeCheckinIDs.includes(s.ID),
				s => s.assignment !== Job.QUARTER,
				s => s.devotion > 50,
				s => s.trust > 50,
				canTalk,
				canWalk,
				canSee,
				canHear,
				s => s.anus.isBetween(1, 4),
				s => s.analArea > 1,
			]
		];
	}

	execute(node) {
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, himself, girl, woman, loli
		} = getPronouns(eventSlave);
		const {title: Master, say: say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
		const skinDesc = (skinToneLevel(eventSlave.skin) < 10)
			? "pink"
			: (skinToneLevel(eventSlave.skin) < 10)
				? "dark brown"
				: "brown";

		V.REButtholeCheckinIDs.deleteWith((s) => s === eventSlave.ID);

		let artDiv = document.createElement("div"); // named container so we can replace it later
		App.Events.drawEventArt(artDiv, eventSlave, "no clothing");
		node.appendChild(artDiv);

		let t = [];
		t.push(`The slave bathrooms are designed to completely eliminate privacy. There are few partitions, and those are glass. Your better-behaved slaves have all long since lost any hesitation about performing their ablutions nude. As you pass through the area, you notice`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`checking out ${his} own anus in the bathroom mirror.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`There's no other way to describe what ${he}'s doing: the ${SlaveTitle(eventSlave)}`);
		if (eventSlave.belly >= 300000) {
			t.push(`is leaning over ${his} ${belly} belly with ${his} feet planted on the counter,`);
		} else if (eventSlave.height < 140) {
			t.push(`is on a step stool with ${his} back to the mirror,`);
		} else if (eventSlave.height < 160) {
			t.push(`has ${his} back to the mirror and is up on tiptoe to bring ${his} butthole into view,`);
		} else {
			t.push(`has ${his} back to the mirror,`);
		}
		t.push(`and ${he}'s`);
		if (eventSlave.butt > 6) {
			if (hasBothArms(eventSlave)) {
				t.push(`using both hands to`);
			} else if (hasAnyArms(eventSlave)) {
				t.push(`using ${his} hand to`);
			} else if (eventSlave.belly >= 300000) {
				t.push(`letting gravity`);
			} else {
				t.push(`using the edge of the sink to`);
			}
			t.push(`pull ${his} massive buttcheeks apart to`);
		} else if (eventSlave.butt > 3) {
			if (hasAnyArms(eventSlave)) {
				t.push(`using ${his} ${hands} to`);
			} else if (eventSlave.belly >= 300000) {
				t.push(`letting gravity`);
			} else {
				t.push(`using the edge of the sink to`);
			}
			t.push(`spread ${his} healthy buttcheeks to`);
		} else {
			t.push(`got ${his} hips cocked to spread ${his} sleek butt and`);
		}
		t.push(`reveal ${his} backdoor. Your slaves are trained to check themselves daily,`);
		if (eventSlave.chastityAnus) {
			t.push(`including those assigned to wear anal chastity,`);
		}
		t.push(`but ${he} seems fascinated. As you pause to watch, ${he} begins to clench and relax ${his}`);
		if (eventSlave.anus > 2) {
			t.push(`loose`);
		} else {
			t.push(`cute`);
		}
		t.push(`hole,`);
		if ((eventSlave.analArea - eventSlave.anus) > 1) {
			t.push(`lewdly flexing`);
		} else {
			t.push(`alternately puckering and relaxing`);
		}
		t.push(`the ${skinDesc} skin around it. ${He} giggles self-consciously at the sight, and then relaxes all the way, causing ${his} asspussy to open into a`);
		if (eventSlave.anus > 2) {
			if (V.PC.dick !== 0) {
				t.push(`cock-hungry`);
			} else {
				t.push(`dildo-hungry`);
			}
		} else {
			t.push(`slight`);
		}
		t.push(`gape. ${He} notices you out of the corner of ${his} eye and`);
		if (eventSlave.butt > 6) {
			if (eventSlave.belly >= 300000) {
				t.push(`slides back onto ${his} feet`);
			} else if (hasAnyArms(eventSlave)) {
				t.push(`releases ${his} grip on ${his} heavy buttocks`);
			} else {
				t.push(`slides ${his} heavy buttocks off the counter`);
			}
			t.push(`to turn and greet you, letting`);
			if (eventSlave.belly >= 300000) {
				t.push(`${his} heavy buttocks`);
			} else {
				t.push(`them`);
			}
			t.push(`clap gently together and conceal ${his} asshole again.`);
		} else if (eventSlave.butt > 3) {
			if (eventSlave.belly >= 300000) {
				t.push(`slides back onto ${his} feet`);
			} else if (hasAnyArms(eventSlave)) {
				t.push(`lets ${his} butt go`);
			} else {
				t.push(`slides ${his} butt off the counter`);
			}
			t.push(`to turn and greet you, mostly hiding ${his} asshole from the mirror.`);
		} else {
			if (eventSlave.belly >= 300000) {
				t.push(`slides back onto ${his} feet and`);
			}
			t.push(`turns to greet you, ${his} pretty rear only partially concealing ${his} asshole in the mirror.`);
		}
		App.Events.addParagraph(node, t);

		t = [];
		t.push(Spoken(eventSlave, `"Hi ${Master},"`));
		t.push(`${he} ${say}s cheerfully.`);
		t.push(Spoken(eventSlave, `"I was just noticing how much my butt has changed. I check it every day, but I hadn't really looked at it in a while, you know? It used to be so tight, and now`));
		if (eventSlave.anus > 2) {
			t.push(Spoken(eventSlave, `I've got a rear pussy."`));
		} else {
			t.push(Spoken(eventSlave, `it's obviously a fuckhole."`));
		}
		if (eventSlave.belly >= 300000) {
			t.push(`${He} struggles to hike ${his} knee over ${his} extreme gravidity without losing balance.`);
		} else {
			t.push(`${He} turns to face the mirror,`);
			if (eventSlave.belly >= 10000) {
				t.push(`slowly hiking one knee up onto the bathroom counter in front of it while giving ${his}`);
				if (eventSlave.belly >= 10000) {
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnancy`);
					} else {
						t.push(`greatly bloated middle`);
					}
					t.push(`room to hang.`);
				}
			} else {
				t.push(`hiking one knee up onto the bathroom counter in front of it.`);
			}
		}
		t.push(`${He}`);
		if (eventSlave.butt > 6) {
			t.push(`reaches around to pull a buttock aside and starts blatantly winking ${his} anus for`);
			if (hasAnyArms(eventSlave)) {
				t.push(`you, using ${his}`);
				if (hasBothArms(eventSlave)) {
					t.push(`other`);
				}
				t.push(`hand to`);
				if (eventSlave.nipples !== "fuckable") {
					t.push(`tweak`);
				} else {
					t.push(`finger`);
				}
				t.push(`a nipple.`);
			} else {
				t.push(`you.`);
			}
		} else if (eventSlave.butt > 3) {
			t.push(`spreads ${himself} and starts blatantly winking ${his} anus for`);
			if (hasAnyArms(eventSlave)) {
				t.push(`you, using ${his} ${hands} to`);
				if (eventSlave.nipples !== "fuckable") {
					t.push(`tweak`);
				} else {
					t.push(`finger`);
				}
				t.push(`${his} nipples.`);
			} else {
				t.push(`you.`);
			}
		} else {
			t.push(`cocks ${his} hips again and starts blatantly winking ${his} anus for you`);
			if (hasAnyArms(eventSlave)) {
				t.push(`you, using ${his} ${hands} to`);
				if (eventSlave.nipples !== "fuckable") {
					t.push(`tweak`);
				} else {
					t.push(`finger`);
				}
				t.push(`${his} nipples.`);
			} else {
				t.push(`you.`);
			}
		}
		if (eventSlave.analArea > 3) {
			t.push(`The huge area of ${skinDesc} anus around ${his} actual hole certainly draws the eye towards its center, though the way ${he}'s using ${his} sphincter as a come-on does enhance the effect.`);
		}
		t.push(Spoken(eventSlave, `"Please, ${Master},"`));
		if (eventSlave.fetish === "buttslut") {
			t.push(`${he} begins to beg.`);
			t.push(Spoken(eventSlave, `"I can't wait to feel ${V.PC.dick !== 0 ? 'your cock' : 'you'} inside me."`));
		} else {
			t.push(`${he} ${say}s.`);
			t.push(Spoken(eventSlave, `"Use me."`));
		}
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			(eventSlave.chastityAnus)
				? new App.Events.Result(`Remind ${him} of ${his} chastity`, chaste)
				: new App.Events.Result(),
			(S.HeadGirl && eventSlave.ID !== V.HeadGirlID)
				? new App.Events.Result(`Double anal with the Head Girl`, () => DoubleTeam(S.HeadGirl))
				: new App.Events.Result(),
			(S.Concubine && eventSlave.ID !== V.ConcubineID && hasAnyLegs(S.Concubine) && hasAnyArms(S.Concubine) && S.Concubine.fetish !== "mindbroken")
				? new App.Events.Result(`Double anal with your Concubine`, () => DoubleTeam(S.Concubine))
				: new App.Events.Result(),
			(S.Bodyguard && eventSlave.ID !== V.BodyguardID)
				? new App.Events.Result(`Double anal with your Body Guard`, () => DoubleTeam(S.Bodyguard))
				: new App.Events.Result(),
			new App.Events.Result(`Chat about ${his} ass`, talk),
			(eventSlave.anus < 3)
				? new App.Events.Result(`Change it some more`, assFuck)
				: new App.Events.Result(),
			new App.Events.Result(`Don't like anal`, wrongHole),
		]);

		function chaste() {
			const totalIntel = eventSlave.intelligence + eventSlave.intelligenceImplant;

			t = [];
			t.push(`You ask if ${he} is forgetting anything.`);
			if (totalIntel > 95) {
				t.push(Spoken(eventSlave, `"Ah! Forgive me ${Master}! I'll put it on right away!"`));
				t.push(`${he} ${say}s, hurrying to fasten ${his} anal chastity, a hint of fear on ${his} face. You tell ${him} it is fine, ${he} was only performing ${his} daily ablutions after all.`);
			} else if (totalIntel > 15) {
				t.push(Spoken(eventSlave, `"Um? No...? I don't think I'm forgetting anything?"`));
				t.push(`${he} states with a look of confusion. You press ${him}, asking if ${he} forgot the rules.`);
				t.push(Spoken(eventSlave, `"Ah! I'm not supposed to be offering my asshole so freely! ${Master}, please forgive me! I'll put it on right away!"`));
				t.push(`${he} shouts, hurrying to fasten ${his} anal chastity, a hint of fear on ${his} face. You tell ${him} it is fine, if you want ${his} ass, you will have it, chastity be damned. ${He} lets out a sigh of relief.`);
				eventSlave.trust -= 2;
			} else if (totalIntel >= -15) {
				t.push(Spoken(eventSlave, `"Um? No...? I don't think I'm forgetting anything?"`));
				t.push(`${he} states with a look of confusion. You press ${him}, asking if ${he} forgot the rules.`);
				t.push(Spoken(eventSlave, `"I need to inspect my anus for damage, elasticity and cleanliness each and every morning."`));
				t.push(`You stare ${him} down, making it clear that was not the right answer.`);
				t.push(Spoken(eventSlave, `"Um, ${Master}, I shouldn't be offering my ass to you, I'm sorry..."`));
				t.push(`${he} limply ${say}s, fear spreading across ${his} face. You tell ${him} it is fine, ${he} did not violate the rules, after all. Though ${he}'d best pay more attention in the future.`);
				eventSlave.trust -= 2;
			} else if (totalIntel >= -95) {
				t.push(Spoken(eventSlave, `"Um? No...? I pretty sure I'm not forgetting anything..."`));
				t.push(`${he} states with a look of confusion. You press ${him}, asking if ${he} forgot the rules.`);
				t.push(Spoken(eventSlave, `"Make sure your asspussy is nice and pretty each and every day!"`));
				t.push(`You stare ${him} down, making it clear that was not the right answer. ${He} wracks ${his} brain, desperately trying to figure out what ${he} could be missing.`);
				t.push(Spoken(eventSlave, `"I offered my ass to you, so that couldn't be it..."`));
				t.push(`${His} cluelessness is starting to get on your nerves. You clear your throat and gesture at the anal chastity left forgotten in the sink.`);
				t.push(Spoken(eventSlave, `"Huh? Is that mine? Wait... Oh, no... I'm sorry ${Master}... Please forgive me..."`));
				t.push(`${he} ${say}s, tears beginning to well up in ${his} eyes. You tell ${him} it is fine, ${he} did not violate the rules, after all. Though ${he}'d best pay more attention in the future. Also not to leave ${his} chastity in the sink, you don't need to be replacing them all the time.`);
				eventSlave.trust -= 2;
			} else {
				t.push(Spoken(eventSlave, `"Um? No?"`));
				t.push(`${he} states with a look of confusion. You press ${him}, asking if ${he} forgot the rules.`);
				t.push(Spoken(eventSlave, `"Look at your butt!"`));
				t.push(`You stare ${him} down, making it clear that was not the right answer. ${He} wracks ${his} brain, desperately trying to figure out what ${he} could be missing.`);
				t.push(Spoken(eventSlave, `"You don't like this position...?"`));
				t.push(`${His} cluelessness is starting to get on your nerves. You clear your throat and gesture at the anal chastity left forgotten on the counter.`);
				t.push(Spoken(eventSlave, `"Huh? You want me to put that away?"`));
				t.push(`You struggle to calmly explain that ${he} is supposed to be wearing anal chastity, not begging for a dick up ${his} ass.`);
				t.push(Spoken(eventSlave, `"So a toy is better?"`));
				t.push(`You fasten the belt around ${his} rear and silently leave the room before you lose it.`);
				t.push(Spoken(eventSlave, `"So you'll fuck my butt later?"`));
				t.push(`${he} shouts after you, still completely oblivious.`);
			}

			return t;
		}

		function DoubleTeam(partner) {
			let container = document.createDocumentFragment();
			const partnerSlave = partner;
			const {He2, he2, his2, him2, himself2} = getPronouns(partnerSlave).appendSuffix('2');
			const {title: Master2} = getEnunciation(partnerSlave);

			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, [eventSlave, partnerSlave], "no clothing");

			t = [];
			t.push(`You tell ${him} ${he}'s got a nice asspussy, and grope ${him} thoroughly, cupping ${his} buttocks with one hand and squeezing a breast with the other. ${eventSlave.slaveName} looks`);
			if (eventSlave.fetish === "buttslut") {
				t.push(`desperately eager,`);
			} else {
				t.push(`ready and willing,`);
			}
			t.push(`and angles ${himself} just right, but you administer a light slap to ${his} ${eventSlave.skin} ass and continue, telling ${him} that it's so nice you feel like sharing it. ${He}'s`);
			if (eventSlave.fetish === "buttslut" || eventSlave.energy > 95) {
				t.push(`so ready to fuck ${he} can't quite think of what to say,`);
			} else {
				t.push(`not quite sure how to respond,`);
			}
			t.push(`and before ${he} can figure it out, ${partnerSlave.slaveName} hurries in, responding to your summons. Of course, ${eventSlave.slaveName} is no stranger to ${partnerSlave.slaveName}, who takes in the situation at a glance and`);
			if (canAchieveErection(partnerSlave)) {
				t.push(`instantly achieves a painfully hard erection.`);
			} else {
				t.push(`immediately flushes with arousal.`);
			}
			if (partnerSlave.weight > 160 || partnerSlave.belly >= 10000 || partnerSlave.boobs >= 50000 || partnerSlave.balls >= 50) {
				if (!canPenetrate(partnerSlave)) {
					t.push(`${partnerSlave.slaveName} dons a strap-on before you help ${him2}`);
				} else {
					t.push(`You help support ${partnerSlave.slaveName} as ${he2} struggles`);
				}
			} else {
				t.push(`${partnerSlave.slaveName}`);
				if (!canPenetrate(partnerSlave)) {
					t.push(`dons a strap-on and`);
				}
				t.push(`clambers`);
			}
			t.push(`up onto the (strongly built) bathroom counter. Since saliva is plenty of lube for ${eventSlave.slaveName}'s experienced ass, ${he2} points a meaningful finger at`);
			if (!canPenetrate(partnerSlave)) {
				t.push(`the phallus,`);
			} else {
				t.push(`${his2} cock,`);
			}
			t.push(`and ${eventSlave.slaveName} begins to suck it enthusiastically, trying to get it as wet as possible for the sake of ${his} butt.`);
			seX(eventSlave, "oral", partnerSlave, "penetrative");
			App.Events.addParagraph(container, t);

			t = [];
			t.push(`Since ${eventSlave.slaveName} is being so good, you decide to help get ${him} ready, and push`);
			if (eventSlave.belly < 100000) {
				t.push(`${him} sideways so`);
				if (eventSlave.belly >= 3000) {
					t.push(`${he}'s forced to heft ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnancy`);
					} else {
						t.push(`greatly bloated middle`);
					}
					t.push(`onto the counter.`);
				} else {
					t.push(`${he} straddles the counter's edge.`);
				}
				t.push(`${He} whimpers into the`);
				if (!canPenetrate(partnerSlave)) {
					t.push(`dildo`);
				} else {
					t.push(`dick`);
				}
				t.push(`in ${his} mouth as ${he} feels ${his}`);
				if (eventSlave.dick > 0) {
					if (eventSlave.chastityPenis === 1) {
						t.push(`chastity cage`);
					} else if (eventSlave.hormoneBalance >= 100 || eventSlave.balls === 0 || eventSlave.ballType === "sterile") {
						t.push(`soft dickclit`);
					} else if (!canAchieveErection(eventSlave)) {
						t.push(`oversized cock`);
					} else {
						t.push(`hard cock`);
					}
				} else {
					t.push(`mons`);
				}
				t.push(`graze the hard counter, and then stiffens as you penetrate ${his} bottom.`);
			} else {
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`the obscenely pregnant`);
				} else {
					t.push(`the obscenely swollen`);
				}
				t.push(`${girl} to properly spitroast ${him}. ${He} whimpers into the`);
				if (!canPenetrate(partnerSlave)) {
					t.push(`dildo`);
				} else {
					t.push(`dick`);
				}
				t.push(`in ${his} mouth as ${his} body stiffens from your invading`);
				if (V.PC.dick !== 0) {
					t.push(`cock`);
				} else {
					t.push(`strap-on`);
				}
				t.push(`stretching ${his} anus.`);
			}
			seX(eventSlave, "anal", V.PC, "penetrative");
			t.push(`When you judge that ${partner.slaveName} is wet enough, you nod to ${him2}, and ${he2} takes ${eventSlave.slaveName} by the hand, pulling ${him} up onto ${his2} lap.`);
			if (partnerSlave.belly + eventSlave.belly > 5000 || partnerSlave.weight > 95 || eventSlave.weight > 95) {
				t.push(`There is no chance that the pair of them will manage to stay on that counter without hurting themselves or breaking something, so you quickly help them down onto a bathroom bench before the moment is ruined.`);
			} else if (partnerSlave.boobs > 4000 && eventSlave.boobs > 4000) {
				t.push(`Their tits are so huge that they can't reach each other to kiss, chest-to-chest like that. ${partnerSlave.slaveName} settles for blowing the other slave an exaggerated kiss, which makes ${him} laugh.`);
			} else {
				t.push(`The slaves start making out, showing no signs of breaking their lip lock as they arrange themselves for penetration.`);
			}
			t.push(`${partnerSlave.slaveName} guides ${his2}`);
			if (!canPenetrate(partnerSlave)) {
				t.push(`strap-on`);
			} else {
				t.push(`cock`);
			}
			t.push(`inside the`);
			if (eventSlave.fetish === "buttslut") {
				t.push(`enthusiastic`);
			} else {
				t.push(`compliant`);
			}
			t.push(`${eventSlave.slaveName}, who begins to ride it, enjoying both the`);
			if (eventSlave.prostate > 0) {
				t.push(`prostate`);
			} else {
				t.push(`anal`);
			}
			t.push(`stimulation and the feeling of ${his}`);
			if (eventSlave.dick > 0) {
				if (eventSlave.chastityPenis === 1) {
					t.push(`midsection`);
				} else if (eventSlave.hormoneBalance >= 100 || eventSlave.balls === 0 || eventSlave.ballType === "sterile") {
					t.push(`soft dick`);
				} else if (!canAchieveErection(eventSlave)) {
					t.push(`oversized cock`);
				} else {
					t.push(`erection`);
				}
				t.push(`trapped between ${him} and`);
			} else {
				t.push(`pussy pressed against`);
			}
			t.push(`${partnerSlave.slaveName}.`);
			seX(eventSlave, "anal", partnerSlave, "penetrative");
			t.push(`${partnerSlave.slaveName} smacks the humping`);
			if (eventSlave.physicalAge > 30) {
				t.push(`${woman}'s`);
			} else if (eventSlave.physicalAge > 17) {
				t.push(`${girl}'s`);
			} else if (eventSlave.physicalAge > 12) {
				t.push(`teen's`);
			} else {
				t.push(`${loli}'s`);
			}
			t.push(`butt to get ${him} to stop, and slides an index finger up ${his} ass alongside the`);
			if (!canPenetrate(partnerSlave)) {
				t.push(`phallus.`);
			} else {
				t.push(`cock.`);
			}
			t.push(`${eventSlave.slaveName} shudders, and then begins to whine as ${partnerSlave.slaveName} pulls ${his} sphincter wider.`);
			App.Events.addParagraph(container, t);

			t = [];
			t.push(Spoken(eventSlave, `"Please,"`));
			t.push(`the slave begs incoherently as you press your`);
			if (V.PC.dick !== 0) {
				t.push(`dick`);
			} else {
				t.push(`strap-on`);
			}
			t.push(`against ${partnerSlave.slaveName}'s finger. It's not clear whether ${he}'s begging you to DP ${his} anus, or begging you not to, but whichever it is, ${partnerSlave.slaveName} withdraws ${his2} finger and you shove yourself inside. ${eventSlave.slaveName} jerks with discomfort and gives a gasping "Oh f-fuck-k" that`);
			if (eventSlave.anus > 2) {
				t.push(`${he} repeats over and over`);
			} else {
				t.push(`is followed by some minor struggling`);
			}
			t.push(`as you begin to fuck ${him}.`);
			seX(eventSlave, "anal", V.PC, "penetrative");
			seX(eventSlave, "anal", partnerSlave, "penetrative");
			if (V.PC.belly + eventSlave.belly + partnerSlave.belly >= 7500) {
				t.push(`The only position you can all manage to squeeze in together doesn't quite allow either of you to pound ${eventSlave.slaveName} as hard as you'd like, but you and ${partnerSlave.slaveName} do your best.`);
			} else {
				t.push(`From ${his2} angle, ${partnerSlave.slaveName} can't pound ${eventSlave.slaveName} quite as hard as you can, but ${he2} does ${his2} best.`);
			}
			t.push(`When you've both had your fun, extracted yourselves, and let the exhausted, gaped bitch collapse onto the floor, ${partnerSlave.slaveName} gives you a naughty wink.`);
			t.push(`<span class="devotion inc">`);
			if (canTalk(partnerSlave)) {
				t.push(Spoken(partnerSlave, `"That was fun, ${Master2}!"`));
			} else {
				t.push(`${He2} quite enjoyed ${himself2}`);
			}
			t.push(`</span>`);
			if (canTalk(partnerSlave)) {
				t.push(`${he2} ${say}s.`);
				t.push(Spoken(partnerSlave, `"Shall we flip ${him} over and go again?"`));
			} else {
				t.push(`and would be happy to go for round two.`);
			}
			t.push(`<span class="devotion inc">`);
			t.push(Spoken(eventSlave, `"Please nooo,"`));
			t.push(`</span>`);
			t.push(`comes a quiet wail from the floor.`);
			if (canImpreg(eventSlave, V.PC)) {
				knockMeUp(eventSlave, 10, 1, -1);
			}
			if (canImpreg(eventSlave, partnerSlave)) {
				knockMeUp(eventSlave, 10, 1, partnerSlave.ID);
			}
			App.Events.addParagraph(container, t);

			eventSlave.devotion += 2;
			partnerSlave.devotion += 2;

			return container;
		}

		function talk() {
			let container = document.createDocumentFragment();
			const {heP} = getSpokenPronouns(V.PC, eventSlave).appendSuffix('P');
			t = [];

			t.push(`You head into the bathroom, shedding clothing as you go. ${He} stares at you as you advance, ${his} eyes fixing on your`);
			if (V.PC.boobs >= 1400) {
				t.push(`enormous tits as you reveal them,`);
			} else if (V.PC.boobs >= 1200) {
				t.push(`huge tits as you reveal them,`);
			} else if (V.PC.boobs >= 1000) {
				t.push(`big tits as you reveal them,`);
			} else if (V.PC.boobs >= 300) {
				t.push(`tits as you reveal them,`);
			} else if (V.PC.belly >= 100000) {
				t.push(`massive pregnancy as it becomes visible,`);
			} else if (V.PC.belly >= 60000) {
				t.push(`giant pregnancy as it becomes visible,`);
			} else if (V.PC.belly >= 15000) {
				t.push(`advanced pregnancy as it becomes visible,`);
			} else if (V.PC.belly >= 10000) {
				t.push(`big baby bump as it becomes visible,`);
			} else if (V.PC.belly >= 5000) {
				t.push(`baby bump as it becomes visible,`);
			} else if (V.PC.belly >= 1500) {
				t.push(`rounded middle as it becomes visible,`);
			} else {
				if (V.PC.title === 0) {
					t.push(`flat chest as you reveal it,`);
				} else {
					t.push(`ripped abs as they become visible,`);
				}
			}
			t.push(`and ${his} lips part slightly. ${His} gaze only shifts when you disrobe completely, revealing your`);
			if (V.PC.dick !== 0) {
				t.push(`hardening`);
				if (V.PC.vagina !== -1) {
					t.push(`dick and`);
				} else {
					t.push(`dick;`);
				}
			} else if (V.PC.vagina !== -1) {
				t.push(`flushed womanhood;`);
			}
			t.push(`${he} licks ${his} lips unconsciously. You grab a towel off the counter, spread it on a bathroom bench, and recline on`);
			if (V.PC.belly < 5000) {
				t.push(`it with your back against the wall.`);
			} else {
				t.push(`it.`);
			}
			t.push(`You pat your`);
			// consider muscles and weight here
			if (V.PC.title === 1) {
				t.push(`hard`);
			} else {
				t.push(`pretty`);
			}
			t.push(`thighs, and ${he} hurries over,`);
			if (eventSlave.fetish === "buttslut" || (eventSlave.fetish === "pregnancy" && V.PC.belly >= 5000)) {
				t.push(`eagerly`);
			} else {
				t.push(`carefully`);
			}
			t.push(`swinging ${his} leg over the bench and seating ${himself} in your`);
			if (V.PC.belly >= 60000) {
				t.push(`lap, getting comfortable against your underbelly.`);
			} else {
				t.push(`lap.`);
			}
			if (V.PC.dick !== 0) {
				t.push(`Your cock slides easily up ${his} whorish butt. One of your arms`);
			} else {
				t.push(`You decided not to bother with a strap-on, so you slide a couple of fingers inside ${him}, and ${he} reciprocates by working a hand under ${himself} to attend to your pussy. Your free arm`);
			}
			if (V.PC.belly < 5000) {
				t.push(`wraps around`);
				if (eventSlave.boobs > 4000) {
					t.push(`${him} and under ${his} heavy tits, resting in a cocoon of soft breastflesh.`);
				} else if (eventSlave.boobs > 800) {
					t.push(`${his} heavy breasts, hefting their weight and eliciting a sigh from the slave.`);
				} else if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg > 3000) {
						t.push(`${his} waist to support ${his} pregnancy.`);
					} else if (eventSlave.bellyImplant > 3000) {
						t.push(`${his} waist to support the weight of ${his} belly.`);
					} else {
						t.push(`${his} waist to stabilize ${his} bloated middle.`);
					}
				} else if (eventSlave.weight > 95) {
					t.push(`${his} stomach to better support ${his} weight.`);
				} else if (eventSlave.boobs > 400) {
					t.push(`${him} to support ${his} chest.`);
				} else {
					t.push(`${him} to support ${his} weight.`);
				}
			} else {
				t.push(`grabs as good a hold as you can get in your state on`);
				if (eventSlave.weight > 95) {
					t.push(`${his} love handle.`);
				} else if (eventSlave.hips > 2) {
					t.push(`${his} massive hip.`);
				} else if (eventSlave.hips >= 2) {
					t.push(`${his} wide hip.`);
				} else if (eventSlave.hips >= 1) {
					t.push(`${his} womanly hip.`);
				} else if (eventSlave.hips >= 0) {
					t.push(`${his} hip.`);
				} else if (eventSlave.hips >= -1) {
					t.push(`${his} narrow hip.`);
				} else {
					t.push(`what should be a hip.`);
				}
			}
			t.push(`Being held this way, ${he} can't really`);
			if (V.PC.dick !== 0) {
				t.push(`bounce on your dick, so ${he} just wiggles ${his} butt into you to seat it a bit deeper`);
			} else {
				t.push(`grind against your fingers`);
			}
			t.push(`and sighs contentedly. You instruct ${him} to elaborate on what ${he} said earlier.`);
			App.Events.addParagraph(container, t);

			t = [];
			t.push(Spoken(eventSlave, `"Yes ${Master},"`));
			t.push(`${he} ${say}s automatically, and then pauses.`);
			t.push(Spoken(eventSlave, `"Hmm. I try not to think about back, you know, before."`));
			t.push(`${He} squeezes ${his} buttocks against your`);
			if (V.PC.dick !== 0) {
				t.push(`crotch.`);
			} else {
				t.push(`hand.`);
			}
			t.push(Spoken(eventSlave, `"But I guess back then I didn't really think about my butthole, much? Like, I went to the bathroom, and washed it in the shower, and that was it. But with the liquid slave food, I don't — sorry, ${Master}, I'm being silly. You know all about that."`));
			t.push(`You tell ${him} to explain it anyway. ${He} looks puzzled for a moment, but <span class="trust inc">remembers ${he} can trust you,</span> and twists around to plant an awkward kiss on your`);
			if (V.PC.belly >= 5000) {
				t.push(`navel`);
			} else {
				t.push(`chin`);
			}
			t.push(`before continuing.`);
			t.push(Spoken(eventSlave, `"Well,"`));
			t.push(`${he} ${say}s, with mock seriousness.`);
			t.push(Spoken(eventSlave, `"Here in the arcology, we slaves eat a very special liquid diet that keeps us healthy and fit and ready to fuck. And, it's absorbed completely, so our butts are always nice and clean. That way, ${Master} can -"`));
			t.push(`${he} clenches ${his} sphincter`);
			if (V.PC.dick !== 0) {
				t.push(`around the base of your cock — "fuck`);
			} else {
				t.push(`against your invading fingers — "play with`);
			}
			t.push(Spoken(eventSlave, `our asses"`));
			t.push(`— clench —`);
			t.push(Spoken(eventSlave, `"whenever"`));
			t.push(`— clench —`);
			t.push(Spoken(eventSlave, `"${heP}"`));
			t.push(`— clench —`);
			t.push(Spoken(eventSlave, `"wants!"`));
			t.push(`${He} squeals as you use your encircling arm to hoist ${his} torso up a bit higher, and mercilessly`);
			if (V.PC.dick !== 0) {
				t.push(`fuck`);
			} else {
				t.push(`fingerfuck`);
			}
			t.push(`${his} ass. Many of your other slaves came and went during this, and none of them saw anything unusual about you molesting ${eventSlave.slaveName}'s bottom in a corner of the restroom.`);
			t.push(VCheck.Anal(eventSlave, 1));
			eventSlave.trust += 4;
			App.Events.addParagraph(container, t);

			return container;
		}

		function assFuck() {
			let container = document.createDocumentFragment();

			t = [];
			t.push(`You tell ${him} that since ${he} appreciates how ${his} ass has changed, ${he} won't be surprised if you treat it like the fuckhole it is. Something in your tone makes ${him} cautious, but ${he}'s a good ${girl} and ${say}s`);
			t.push(Spoken(eventSlave, `"Yes, ${Master},"`));
			t.push(`automatically. You pass ${V.assistant.name} wardrobe orders for the poor`);
			if (eventSlave.physicalAge > 30) {
				t.push(`${woman},`);
			} else if (eventSlave.physicalAge > 17) {
				t.push(`${girl},`);
			} else if (eventSlave.physicalAge > 12) {
				t.push(`teen,`);
			} else {
				t.push(`${loli},`);
			}
			t.push(`and instructions to have ${him} report to your office once ${he}'s dressed. A few minutes later, ${eventSlave.slaveName} walks up to your desk, stark naked except for a buttplug that comfortably fills ${his} rectum and a sturdy leather collar attached to a leash. You snap your fingers, pointing at the ground, and ${he}`);
			if (eventSlave.belly >= 30000) {
				t.push(`struggles`);
			} else {
				t.push(`scrambles`);
			}
			if (hasAllLimbs(eventSlave)) {
				t.push(`to ${his} hands and knees`);
			} else {
				t.push(`downwards`);
			}
			t.push(`and`);
			if (hasAnyArms(eventSlave)) {
				t.push(`removes ${his} plug.`);
			} else {
				t.push(`presents ${his} plug for removal.`);
			}
			t.push(`After ${he}'s taken a harsh buttfuck, you`);
			if (V.PC.dick !== 0) {
				t.push(`push the plug back in without letting any of your cum escape`);
			} else {
				t.push(`plug ${him} up again`);
			}
			t.push(`and attach the leash to your belt. You ignore your anal toy completely, letting ${him} kneel next to you as you work — ${he} doesn't seem to want to sit, for some reason. For the rest of the day, ${his} anus takes the full force of your libido. You fuck nothing else, confining your efforts to ${his} backdoor, keeping ${him} plugged when you aren't penetrating ${him}. When you're bored, you hand ${him} a dildo and tell ${him} to take care of it ${himself}.`);
			App.Events.addParagraph(container, t);

			t = [];
			t.push(`${He}'s quite exhausted by the end of the day,`);
			if (eventSlave.belly >= 10000) {
				t.push(`waddling`);
			} else {
				t.push(`walking`);
			}
			t.push(`dumbly along behind you, leashed to your belt and wondering tiredly when ${his} next reaming is coming. ${He} doesn't notice that you're bringing ${him} back to stand in front of the mirror until ${he}'s there. You push ${his} compliant body into an approximation of ${his} position from the`);
			if (hasAnyArms(eventSlave)) {
				t.push(`morning and tell ${him} to remove ${his} plug and`);
			} else {
				t.push(`morning, pull out ${his} plug, and tell ${him} to`);
			}
			t.push(`look at ${his} asshole.`);
			t.push(Spoken(eventSlave, `"Yes, ${Master},"`));
			t.push(`${he} ${say}s, and obeys.`);
			if (V.PC.dick !== 0 && V.PC.balls > 0) {
				t.push(`This releases`);
				if (V.PC.balls >= 30) {
					t.push(`an obscene amount of ejaculate as ${his} stomach deflates slowly.`);
				} else if (V.PC.balls >= 14) {
					t.push(`a flood of ejaculate.`);
				} else if (V.PC.balls >= 9) {
					t.push(`a torrent of ejaculate.`);
				} else {
					t.push(`quite a rush of ejaculate.`);
				}
			}
			t.push(`${His} anus is very loose, a lewd, gaping fuckhole hungry for toys, fingers, and dick. You tell ${him} that, and ask whether ${he} agrees. `);
			t.push(Spoken(eventSlave, `"Yes, ${Master},"`));
			t.push(`${he} ${say}s.</span>`);
			eventSlave.devotion += 4;
			eventSlave.anus = 3;
			t.push(VCheck.Anal(eventSlave, 2));
			App.Events.addParagraph(container, t);

			return [container];
		}

		function wrongHole() {
			t = [];
			t.push(`You make it abundantly clear that you and you alone choose what hole you fuck and when, and it will not be ${his} loose asshole.`);
			t.push(Spoken(eventSlave, `"Ah! I-I'm sorry ${Master}, I went too far."`));
			t.push(`<span class="devotion dec">${He} looks crestfallen</span> as you take your leave.`);
			eventSlave.devotion -= 2;
			return t;
		}
	}
};