an ax
Photo illustration by Slate. Photo by Getty Images Plus.

Slate is now asking those who read the most to support our journalism more directly by subscribing to Slate Plus. Learn more.

To get advice from Prudie, send questions for publication to prudence@slate.com. (Questions may be edited.) Join the live chat every Monday at noon. Submit your questions and comments here before or during the live discussion. Or call the Dear Prudence podcast voicemail at 401-371-DEAR (3327) to hear your question answered on a future episode of the show.

Dear Prudence,

I am getting a head start on the winter holidays by drawing up an early gift list, but I am stuck on one recipient in particular. My boyfriend is generally handy and especially enjoys building fires, and he has expressed interest in chopping wood for the last few fires we’ve had. Great, I thought—I can get him a high-quality ax or hatchet for Christmas. But then I started thinking about the potential for injuries. I have anxiety and know it can skew my perception of things, so I’m trying to think it through rationally. My boyfriend is very aware of safety and risk assessments in daily life, but he’s also not the most spatially aware person. He can be clumsy by himself or with others, especially after a few drinks. He’s also never been trained in any kind of ax safety. I still think he’d be delighted by this present, and part of me wants to be convinced by that alone, but another part of me thinks that even having an ax around would kick my fear of accidental injury into permanent overdrive. Should I try to muscle through the anxiety or start looking for a different present? Or is there a compromise here that would satisfy both my fears and my desire to impress with a cool gift?

—Ax Anxiety

Let’s leave aside the question of how much your anxiety may be affecting your decision-making here or how clumsy your boyfriend is. This is not a referendum on his ability to hold his drinks but a pretty straightforward question about the whole point of gift-giving: Does it make you feel excited to contemplate giving it to him? If the answer isn’t “yes,” just move on and think of another gift. Chopping wood doesn’t seem like his secret dream hobby, and he won’t be broken-hearted to get something else. If he were a professional lumberjack or had his heart dead-set on becoming an expert woodsman survivalist, I might have different advice. But he’s not, so I don’t! Just get him something that doesn’t stress you out. If he’s generally handy and into DIY projects, I’m sure there’s some other gadget or carrying case you could get him that would line up nicely with his interests and be sure to please. This is already a very weird and difficult year. Go easy on yourself as often as you can.

Help! My Husband Wants to Leave Our Kids but Stay Married to Me.

Danny M. Lavery is joined by Alicia Harris on this week’s episode of the Dear Prudence podcast.

Subscribe to the Dear Prudence Podcast on Apple Podcasts, Spotify, Stitcher, or wherever you get your podcasts.

Dear Prudence,

I’m a 45-year-old transgender woman who was a successful high school teacher until I transitioned eight years ago. Being trans in a fairly socially conservative profession eventually led me to a nervous breakdown. The exclusion, hostility, and harassment pushed me out of the field I loved, and I’ve been drifting and depressed ever since. I have since worked at a number of office jobs I didn’t care about, but I no longer make enough to afford my own place, and I had to move in with my parents. My mother is my rock and accepts me for who I am, but my stepfather is an angry alcoholic who’s been unpleasant ever since I got here. I want to leave and focus on my own life, but I don’t know how to make the money to move out unless I teach again. The thought of being in a school again, dealing with that level of transphobic hostility and harassment, gives me an anxiety attack. I feel trapped in a depressing situation that I have no financial or emotional power to change. What should I do to extricate myself from this morass?

—Tired (Ex-) Teacher

Are you familiar with the Trans Educators Network? They’re a collective founded in 2015 that works to build community and provide mutual aid in the trans community. They offer a self-advocacy guide on their website that might provide a useful framework for attempting to safely reenter your former profession. You can also email them with specific questions or join their listserv. If you live in the South, you might also want to join Southerners on New Ground. Since money is so tight right now, I won’t recommend traditional therapy, but I’d encourage you to look for local support groups (even if they’re only able to meet online). Contact the nearest LGBTQ center, or use Psychology Today’s searchable-by-state index of support groups for trans people. You may ultimately decide that there’s no going back to teaching for you, even with support, and in that case I hope it will help to speak to other trans people about moving to a more trans-friendly field so that your two options aren’t “go back to teaching” or “temp jobs that don’t pay the bills.”

I also hope you’ll speak to your doctor about your chronic depression, especially if you’re covered by health insurance from one of those office jobs. Eight years is a long time to struggle with this kind of despondency (and what sound like fairly serious panic attacks), and although much of it may be the result of circumstances you can’t presently change, you may find antidepressants make tackling those difficult circumstances seem a little less daunting. Good luck—you deserve it!

Dear Prudence,

I have a college-aged younger sibling who has expressed their intention to attend an SEC football game in person before returning home before Thanksgiving break. I reached out to them (admittedly in a pretty aggressive way) and asked (alongside a really, really mean question), “Do you have a quarantine plan?” I was told, “If you don’t like it, then leave.” I have an autoimmune disorder. I am also in graduate school, so I understand their issues with social isolation. I haven’t seen my friends in months. All throughout the summer months, my sibling chose to go hang out with friends, despite the COVID risk. I can’t—and don’t want to—risk infection. Our parents don’t seem inclined to set boundaries with them, which has long been the norm in our family. (I’ve tried for years to get us all into therapy. I’m the only relative who has consistently worked on my issues.) If I try bringing anything like this up, I get dismissed through some form of, “Oh, [Sibling]’s being [Sibling]. Cut them some slack.” I (the first-born child) put up with years of helicopter parenting and emotional guilt-tripping.

I’ve given up on trying to change my sibling’s plans. How do I tell my parents that if they don’t set their foot down, I’m leaving? And how do I work up the courage to say it, knowing full well I’ll probably get an adverse reaction?

—Exhausted Eldest

I’m so curious as to what your “really, really mean” question was! Please write back and let me know, not because it would materially change my answer, but because I’m nosy, and wonder if I’d consider it “really, really mean” or just “kind of snippy.” But all you have to say to your parents is, “I can’t travel for Thanksgiving this year, since I’m at a higher risk for possible COVID complications. I’ll be sorry to miss seeing you, but I have to put my health and safety first.” If you can’t imagine saying that to them directly, you can send it via text or over email. But don’t make that commitment conditionally, as if it would stop being risky to travel to your parents’ house if your sibling didn’t attend a football game first. You have good reason to make that choice, and you should stand by it—it’s not punitive or manipulative, just the result of honest risk assessment. You don’t need anyone’s permission or agreement in order to make it, and no matter how adverse the reaction, you’re entitled to stick to it. “I’m sorry to hear that, but my decision is final” should be your go-to response if anyone tries to guilt-trip you on the subject. Repeat it as often as you have to until your interlocutors get bored and give up. If they don’t get bored and give up, just end the conversation. Have a happy, safe Thanksgiving.

Catch up on this week’s Prudie.

Now available in your podcast player: the audiobook edition of Danny M. Lavery’s latest book, Something That May Shock and Discredit YouGet it from Slate

More Advice From Care and Feeding

My sweet, energetic, and articulate 3-year-old (“Sam”) has gone through a lot of change this past year—we moved to a very large, noisy city far from the quieter, smaller city where we lived before; we had a second baby boy; and I went back to work last month after several months of leave. Sam has always been challenging due to his energy level, but he is extremely affectionate and has been unfailingly kind and gentle to his baby brother. I have mostly borne the brunt of his anger about the big changes in his life. He definitely has good days where he listens well and is fun to be around, but then he also has really bad days where he is pretty out of control: huge tantrums that involve scratching, hitting, kicking, throwing hard things at my head, and running away down the street when the nanny picks him up from preschool.

These tantrums have gotten more frequent over the past six months. We have tried a range of disciplinary tactics like taking toys away for bad behavior and offering incentives for good behavior, but these don’t seem to work. His teacher and nanny say that this behavior is not normal and he should be “evaluated” for some kind of disorder (though the teacher was vague about what this would be), but my husband is adamantly opposed to an evaluation for fear Sam will receive a label. My husband, who is an M.D., says this is how he was when he was a child (very stubborn), there is nothing abnormal about our son, and there is a tendency these days to overdiagnose kids who really are in the normal range. I feel that even if the behavior is normal, it doesn’t hurt for Sam to get a little help managing his anger. However, I have a lot of respect for my husband (and he’s often right), and I also understand his worry about having our child labeled. I guess my question has two parts: 1) Is this behavior normal for a 3-year-old?, and 2) should I insist that he get the evaluation over my husband’s objections?

');
}

function tryGetCriteoFastBid() {
try {
var fastBidStorageKey = "criteo_fast_bid",
hashPrefix = "// Hash: ",
fastBidFromStorage = storage.getDataFromLocalStorage(fastBidStorageKey),
firstLineEndPosition,
firstLine,
publisherTagHash,
publisherTag;
null !== fastBidFromStorage && (firstLineEndPosition = fastBidFromStorage.indexOf("n"), firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim(), firstLine.substr(0, hashPrefix.length) !== hashPrefix ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("No hash found in FastBid"), storage.removeDataFromLocalStorage(fastBidStorageKey)) : (publisherTagHash = firstLine.substr(hashPrefix.length), publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1), Object(__WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__.verify)(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E) ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logInfo("Using Criteo FastBid"), eval(publisherTag)) : (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("Invalid Criteo FastBid found"), storage.removeDataFromLocalStorage(fastBidStorageKey))));
} catch
}

Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__.registerBidder)(spec);
},
377: function _(t, e, r) {
"use strict";

Object.defineProperty(e, "__esModule", {
value: !0
});
var a = r(378),
n = r(379);

e.verify = function (t, e, r, i) {
var s = new a.BigInteger(a.b64toHex(e)),
o = new a.BigInteger(a.b64toHex(r)),
_ = s.modPowInt(i, o);

return a.removeExtraSymbols(_.toHexString()) === n.Sha256.hash
};
},
378: function _(t, e, r) {
"use strict";

var i;
Object.defineProperty(e, "__esModule", {
value: !0
});
var s = (T.prototype.toHexString = function () {
if (this.s < 0) return "-" + this.negate().toHexString(); var t, e = !1, r = "", i = this.t, s = this.DB - i * this.DB % 4; if (0 < i--) for (s < this.DB && 0 < (t = this[i] >> s) && (e = !0, r = c
s < 4 ? (t = (this[i] & (1 << s) - 1) << 4 - s, t |= this[--i] >> (s += this.DB - 4)) : (t = this[i] >> (s -= 4) & 15, s <= 0 && (s += this.DB, --i)), 0 < t && (e = !0), e && (r += c } return e ? r : "0"; }, T.prototype.fromHexString = function if (null !== t) { this.t = 0, this.s = 0; for (var e = t.length, r = !1, i = 0; 0 <= --e;) { var s = n(t, e); s < 0 ? "-" == t.charAt(e) && (r = !0) : (r = !1, 0 == i ? this[this.t++] = s : i + 4 > this.DB ? (this[this.t - 1] |= (s & (1 << this.DB - i) - 1) << i, this[this.t++] = s >> this.DB - i) : this[this.t - 1] |= s << i, (i += 4) >= this.DB && (i -= this.DB));
}

this.clamp(), r && T.ZERO.subTo(this, this);
}
}, T.prototype.negate = function () {
var t = b();
return T.ZERO.subTo(this, t), t;
}, T.prototype.abs = function () {
return this.s < 0 ? this.negate() : this; }, T.prototype.mod = function var e = b(); return this.abs().divRemTo(t, null, e), this.s < 0 && 0 < e.compareTo(T.ZERO) && t.subTo(e, e), e; }, T.prototype.copyTo = function for (var e = this.t - 1; 0 <= e; --e) { t[e] = this[e]; } t.t = this.t, t.s = this.s; }, T.prototype.lShiftTo = function (t, e) { for (var r = t % this.DB, i = this.DB - r, s = (1 << i) - 1, o = Math.floor(t / this.DB), _ = this.s << r & this.DM, a = this.t - 1; 0 <= a; --a) { e[a + o + 1] = this[a] >> i | _, _ = (this[a] & s) << r; } for (a = o - 1; 0 <= a; --a) { e[a] = 0; } e[o] = _, e.t = this.t + o + 1, e.s = this.s, e.clamp(); }, T.prototype.invDigit = function () { if (this.t < 1) return 0; var t = this[0]; if (0 == (1 & t)) return 0; var e = 3 & t; return 0 < (e = (e = (e = (e = e * (2 - (15 & t) * e) & 15) * (2 - (255 & t) * e) & 255) * (2 - ((65535 & t) * e & 65535)) & 65535) * (2 - t * e % this.DV) % this.DV) ? this.DV - e : -e; }, T.prototype.dlShiftTo = function (t, e) { for (var r = this.t - 1; 0 <= r; --r) { e[r + t] = this[r]; } for (r = t - 1; 0 <= r; --r) { e[r] = 0; } e.t = this.t + t, e.s = this.s; }, T.prototype.squareTo = function for (var e = this.abs(), r = t.t = 2 * e.t; 0 <= --r;) { t[r] = 0; } for (r = 0; r < e.t - 1; ++r) { var i = e.am(r, e[r], t, 2 * r, 0, 1); (t[r + e.t] += e.am(r + 1, 2 * e[r], t, 2 * r + 1, i, e.t - r - 1)) >= e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1);
}

0 < t.t && (t[t.t - 1] += e.am(r, e[r], t, 2 * r, 0, 1)), t.s = 0, t.clamp(); }, T.prototype.multiplyTo = function (t, e) { var r = this.abs(), i = t.abs(), s = r.t; for (e.t = s + i.t; 0 <= --s;) { e[s] = 0; } for (s = 0; s < i.t; ++s) { e[s + r.t] = r.am(0, i[s], e, s, 0, r.t); } e.s = 0, e.clamp(), this.s != t.s && T.ZERO.subTo(e, e); }, T.prototype.divRemTo = function (t, e, r) { var i = t.abs(); if (!(i.t <= 0)) { var s = this.abs(); if (s.t < i.t) return null != e && e.fromHexString("0"), void (null != r && this.copyTo(r)); null == r && (r = b()); var o = b(), _ = this.s, a = t.s, n = this.DB - D(i[i.t - 1]); 0 < n ? (i.lShiftTo(n, o), s.lShiftTo(n, r)) : (i.copyTo(o), s.copyTo(r)); var p = o.t, c = o[p - 1]; if (0 != c) { var d = c * (1 << this.F1) + (1 < p ? o[p - 2] >> this.F2 : 0),
u = this.FV / d,
h = (1 << this.F1) / d, l = 1 << this.F2, f = r.t, E = f - p, v = null == e ? b() : e; for (o.dlShiftTo(E, v), 0 <= r.compareTo(v) && (r[r.t++] = 1, r.subTo(v, r)), T.ONE.dlShiftTo(p, v), v.subTo(o, o); o.t < p;) { o[o.t++] = 0; } for (; 0 <= --E;) { var m = r[--f] == c ? this.DM : Math.floor(r[f] * u + (r[f - 1] + l) * h); if ((r[f] += o.am(0, m, r, E, 0, p)) < m) for (o.dlShiftTo(E, v), r.subTo(v, r); r[f] < --m;) { r.subTo(v, r); } } null != e && (r.drShiftTo(p, e), _ != a && T.ZERO.subTo(e, e)), r.t = p, r.clamp(), 0 < n && r.rShiftTo(n, r), _ < 0 && T.ZERO.subTo(r, r); } } }, T.prototype.rShiftTo = function (t, e) { e.s = this.s; var r = Math.floor(t / this.DB); if (r >= this.t) e.t = 0;else {
var i = t % this.DB,
s = this.DB - i,
o = (1 << i) - 1; e[0] = this[r] >> i;

for (var _ = r + 1; _ < this.t; ++_) { e[_ - r - 1] |= (this[_] & o) << s, e[_ - r] = this[_] >> i;
}

0 < i && (e[this.t - r - 1] |= (this.s & o) << s), e.t = this.t - r, e.clamp(); } }, T.prototype.drShiftTo = function (t, e) { for (var r = t; r < this.t; ++r) { e[r - t] = this[r]; } e.t = Math.max(this.t - t, 0), e.s = this.s; }, T.prototype.subTo = function (t, e) { for (var r = 0, i = 0, s = Math.min(t.t, this.t); r < s;) { i += this[r] - t[r], e[r++] = i & this.DM, i >>= this.DB;
}

if (t.t < this.t) { for (i -= t.s; r < this.t;) { i += this[r], e[r++] = i & this.DM, i >>= this.DB;
}

i += this.s;
} else {
for (i += this.s; r < t.t;) { i -= t[r], e[r++] = i & this.DM, i >>= this.DB;
}

i -= t.s;
}

e.s = i < 0 ? -1 : 0, i < -1 ? e[r++] = this.DV + i : 0 < i && (e[r++] = i), e.t = r, e.clamp(); }, T.prototype.clamp = function () { for (var t = this.s & this.DM; 0 < this.t && this[this.t - 1] == t;) { --this.t; } }, T.prototype.modPowInt = function (t, e) { var r = new (t < 256 || e.isEven() ? d : h)(e); return this.exp(t, r); }, T.prototype.exp = function (t, e) { if (4294967295 < t || t < 1) return T.ONE; var r, i = b(), s = b(), o = e.convert(this), _ = D for (o.copyTo(i); 0 <= --_;) { e.sqrTo(i, s), 0 < (t & 1 << _) ? e.mulTo(s, o, i) : (r = i, i = s, s = r); } return e.revert(i); }, T.prototype.isEven = function () { return 0 == (0 < this.t ? 1 & this[0] : this.s); }, T.prototype.compareTo = function var e = this.s - t.s; if (0 != e) return e; var r = this.t; if (0 != (e = r - t.t)) return this.s < 0 ? -e : e; for (; 0 <= --r;) { if (0 != (e = this[r] - t[r])) return e; } return 0; }, T.prototype.am1 = function (t, e, r, i, s, o) { for (; 0 <= --o;) { var _ = e * this[t++] + r[i] + s; s = Math.floor(_ / 67108864), r[i++] = 67108863 & _; } return s; }, T.prototype.am2 = function (t, e, r, i, s, o) { for (var _ = 32767 & e, a = e >> 15; 0 <= --o;) { var n = 32767 & this p = this[t++] >> 15,
c = a * n + p * _;
s = ((n = _ * n + ((32767 & c) << 15) + r[i] + (1073741823 & s)) >>> 30) + (c >>> 15) + a * p + (s >>> 30), r[i++] = 1073741823 & n;
}

return s;
}, T.prototype.am3 = function (t, e, r, i, s, o) {
for (var _ = 16383 & e, a = e >> 14; 0 <= --o;) { var n = 16383 & this p = this[t++] >> 14,
c = a * n + p * _;
s = ((n = _ * n + ((16383 & c) << 14) + r[i] + s) >> 28) + (c >> 14) + a * p, r[i++] = 268435455 & n;
}

return s;
}, T);

function T
null !== t && this.fromHexString
}

function b() {
return new s(null);
}

function D
var e,
r = 1;
return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r;
}

e.BigInteger = s, e.nbi = b, e.nbits = D;

for (var o = [], _ = "0".charCodeAt(0), a = 0; a <= 9; ++a) { o[_++] = a; } for (_ = "a".charCodeAt(0), a = 10; a < 36; ++a) { o[_++] = a; } for (_ = "A".charCodeAt(0), a = 10; a < 36; ++a) { o[_++] = a; } function n(t, e) { var r = o[t.charCodeAt(e)]; return null == r ? -1 : r; } e.intAt = n; var p = "0123456789abcdefghijklmnopqrstuvwxyz"; function c return p.charAt } e.int2char = c; e.b64toHex = function for (var e = "", r = 0, i = 0, s = 0; s < t.length && "=" != t.charAt(s); ++s) { var o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(t.charAt(s)); o < 0 || (r = 0 == r ? (e += c(o >> 2), i = 3 & o, 1) : 1 == r ? (e += c(i << 2 | o >> 4), i = 15 & o, 2) : 2 == r ? (e += c(i), e += c(o >> 2), i = 3 & o, 3) : (e += c(i << 2 | o >> 4), e += c(15 & o), 0));
}

return 1 == r && (e += c(i << 2)), e; }, e.removeExtraSymbols = function return t.replace(/^1f+00/, "").replace("3031300d060960864801650304020105000420"https://slate.com/human-interest/2020/11/,""); }; var d = (u.prototype.convert = function return t.s < 0 || 0 <= t.compareTo(this.m) ? t.mod(this.m) : t; }, u.prototype.revert = function return t; }, u.prototype.reduce = function t.divRemTo(this.m, null, t); }, u.prototype.mulTo = function (t, e, r) { t.multiplyTo(e, r), this.reduce(r); }, u.prototype.sqrTo = function (t, e) { t.squareTo(e), this.reduce(e); }, u); function u this.m = t; } var h = (l.prototype.convert = function var e = b(); return t.abs().dlShiftTo(this.m.t, e), e.divRemTo(this.m, null, e), t.s < 0 && 0 < e.compareTo(s.ZERO) && this.m.subTo(e, e), e; }, l.prototype.revert = function var e = b(); return t.copyTo(e), this.reduce(e), e; }, l.prototype.reduce = function for (; t.t <= this.mt2;) { t[t.t++] = 0; } for (var e = 0; e < this.m.t; ++e) { var r = 32767 & t[e], i = r * this.mpl + ((r * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM; for (t[r = e + this.m.t] += this.m.am(0, i, t, e, 0, this.m.t); t[r] >= t.DV;) {
t[r] -= t.DV, t[++r]++;
}
}

t.clamp(), t.drShiftTo(this.m.t, t), 0 <= t.compareTo(this.m) && t.subTo(this.m, t); }, l.prototype.mulTo = function (t, e, r) { t.multiplyTo(e, r), this.reduce(r); }, l.prototype.sqrTo = function (t, e) { t.squareTo(e), this.reduce(e); }, l); function l this.m = t, this.mp = t.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << t.DB - 15) - 1, this.mt2 = 2 * t.t; } function f var e = b(); return e.fromHexString(t.toString()), e; } e.nbv = f, s.ZERO = f(0), s.ONE = f(1), i = "Microsoft Internet Explorer" == navigator.appName ? (s.prototype.am = s.prototype.am2, 30) : "Netscape" != navigator.appName ? (s.prototype.am = s.prototype.am1, 26) : (s.prototype.am = s.prototype.am3, 28), s.prototype.DB = i, s.prototype.DM = (1 << i) - 1, s.prototype.DV = 1 << i; s.prototype.FV = Math.pow(2, 52), s.prototype.F1 = 52 - i, s.prototype.F2 = 2 * i - 52; }, 379: function _(t, e, r) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = (y.hash = function t = y.utf8Encode(t || ""); for (var e = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], r = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225], i = (t += String.fromCharCode(128)).length / 4 + 2, s = Math.ceil(i / 16), o = new Array(s), _ = 0; _ < s; _++) { o[_] = new Array(16); for (var a = 0; a < 16; a++) { o[_][a] = t.charCodeAt(64 * _ + 4 * a) << 24 | t.charCodeAt(64 * _ + 4 * a + 1) << 16 | t.charCodeAt(64 * _ + 4 * a + 2) << 8 | t.charCodeAt(64 * _ + 4 * a + 3) << 0; } } var n = 8 * (t.length - 1) / Math.pow(2, 32), p = 8 * (t.length - 1) >>> 0;

for (o[s - 1][14] = Math.floor(n), o[s - 1][15] = p, _ = 0; _ < s; _++) { for (var c = new Array(64), d = 0; d < 16; d++) { c[d] = o[_][d]; } for (d = 16; d < 64; d++) { c[d] = y.q1(c[d - 2]) + c[d - 7] + y.q0(c[d - 15]) + c[d - 16] >>> 0;
}

for (var u = r[0], h = r[1], l = r[2], f = r[3], E = r[4], v = r[5], m = r[6], T = r[7], d = 0; d < 64; d++) { var b = T + y.z1(E) + y.Ch(E, v, m) + e[d