{"id":24675,"date":"2026-08-18T02:49:16","date_gmt":"2026-08-18T02:49:16","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24675"},"modified":"2026-08-18T03:18:21","modified_gmt":"2026-08-18T03:18:21","slug":"bolt-preload-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/bolt-preload-calculator\/","title":{"rendered":"Bolt Preload Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bolt Preload Calculator<\/strong> is a practical engineering tool designed to estimate the required preload force and tightening torque for bolted connections. By considering bolt diameter, thread pitch, material strength, preload percentage, and friction conditions, it helps engineers determine suitable bolt tension and clamping force for reliable assemblies. The Bolt Preload Calculator supports mechanical design, installation, and maintenance while helping reduce the risks of bolt loosening, insufficient clamping, excessive stress, fatigue damage, and premature joint failure.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <meta name=\"description\" content=\"Bolt Preload Calculator for engineers. Estimate bolt preload force, tightening torque, tensile stress, and clamp force from bolt size, material strength, friction, and target preload percentage.\" \/>\n  <title>Bolt Preload Calculator | Bolt Tightening Torque &amp; Clamp Force<\/title>\n<\/head>\n<body>\n<!--\n  WordPress embed: copy the entire #bpc-root div (style + markup + script)\n  into a Custom HTML block. Paste the whole #bpc-root block in Code Editor mode and replace any old copy. Do not re-save in Visual mode. If a cache plugin delays scripts, exclude bpc-js-b64 and bpc-boot-script.\n  All CSS is scoped to #bpc-root and will not affect theme header, footer, or other content.\n-->\n<div id=\"bpc-root\">\n<style id=\"bpc-calc-styles\">\n\/*\n * WordPress-safe: every rule is scoped under #bpc-root.\n * This stylesheet must not restyle theme header, footer, or content\n * outside the calculator. No html\/body\/universal selectors.\n *\/\n\n#bpc-root {\n  all: revert;\n  --bpc-bg: transparent;\n  --bpc-surface: #ffffff;\n  --bpc-surface-2: #f4f7fa;\n  --bpc-ink: #0f172a;\n  --bpc-muted: #64748b;\n  --bpc-line: #d4dde8;\n  --bpc-accent: #0369a1;\n  --bpc-accent-2: #0284c7;\n  --bpc-steel: #1e293b;\n  --bpc-ok: #059669;\n  --bpc-ok-bg: #ecfdf5;\n  --bpc-ok-ink: #065f46;\n  --bpc-warn: #d97706;\n  --bpc-warn-bg: #fffbeb;\n  --bpc-warn-ink: #92400e;\n  --bpc-risk: #dc2626;\n  --bpc-risk-bg: #fef2f2;\n  --bpc-risk-ink: #991b1b;\n  --bpc-radius: 10px;\n  --bpc-shadow: 0 1px 3px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.06);\n  --bpc-mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n  --bpc-sans: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n\n  box-sizing: border-box;\n  display: block;\n  isolation: isolate;\n  contain: layout style;\n  float: none;\n  position: relative;\n  z-index: auto;\n  font-family: var(--bpc-sans);\n  font-size: 15px;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bpc-ink);\n  background: var(--bpc-bg);\n  width: 1000px;\n  max-width: 100%;\n  margin: 0 auto;\n  padding: 1.25rem 1rem 2rem;\n  text-align: left;\n  letter-spacing: normal;\n  text-transform: none;\n}\n\n#bpc-root *,\n#bpc-root *::before,\n#bpc-root *::after { box-sizing: border-box; }\n\n#bpc-root h1, #bpc-root h2, #bpc-root h3, #bpc-root h4,\n#bpc-root p, #bpc-root ul, #bpc-root ol, #bpc-root li,\n#bpc-root figure, #bpc-root blockquote, #bpc-root section,\n#bpc-root header, #bpc-root footer, #bpc-root div, #bpc-root span,\n#bpc-root strong, #bpc-root em, #bpc-root i, #bpc-root b {\n  margin: 0; padding: 0; border: none; background: none; box-shadow: none;\n  font-family: inherit; font-size: inherit; font-weight: inherit; font-style: inherit;\n  line-height: inherit; color: inherit; letter-spacing: inherit; text-transform: none;\n  text-decoration: none; float: none;\n}\n\n#bpc-root button, #bpc-root input, #bpc-root select, #bpc-root textarea, #bpc-root label {\n  font: inherit; color: inherit; margin: 0; max-width: none; min-width: 0; float: none;\n}\n#bpc-root button {\n  cursor: pointer; background: transparent; border: none; padding: 0;\n  box-shadow: none; text-decoration: none; appearance: none; -webkit-appearance: none;\n}\n#bpc-root img, #bpc-root svg { display: block; max-width: 100%; height: auto; }\n#bpc-root a { color: var(--bpc-accent); text-decoration: none; }\n#bpc-root a:hover { text-decoration: underline; }\n#bpc-root ul, #bpc-root ol { padding-left: 1.2rem; }\n#bpc-root li { margin: 0.28rem 0; }\n#bpc-root strong { font-weight: 700; }\n#bpc-root sub, #bpc-root sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n#bpc-root sub { bottom: -0.2em; }\n#bpc-root sup { top: -0.45em; }\n#bpc-root .bpc-mono { font-family: var(--bpc-mono); }\n#bpc-root #bpc-js-b64 {\n  display: none !important;\n  width: 0 !important;\n  height: 0 !important;\n  border: 0 !important;\n  padding: 0 !important;\n  position: absolute !important;\n  left: -9999px !important;\n}\n#bpc-root .bpc-hidden { display: none !important; }\n\n\/* \u2500\u2500 Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#bpc-root .bpc-layout {\n  display: flex;\n  flex-direction: column;\n  gap: 1.15rem;\n}\n\n#bpc-root .bpc-card {\n  background: var(--bpc-surface);\n  border: 1px solid var(--bpc-line);\n  border-radius: var(--bpc-radius);\n  box-shadow: var(--bpc-shadow);\n  overflow: visible;\n}\n#bpc-root .bpc-card-h {\n  display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 0.75rem !important;\n  padding: 0.72rem 1rem;\n  background: linear-gradient(180deg, #f8fafc, #f1f5f9);\n  border-bottom: 1px solid var(--bpc-line);\n  flex-wrap: wrap;\n  position: relative;\n  z-index: 2;\n  overflow: visible;\n}\n#bpc-root .bpc-card-h h2 {\n  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;\n  color: var(--bpc-steel);\n  width: auto !important; max-width: none !important; flex: 0 1 auto !important;\n  position: static !important; pointer-events: none;\n}\n#bpc-root .bpc-card-b { padding: 0.95rem 1rem 1.1rem; }\n\n#bpc-root .bpc-results-wrap {\n  position: static;\n  width: 100%;\n}\n\n#bpc-root .bpc-section {\n  font-size: 0.78rem; font-weight: 700; color: var(--bpc-ink);\n  margin: 1.05rem 0 0.65rem; padding: 0 0 0.3rem;\n  border-bottom: 1px dashed var(--bpc-line);\n  display: flex; align-items: center; gap: 0.45rem;\n}\n#bpc-root .bpc-section:first-child { margin-top: 0; }\n#bpc-root .bpc-badge {\n  width: 1.35rem; height: 1.35rem; border-radius: 999px; flex-shrink: 0;\n  display: inline-flex; align-items: center; justify-content: center;\n  background: linear-gradient(135deg, #0f172a, #334155); color: #fff;\n  font-size: 0.65rem; font-weight: 700;\n}\n\n#bpc-root .bpc-grid { display: grid; gap: 0.7rem 0.75rem; }\n#bpc-root .bpc-g-2 { grid-template-columns: 1fr 1fr; }\n#bpc-root .g-3 { grid-template-columns: 1fr 1fr 1fr; }\n@media (max-width: 640px) {\n  #bpc-root .bpc-g-2, #bpc-root .bpc-g-3 { grid-template-columns: 1fr; }\n}\n\n#bpc-root label.bpc-fld { display: flex; flex-direction: column; gap: 0.28rem; min-width: 0; }\n#bpc-root label.bpc-fld > span.bpc-lbl {\n  font-size: 0.75rem; font-weight: 600; color: #334155;\n  display: flex; align-items: center; gap: 0.3rem; flex-wrap: wrap;\n}\n#bpc-root .bpc-hint { font-size: 0.68rem; color: var(--bpc-muted); font-weight: 400; }\n\n#bpc-root input[type=\"number\"],\n#bpc-root input[type=\"text\"] {\n  appearance: none; -webkit-appearance: none; width: 100%;\n  border: 1px solid #cbd5e1; border-radius: 8px;\n  padding: 0.5rem 0.7rem; font-size: 0.8125rem; background: #fff; color: #0f172a;\n  font-family: var(--bpc-mono); box-shadow: none; line-height: 1.25;\n}\n#bpc-root input[type=\"number\"]::-webkit-outer-spin-button,\n#bpc-root input[type=\"number\"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n#bpc-root input[type=\"number\"] { -moz-appearance: textfield; appearance: textfield; }\n\n#bpc-root select {\n  display: block !important; width: 100% !important; min-height: 2.45rem !important;\n  margin: 0 !important; padding: 0.48rem 2rem 0.48rem 0.7rem !important;\n  border: 1px solid #cbd5e1 !important; border-radius: 8px !important;\n  background-color: #fff !important; color: #0f172a !important;\n  font-size: 0.8125rem !important; font-family: var(--bpc-mono) !important;\n  line-height: 1.25 !important; box-shadow: none !important;\n  appearance: auto !important; -webkit-appearance: menulist !important;\n}\n#bpc-root input:focus, #bpc-root select:focus {\n  outline: 2px solid #38bdf8; outline-offset: 0; border-color: #0ea5e9;\n}\n#bpc-root input:disabled, #bpc-root input[readonly] { background: #f8fafc; color: #0f172a; }\n#bpc-root input.bpc-invalid { border-color: #ef4444; background: #fef2f2; }\n#bpc-root .bpc-err {\n  font-size: 0.68rem; color: var(--bpc-risk); min-height: 0.85rem; line-height: 1.3;\n}\n\n#bpc-root .bpc-input-row {\n  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.4rem; align-items: stretch;\n}\n#bpc-root .bpc-unit-pill {\n  display: inline-flex; align-items: center; justify-content: center;\n  min-width: 3.4rem; padding: 0 0.55rem; border: 1px solid #cbd5e1; border-radius: 8px;\n  background: #f8fafc; color: var(--bpc-muted); font-size: 0.72rem; font-weight: 600;\n  font-family: var(--bpc-mono); white-space: nowrap;\n}\n\n#bpc-root .bpc-check {\n  display: flex; align-items: center; gap: 0.45rem;\n  font-size: 0.75rem; color: #334155; font-weight: 500; margin-top: 0.15rem;\n}\n#bpc-root .bpc-check input { width: 0.95rem; height: 0.95rem; accent-color: #0284c7; flex-shrink: 0; }\n\n\/* \u2500\u2500 Tools \/ chips \/ slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#bpc-root .bpc-tools {\n  display: flex !important; align-items: center !important; gap: 0.5rem !important; flex-shrink: 0 !important;\n  position: relative !important; z-index: 5 !important; margin-left: auto;\n  pointer-events: auto !important;\n}\n#bpc-root .bpc-unit-switch {\n  display: inline-flex !important; align-items: center !important; gap: 2px !important; padding: 3px !important;\n  border-radius: 8px !important; background: #0f172a !important; border: 1px solid #1e293b !important;\n  position: relative !important; z-index: 6 !important; pointer-events: auto !important;\n}\n#bpc-root .bpc-unit-switch .bpc-unit-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border: none !important; border-radius: 6px !important;\n  background: transparent !important; color: #cbd5e1 !important; font-size: 0.8125rem !important; font-weight: 500 !important;\n  font-family: inherit !important; cursor: pointer !important; line-height: 1.25 !important;\n  pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#bpc-root .bpc-unit-switch .bpc-unit-btn:hover { color: #fff !important; }\n#bpc-root .bpc-unit-switch .bpc-unit-btn.bpc-is-active { background: #0ea5e9 !important; color: #fff !important; font-weight: 600 !important; }\n\n#bpc-root .bpc-reset-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border-radius: 6px !important; border: 1px solid #d1d5db !important;\n  background: #ffffff !important; color: #0f172a !important; font-size: 0.8125rem !important; font-weight: 500 !important;\n  font-family: inherit !important; cursor: pointer !important; line-height: 1.25 !important;\n  pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#bpc-root .bpc-reset-btn:hover { background: #f8fafc !important; border-color: #94a3b8 !important; }\n\n#bpc-root .bpc-chip-row { display: flex; flex-wrap: wrap; gap: 0.35rem; }\n#bpc-root .bpc-chip {\n  appearance: none !important; display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  padding: 0.32rem 0.55rem !important; border-radius: 6px !important;\n  border: 1px solid #cbd5e1 !important; background: #fff !important; color: #334155 !important;\n  font-size: 0.72rem !important; font-weight: 600 !important; font-family: var(--bpc-mono) !important;\n  cursor: pointer !important; line-height: 1.25 !important; margin: 0 !important;\n}\n#bpc-root .bpc-chip:hover { border-color: #38bdf8 !important; }\n#bpc-root .bpc-chip.bpc-is-active { background: #0284c7 !important; color: #fff !important; border-color: #0284c7 !important; }\n\n#bpc-root .bpc-slider-head {\n  display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;\n}\n#bpc-root .bpc-slider-val {\n  font-family: var(--bpc-mono); font-size: 0.85rem; font-weight: 700; color: var(--bpc-accent);\n}\n#bpc-root input[type=\"range\"] {\n  width: 100%; height: 0.45rem; accent-color: #0284c7; cursor: pointer; margin: 0.15rem 0 0;\n}\n\n#bpc-root .bpc-note {\n  font-size: 0.72rem; color: var(--bpc-muted); background: var(--bpc-surface-2);\n  border: 1px solid var(--bpc-line); border-radius: 8px; padding: 0.5rem 0.65rem; line-height: 1.45;\n}\n\n#bpc-root .bpc-actions {\n  display: flex; justify-content: center; gap: 0.65rem; flex-wrap: wrap;\n  margin-top: 1.15rem; padding-top: 0.9rem; border-top: 1px solid var(--bpc-line);\n}\n#bpc-root #bpcBtnCalculate.bpc-calc-btn {\n  appearance: none !important; display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  min-width: 220px !important; padding: 0.85rem 2.5rem !important; border: none !important; border-radius: 10px !important;\n  background: #0077c2 !important; color: #ffffff !important; font-size: 1rem !important; font-weight: 700 !important;\n  font-family: inherit !important; cursor: pointer !important; letter-spacing: 0.01em !important;\n}\n#bpc-root #bpcBtnCalculate.bpc-calc-btn:hover { background: #0066a8 !important; }\n#bpc-root #bpcBtnCalculate.bpc-calc-btn:active { background: #005a94 !important; }\n\n\/* \u2500\u2500 Tooltips \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#bpc-root .bpc-tip {\n  position: relative; display: inline-flex; align-items: center; justify-content: center;\n  width: 0.95rem; height: 0.95rem; border-radius: 999px;\n  background: #e2e8f0; color: #475569; font-size: 0.62rem; font-weight: 700;\n  cursor: help; flex-shrink: 0; line-height: 1;\n}\n#bpc-root .bpc-tip:hover, #bpc-root .bpc-tip:focus { background: #0284c7; color: #fff; outline: none; }\n#bpc-root .bpc-tip-box {\n  display: none; position: absolute; left: 50%; bottom: calc(100% + 8px); transform: translateX(-50%);\n  width: 16.5rem; padding: 0.55rem 0.65rem; border-radius: 8px; z-index: 20;\n  background: #0f172a; color: #e2e8f0; font-size: 0.7rem; font-weight: 400; line-height: 1.4;\n  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.25); text-align: left; text-transform: none; letter-spacing: normal;\n}\n#bpc-root .bpc-tip-box::after {\n  content: \"\"; position: absolute; left: 50%; top: 100%; transform: translateX(-50%);\n  border: 6px solid transparent; border-top-color: #0f172a;\n}\n#bpc-root .bpc-tip:hover .bpc-tip-box,\n#bpc-root .bpc-tip:focus .bpc-tip-box { display: block; }\n\n\/* \u2500\u2500 Results \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n#bpc-root .bpc-banner {\n  border-radius: 10px; padding: 0.85rem 1rem; color: #fff; margin-bottom: 0.85rem;\n  display: flex; align-items: flex-start; gap: 0.75rem;\n}\n#bpc-root .bpc-banner .bpc-dot {\n  width: 0.7rem; height: 0.7rem; border-radius: 999px; background: #fff; flex-shrink: 0; margin-top: 0.28rem;\n}\n#bpc-root .bpc-banner-kicker {\n  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.85;\n}\n#bpc-root .bpc-banner-title { font-size: 1.15rem; font-weight: 750; margin: 0.1rem 0 0.2rem; }\n#bpc-root .bpc-banner-note { font-size: 0.75rem; opacity: 0.92; line-height: 1.45; }\n#bpc-root .bpc-banner-ok { background: linear-gradient(90deg, #14532d, #166534); }\n#bpc-root .bpc-banner-caution { background: linear-gradient(90deg, #854d0e, #a16207); }\n#bpc-root .bpc-banner-risk { background: linear-gradient(90deg, #7f1d1d, #991b1b); }\n#bpc-root .bpc-banner-idle { background: linear-gradient(90deg, #334155, #475569); }\n\n#bpc-root .bpc-hero {\n  display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 0.75rem;\n}\n@media (max-width: 520px) { #bpc-root .bpc-hero { grid-template-columns: 1fr; } }\n\n#bpc-root .bpc-hero-card {\n  border: 1px solid var(--bpc-line); border-radius: 10px; padding: 0.8rem 0.85rem;\n  background: linear-gradient(180deg, #fff, #f8fafc);\n}\n#bpc-root .bpc-hero-card.bpc-is-accent {\n  border-color: #7dd3fc; background: linear-gradient(180deg, #f0f9ff, #fff);\n}\n#bpc-root .bpc-hero-k {\n  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--bpc-muted);\n}\n#bpc-root .bpc-hero-v {\n  font-family: var(--bpc-mono); font-size: 1.35rem; font-weight: 700; color: #0f172a; margin-top: 0.2rem; line-height: 1.2;\n}\n#bpc-root .bpc-hero-u { font-size: 0.7rem; color: var(--bpc-muted); margin-top: 0.15rem; }\n\n#bpc-root .bpc-gauge-row {\n  display: grid; grid-template-columns: 150px 1fr; gap: 0.75rem; align-items: center;\n  border: 1px solid var(--bpc-line); border-radius: 10px; padding: 0.55rem 0.75rem 0.4rem;\n  background: #fff; margin-bottom: 0.75rem;\n}\n@media (max-width: 520px) { #bpc-root .bpc-gauge-row { grid-template-columns: 1fr; } }\n#bpc-root .bpc-gauge-svg { width: 150px; height: auto; }\n#bpc-root .bpc-gauge-readout { font-family: var(--bpc-mono); font-size: 1.05rem; font-weight: 700; }\n#bpc-root .bpc-gauge-label { font-size: 0.68rem; color: var(--bpc-muted); }\n\n#bpc-root .bpc-util { margin-bottom: 0.85rem; }\n#bpc-root .bpc-util-head {\n  display: flex; justify-content: space-between; gap: 0.5rem; font-size: 0.72rem; margin-bottom: 0.35rem;\n}\n#bpc-root .bpc-util-head strong { font-weight: 700; }\n#bpc-root .bpc-util-track {\n  position: relative; height: 14px; border-radius: 999px; overflow: hidden; background: #e2e8f0;\n}\n#bpc-root .bpc-util-zones { display: flex; height: 100%; width: 100%; }\n#bpc-root .bpc-util-zones span { display: block; height: 100%; }\n#bpc-root .bpc-z-low { width: 50%; background: #cbd5e1; }\n#bpc-root .bpc-z-ok { width: 35%; background: #6ee7b7; }\n#bpc-root .bpc-z-hi { width: 15%; background: #fcd34d; }\n#bpc-root .bpc-util-fill {\n  position: absolute; left: 0; top: 0; bottom: 0; width: 0;\n  background: linear-gradient(90deg, #0284c7, #0369a1); border-radius: 999px;\n  transition: width 0.25s ease;\n}\n#bpc-root .bpc-util-fill.bpc-is-ok { background: linear-gradient(90deg, #059669, #047857); }\n#bpc-root .bpc-util-fill.bpc-is-caution { background: linear-gradient(90deg, #d97706, #b45309); }\n#bpc-root .bpc-util-fill.bpc-is-risk { background: linear-gradient(90deg, #dc2626, #b91c1c); }\n#bpc-root .bpc-util-legend {\n  display: flex; flex-wrap: wrap; gap: 0.65rem 1rem; margin-top: 0.35rem;\n  font-size: 0.65rem; color: var(--bpc-muted);\n}\n#bpc-root .bpc-util-legend i {\n  display: inline-block; width: 0.65rem; height: 0.65rem; border-radius: 2px; margin-right: 0.25rem;\n  vertical-align: -1px; font-style: normal;\n}\n\n#bpc-root .bpc-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 0.55rem; }\n@media (min-width: 720px) {\n  #bpc-root .bpc-tiles { grid-template-columns: repeat(3, 1fr); }\n}\n#bpc-root .bpc-tile {\n  background: linear-gradient(180deg, #fff, #f8fafc);\n  border: 1px solid var(--bpc-line); border-radius: 8px; padding: 0.6rem 0.7rem;\n}\n#bpc-root .bpc-tile .bpc-k { font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bpc-muted); }\n#bpc-root .bpc-tile .bpc-v { font-family: var(--bpc-mono); font-size: 0.98rem; font-weight: 700; color: #0f172a; margin-top: 0.12rem; }\n#bpc-root .bpc-tile .bpc-u { font-size: 0.68rem; color: var(--bpc-muted); }\n\n#bpc-root .bpc-alerts { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.75rem; }\n#bpc-root .bpc-alert {\n  border-radius: 8px; padding: 0.5rem 0.7rem; font-size: 0.75rem; border: 1px solid; line-height: 1.4;\n}\n#bpc-root .bpc-alert-ok { background: #ecfdf5; border-color: #a7f3d0; color: #065f46; }\n#bpc-root .bpc-alert-warn { background: #fffbeb; border-color: #fcd34d; color: #92400e; }\n#bpc-root .bpc-alert-risk { background: #fef2f2; border-color: #fca5a5; color: #991b1b; }\n\n@media print {\n  #bpc-root { max-width: none; padding: 0; background: #fff; }\n  #bpc-root .bpc-no-print { display: none !important; }\n  #bpc-root .bpc-layout { display: block; }\n  #bpc-root .bpc-card { break-inside: avoid; box-shadow: none; }\n}\n  <\/style>\n\n\n  <div class=\"bpc-layout\">\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 INPUTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <section class=\"bpc-card\" id=\"bpcInputs\">\n      <div class=\"bpc-card-h\">\n        <h2>Input parameters<\/h2>\n        <div class=\"bpc-tools bpc-no-print\">\n          <div class=\"bpc-unit-switch\" role=\"group\" aria-label=\"Unit system\">\n            <button type=\"button\" class=\"bpc-unit-btn bpc-is-active\" id=\"bpcBtnMetric\" data-unit=\"metric\" onclick=\"(function(){if(window.bpcSwitchUnit){window.bpcSwitchUnit('metric');return false;}var t=document.getElementById('bpc-js-b64');if(!t){return false;}var c=t.value;if(!c){c=t.textContent;}if(!c){return false;}c=c.replace(\/\\s\/g,'');var s=document.createElement('script');s.type='text\/javascript';s.text=atob(c);(document.body||document.getElementsByTagName('head')[0]).appendChild(s);setTimeout(function(){if(window.bpcSwitchUnit){window.bpcSwitchUnit('metric');}},150);return false;})()\">Metric<\/button>\n            <button type=\"button\" class=\"bpc-unit-btn\" id=\"bpcBtnImperial\" data-unit=\"imperial\" onclick=\"(function(){if(window.bpcSwitchUnit){window.bpcSwitchUnit('imperial');return false;}var t=document.getElementById('bpc-js-b64');if(!t){return false;}var c=t.value;if(!c){c=t.textContent;}if(!c){return false;}c=c.replace(\/\\s\/g,'');var s=document.createElement('script');s.type='text\/javascript';s.text=atob(c);(document.body||document.getElementsByTagName('head')[0]).appendChild(s);setTimeout(function(){if(window.bpcSwitchUnit){window.bpcSwitchUnit('imperial');}},150);return false;})()\">Imperial<\/button>\n          <\/div>\n          <button type=\"button\" class=\"bpc-reset-btn\" id=\"bpcBtnReset\" onclick=\"(function(){if(window.bpcReset){window.bpcReset();return false;}var t=document.getElementById('bpc-js-b64');if(!t){return false;}var c=t.value;if(!c){c=t.textContent;}if(!c){return false;}c=c.replace(\/\\s\/g,'');var s=document.createElement('script');s.type='text\/javascript';s.text=atob(c);(document.body||document.getElementsByTagName('head')[0]).appendChild(s);setTimeout(function(){if(window.bpcReset){window.bpcReset();}},150);return false;})()\">Reset<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"bpc-card-b\">\n\n        <div class=\"bpc-section\"><span class=\"bpc-badge\">1<\/span> Bolt geometry<\/div>\n        <div class=\"bpc-chip-row bpc-no-print\" id=\"bpcSizeChips\" aria-label=\"Common bolt sizes\"><\/div>\n        <div class=\"bpc-grid g-2\" style=\"margin-top:0.65rem\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Bolt diameter\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Nominal major diameter d. For metric bolts this is the M-size (e.g. 12 mm for M12). For UN bolts enter the nominal inch size.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcD\" type=\"number\" min=\"0\" step=\"any\" value=\"12\" inputmode=\"decimal\" \/>\n              <span class=\"bpc-unit-pill\" data-unit=\"d\">mm<\/span>\n            <\/div>\n            <span class=\"bpc-err\" id=\"bpcErrD\"><\/span>\n          <\/label>\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Thread pitch\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Metric: distance between threads in mm (M12 coarse = 1.75 mm). Imperial: threads per inch (TPI), e.g. 13 for \u00bd\u2033-13 UNC.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcP\" type=\"number\" min=\"0\" step=\"any\" value=\"1.75\" inputmode=\"decimal\" \/>\n              <span class=\"bpc-unit-pill\" data-unit=\"p\">mm<\/span>\n            <\/div>\n            <span class=\"bpc-err\" id=\"bpcErrP\"><\/span>\n          <\/label>\n        <\/div>\n        <div class=\"bpc-grid g-2\" style=\"margin-top:0.15rem\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Tensile stress area A<sub>t<\/sub>\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Effective tensile area of the threaded section. Auto-calculated from diameter and pitch, or enter a catalog \/ ISO 898 value manually.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcAt\" type=\"number\" min=\"0\" step=\"any\" value=\"84.3\" inputmode=\"decimal\" readonly \/>\n              <span class=\"bpc-unit-pill\" data-unit=\"at\">mm\u00b2<\/span>\n            <\/div>\n            <span class=\"bpc-check\"><input type=\"checkbox\" id=\"bpcAtManual\" \/> Enter A<sub>t<\/sub> manually<\/span>\n            <span class=\"bpc-err\" id=\"bpcErrAt\"><\/span>\n          <\/label>\n          <div class=\"bpc-note\" style=\"align-self:end\">\n            Metric: A<sub>t<\/sub> = \u03c0\/4 \u00d7 (d \u2212 0.9382 p)\u00b2. UN: A<sub>t<\/sub> = \u03c0\/4 \u00d7 (d \u2212 0.9743\/n)\u00b2. ISO 898-1 M12 coarse is 84.3 mm\u00b2.\n          <\/div>\n        <\/div>\n\n        <div class=\"bpc-section\"><span class=\"bpc-badge\">2<\/span> Material strength<\/div>\n        <div class=\"bpc-chip-row bpc-no-print\" id=\"bpcGradeChips\" aria-label=\"Bolt grades\"><\/div>\n        <div class=\"bpc-grid g-2\" style=\"margin-top:0.65rem\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Yield strength S<sub>y<\/sub>\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Minimum yield or 0.2% proof stress of the bolt material. Property class 8.8 is typically 640 MPa. Used for yield load F<sub>y<\/sub> = A<sub>t<\/sub> \u00d7 S<sub>y<\/sub>.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcSy\" type=\"number\" min=\"0\" step=\"any\" value=\"640\" inputmode=\"decimal\" \/>\n              <span class=\"bpc-unit-pill\" data-unit=\"s\">MPa<\/span>\n            <\/div>\n            <span class=\"bpc-err\" id=\"bpcErrSy\"><\/span>\n          <\/label>\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Proof strength S<sub>p<\/sub>\n              <span class=\"bpc-hint\">(optional)<\/span>\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Bolt proof stress from ISO 898-1 or SAE J429. When entered, target preload is taken as a percentage of proof strength rather than yield. Leave blank to use yield strength.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcSp\" type=\"number\" min=\"0\" step=\"any\" value=\"600\" inputmode=\"decimal\" \/>\n              <span class=\"bpc-unit-pill\" data-unit=\"s\">MPa<\/span>\n            <\/div>\n            <span class=\"bpc-err\" id=\"bpcErrSp\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"bpc-section\"><span class=\"bpc-badge\">3<\/span> Target preload<\/div>\n        <label class=\"bpc-fld\">\n          <div class=\"bpc-slider-head\">\n            <span class=\"bpc-lbl\">\n              Target preload percentage\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Preload as a percentage of proof strength (if entered) or yield strength. Common targets: 50\u201360% conservative, 65\u201375% general joints, 75\u201385% controlled structural assemblies.<\/span><\/span>\n            <\/span>\n            <span class=\"bpc-slider-val\" id=\"bpcPreloadVal\">75%<\/span>\n          <\/div>\n          <input id=\"bpcPreload\" type=\"number\" min=\"1\" max=\"100\" step=\"1\" value=\"75\" \/>\n          <input id=\"bpcPreloadRange\" type=\"range\" min=\"50\" max=\"90\" step=\"1\" value=\"75\" \/>\n          <span class=\"bpc-err\" id=\"bpcErrPreload\"><\/span>\n        <\/label>\n\n        <div class=\"bpc-section\"><span class=\"bpc-badge\">4<\/span> Friction &amp; tightening<\/div>\n        <div class=\"bpc-grid g-2\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">Lubrication condition<\/span>\n            <select id=\"bpcLub\">\n              <option value=\"dry\">Dry<\/option>\n              <option value=\"light\" selected>Lightly Lubricated<\/option>\n              <option value=\"lub\">Lubricated<\/option>\n              <option value=\"antiseize\">Anti-Seize<\/option>\n              <option value=\"custom\">Custom<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Nut factor K\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Torque coefficient in T = K \u00d7 F<sub>i<\/sub> \u00d7 d. Typical as-received steel is about 0.20. Dry joints run higher; oil or anti-seize lowers K. Reasonable engineering range is roughly 0.10\u20130.30.<\/span><\/span>\n            <\/span>\n            <input id=\"bpcK\" type=\"number\" min=\"0\" step=\"any\" value=\"0.20\" inputmode=\"decimal\" \/>\n            <span class=\"bpc-err\" id=\"bpcErrK\"><\/span>\n          <\/label>\n        <\/div>\n        <div class=\"bpc-grid g-2\" style=\"margin-top:0.15rem\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Thread friction \u03bc<sub>t<\/sub>\n              <span class=\"bpc-hint\">(optional)<\/span>\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Coefficient of friction in the threads. If both \u03bc<sub>t<\/sub> and \u03bc<sub>b<\/sub> are entered, torque is calculated from the VDI \/ Shigley friction formula instead of K.<\/span><\/span>\n            <\/span>\n              <input id=\"bpcMut\" type=\"number\" min=\"0\" max=\"1\" step=\"any\" value=\"\" placeholder=\"optional\" inputmode=\"decimal\" \/>\n            <span class=\"bpc-err\" id=\"bpcErrMut\"><\/span>\n          <\/label>\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Bearing friction \u03bc<sub>b<\/sub>\n              <span class=\"bpc-hint\">(optional)<\/span>\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Friction under the nut or bolt head bearing face. Typical dry steel \u2248 0.15\u20130.20; lubricated \u2248 0.08\u20130.12. Mean bearing diameter is estimated as 1.3 d.<\/span><\/span>\n            <\/span>\n              <input id=\"bpcMub\" type=\"number\" min=\"0\" max=\"1\" step=\"any\" value=\"\" placeholder=\"optional\" inputmode=\"decimal\" \/>\n            <span class=\"bpc-err\" id=\"bpcErrMub\"><\/span>\n          <\/label>\n        <\/div>\n        <p class=\"bpc-note\" style=\"margin-top:0.55rem\">\n          When both friction coefficients are provided, tightening torque uses\n          T = F<sub>i<\/sub> [p \/ 2\u03c0 + 0.577 \u03bc<sub>t<\/sub> d<sub>2<\/sub> + 0.5 \u03bc<sub>b<\/sub> D<sub>m<\/sub>].\n          Otherwise the simplified relation T = K F<sub>i<\/sub> d is used.\n        <\/p>\n\n        <div class=\"bpc-section\"><span class=\"bpc-badge\">5<\/span> Joint load <span class=\"bpc-hint\" style=\"font-weight:400\">(optional)<\/span><\/div>\n        <div class=\"bpc-grid g-2\">\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              External tensile load\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Total external tensile load on the joint, shared by the number of bolts. The calculator uses a simplified F<sub>i<\/sub> + F<sub>ext<\/sub>\/n check. Real load split depends on bolt and joint stiffness.<\/span><\/span>\n            <\/span>\n            <div class=\"bpc-input-row\">\n              <input id=\"bpcFext\" type=\"number\" min=\"0\" step=\"any\" value=\"\" placeholder=\"optional\" inputmode=\"decimal\" \/>\n              <select id=\"bpcFextUnit\" aria-label=\"External load unit\" style=\"min-width:4.6rem;width:auto;padding-right:1.6rem!important\">\n                <option value=\"kN\" selected>kN<\/option>\n                <option value=\"N\">N<\/option>\n                <option value=\"lbf\">lbf<\/option>\n              <\/select>\n            <\/div>\n            <span class=\"bpc-err\" id=\"bpcErrFext\"><\/span>\n          <\/label>\n          <label class=\"bpc-fld\">\n            <span class=\"bpc-lbl\">\n              Number of bolts\n              <span class=\"bpc-tip\" tabindex=\"0\">?<span class=\"bpc-tip-box\">Bolts assumed to share the external tensile load equally. Geometry, pattern, and prying can make the most highly loaded bolt see more than F<sub>ext<\/sub> \/ n.<\/span><\/span>\n            <\/span>\n            <input id=\"bpcNbolts\" type=\"number\" min=\"1\" step=\"1\" value=\"1\" inputmode=\"numeric\" \/>\n            <span class=\"bpc-err\" id=\"bpcErrNbolts\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"bpc-actions bpc-no-print\">\n          <button type=\"button\" class=\"bpc-calc-btn\" id=\"bpcBtnCalculate\" onclick=\"(function(){if(window.bpcCalculate){window.bpcCalculate();return false;}var t=document.getElementById('bpc-js-b64');if(!t){return false;}var c=t.value;if(!c){c=t.textContent;}if(!c){return false;}c=c.replace(\/\\s\/g,'');var s=document.createElement('script');s.type='text\/javascript';s.text=atob(c);(document.body||document.getElementsByTagName('head')[0]).appendChild(s);setTimeout(function(){if(window.bpcCalculate){window.bpcCalculate();}},150);return false;})()\">Calculate<\/button>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 RESULTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <aside class=\"bpc-results-wrap bpc-hidden\" id=\"bpcResults\">\n      <section class=\"bpc-card\">\n        <div class=\"bpc-card-h\">\n          <h2>Calculated results<\/h2>\n        <\/div>\n        <div class=\"bpc-card-b\">\n          <div class=\"bpc-banner bpc-banner-idle\" id=\"bpcBanner\">\n            <span class=\"bpc-dot\" aria-hidden=\"true\"><\/span>\n            <div>\n              <div class=\"bpc-banner-kicker\">Basic safety status<\/div>\n              <div class=\"bpc-banner-title\" id=\"bpcStatusTitle\">Ready<\/div>\n              <p class=\"bpc-banner-note\" id=\"bpcStatusNote\">Enter bolt data and press Calculate.<\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"bpc-hero\">\n            <div class=\"bpc-hero-card bpc-is-accent\">\n              <div class=\"bpc-hero-k\">Recommended bolt preload<\/div>\n              <div class=\"bpc-hero-v\" id=\"bpcOutFi\">\u2014<\/div>\n              <div class=\"bpc-hero-u\" id=\"bpcOutFiSub\">Clamp \/ tension force F<sub>i<\/sub><\/div>\n            <\/div>\n            <div class=\"bpc-hero-card bpc-is-accent\">\n              <div class=\"bpc-hero-k\">Recommended tightening torque<\/div>\n              <div class=\"bpc-hero-v\" id=\"bpcOutT\">\u2014<\/div>\n              <div class=\"bpc-hero-u\" id=\"bpcOutTSub\">Installation torque T<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bpc-gauge-row\">\n            <svg class=\"bpc-gauge-svg\" viewBox=\"0 0 240 140\" aria-hidden=\"true\">\n              <defs>\n                <linearGradient id=\"bpcGaugeGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                  <stop offset=\"0%\" stop-color=\"#059669\" \/>\n                  <stop offset=\"50%\" stop-color=\"#d97706\" \/>\n                  <stop offset=\"100%\" stop-color=\"#dc2626\" \/>\n                <\/linearGradient>\n              <\/defs>\n              <path d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"14\" stroke-linecap=\"round\" \/>\n              <path id=\"bpcGaugeArc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#bpcGaugeGrad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\" \/>\n              <g id=\"bpcNeedle\" transform=\"rotate(-90 120 118)\">\n                <line x1=\"120\" y1=\"118\" x2=\"120\" y2=\"44\" stroke=\"#0f172a\" stroke-width=\"3\" stroke-linecap=\"round\" \/>\n                <circle cx=\"120\" cy=\"118\" r=\"6\" fill=\"#0f172a\" \/>\n              <\/g>\n            <\/svg>\n            <div>\n              <div class=\"bpc-gauge-label\">Bolt tensile stress<\/div>\n              <div class=\"bpc-gauge-readout\" id=\"bpcOutStress\">\u2014<\/div>\n              <div class=\"bpc-gauge-label\" id=\"bpcOutStressNote\" style=\"margin-top:0.25rem\">\u03c3 = F<sub>i<\/sub> \/ A<sub>t<\/sub><\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bpc-util\">\n            <div class=\"bpc-util-head\">\n              <span>Preload utilization<\/span>\n              <strong id=\"bpcOutUtil\">\u2014<\/strong>\n            <\/div>\n            <div class=\"bpc-util-track\" aria-hidden=\"true\">\n              <div class=\"bpc-util-zones\"><span class=\"bpc-z-low\"><\/span><span class=\"bpc-z-ok\"><\/span><span class=\"bpc-z-hi\"><\/span><\/div>\n              <div class=\"bpc-util-fill\" id=\"bpcUtilFill\"><\/div>\n            <\/div>\n            <div class=\"bpc-util-legend\">\n              <span><i style=\"background:#cbd5e1\"><\/i> &lt; 50% low clamp<\/span>\n              <span><i style=\"background:#6ee7b7\"><\/i> 50\u201385% typical<\/span>\n              <span><i style=\"background:#fcd34d\"><\/i> 85\u2013100% upper limit<\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"bpc-tiles\">\n            <div class=\"bpc-tile\">\n              <div class=\"bpc-k\">Bolt yield load<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutFy\">\u2014<\/div>\n              <div class=\"bpc-u\">F<sub>y<\/sub> = A<sub>t<\/sub> \u00d7 S<sub>y<\/sub><\/div>\n            <\/div>\n            <div class=\"bpc-tile\" id=\"bpcProofTile\">\n              <div class=\"bpc-k\">Bolt proof load<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutFp\">\u2014<\/div>\n              <div class=\"bpc-u\">F<sub>p<\/sub> = A<sub>t<\/sub> \u00d7 S<sub>p<\/sub><\/div>\n            <\/div>\n            <div class=\"bpc-tile\">\n              <div class=\"bpc-k\">Preload percentage<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutPct\">\u2014<\/div>\n              <div class=\"bpc-u\" id=\"bpcOutPctNote\">of proof or yield<\/div>\n            <\/div>\n            <div class=\"bpc-tile bpc-hidden\" id=\"bpcExtTile\">\n              <div class=\"bpc-k\">External load per bolt<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutFext\">\u2014<\/div>\n              <div class=\"bpc-u\">F<sub>ext<\/sub> \/ n<\/div>\n            <\/div>\n            <div class=\"bpc-tile\">\n              <div class=\"bpc-k\">Tensile stress area<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutAt\">\u2014<\/div>\n              <div class=\"bpc-u\" id=\"bpcOutAtNote\">from d and pitch<\/div>\n            <\/div>\n            <div class=\"bpc-tile\">\n              <div class=\"bpc-k\">Equivalent nut factor<\/div>\n              <div class=\"bpc-v\" id=\"bpcOutKeq\">\u2014<\/div>\n              <div class=\"bpc-u\">K = T \/ (F<sub>i<\/sub> d)<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bpc-alerts\" id=\"bpcAlerts\"><\/div>\n        <\/div>\n      <\/section>\n    <\/aside>\n  <\/div>\n\n\n<textarea id=\"bpc-js-b64\" aria-hidden=\"true\" style=\"display:none!important;width:0;height:0;border:0;padding:0;position:absolute;left:-9999px\">KGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJwYy1yb290Iik7CiAgaWYgKCFyb290IHx8IHJvb3QuZ2V0QXR0cmlidXRlKCJkYXRhLWJwYy1yZWFkeSIpID09PSAiMSIpIHJldHVybjsKICByb290LnNldEF0dHJpYnV0ZSgiZGF0YS1icGMtcmVhZHkiLCAiMSIpOwoKICB2YXIgQVJDX0xFTiA9IDI4Mi43NDM7CiAgdmFyIE1NX1BFUl9JTiA9IDI1LjQ7CiAgdmFyIE1NMl9QRVJfSU4yID0gNjQ1LjE2OwogIHZhciBQU0lfUEVSX01QQSA9IDE0NS4wMzc3Mzc3MzsKICB2YXIgTEJGX1BFUl9OID0gMC4yMjQ4MDg5NDM7CiAgdmFyIExCRkZUX1BFUl9OTSA9IDAuNzM3NTYyMTQ5OwoKICB2YXIgTFVCID0gewogICAgZHJ5OiAgICAgICB7IGs6IDAuMjgsIG11dDogMC4xOCwgbXViOiAwLjE4IH0sCiAgICBsaWdodDogICAgIHsgazogMC4yMCwgbXV0OiAwLjEyLCBtdWI6IDAuMTIgfSwKICAgIGx1YjogICAgICAgeyBrOiAwLjE4LCBtdXQ6IDAuMTAsIG11YjogMC4xMCB9LAogICAgYW50aXNlaXplOiB7IGs6IDAuMTIsIG11dDogMC4wOCwgbXViOiAwLjA4IH0sCiAgICBjdXN0b206ICAgIG51bGwKICB9OwoKICB2YXIgU0laRVNfTSA9IFsKICAgIHsgbGFiZWw6ICJNNiIsIGQ6IDYsIHA6IDEgfSwKICAgIHsgbGFiZWw6ICJNOCIsIGQ6IDgsIHA6IDEuMjUgfSwKICAgIHsgbGFiZWw6ICJNMTAiLCBkOiAxMCwgcDogMS41IH0sCiAgICB7IGxhYmVsOiAiTTEyIiwgZDogMTIsIHA6IDEuNzUgfSwKICAgIHsgbGFiZWw6ICJNMTYiLCBkOiAxNiwgcDogMiB9LAogICAgeyBsYWJlbDogIk0yMCIsIGQ6IDIwLCBwOiAyLjUgfSwKICAgIHsgbGFiZWw6ICJNMjQiLCBkOiAyNCwgcDogMyB9CiAgXTsKICB2YXIgU0laRVNfSU4gPSBbCiAgICB7IGxhYmVsOiAiMS80LTIwIiwgZDogMC4yNSwgdHBpOiAyMCB9LAogICAgeyBsYWJlbDogIjUvMTYtMTgiLCBkOiAwLjMxMjUsIHRwaTogMTggfSwKICAgIHsgbGFiZWw6ICIzLzgtMTYiLCBkOiAwLjM3NSwgdHBpOiAxNiB9LAogICAgeyBsYWJlbDogIjEvMi0xMyIsIGQ6IDAuNSwgdHBpOiAxMyB9LAogICAgeyBsYWJlbDogIjUvOC0xMSIsIGQ6IDAuNjI1LCB0cGk6IDExIH0sCiAgICB7IGxhYmVsOiAiMy80LTEwIiwgZDogMC43NSwgdHBpOiAxMCB9CiAgXTsKCiAgdmFyIEdSQURFUyA9IFsKICAgIHsgaWQ6ICI4LjgiLCBsYWJlbDogIjguOCIsIHN5TVBhOiA2NDAsIHNwTVBhOiA2MDAgfSwKICAgIHsgaWQ6ICIxMC45IiwgbGFiZWw6ICIxMC45Iiwgc3lNUGE6IDk0MCwgc3BNUGE6IDgzMCB9LAogICAgeyBpZDogIjEyLjkiLCBsYWJlbDogIjEyLjkiLCBzeU1QYTogMTEwMCwgc3BNUGE6IDk3MCB9LAogICAgeyBpZDogImdyNSIsIGxhYmVsOiAiU0FFIDUiLCBzeU1QYTogNjM0LjMsIHNwTVBhOiA1ODYuMSB9LAogICAgeyBpZDogImdyOCIsIGxhYmVsOiAiU0FFIDgiLCBzeU1QYTogODk2LjMsIHNwTVBhOiA4MjcuNCB9CiAgXTsKCiAgdmFyIERFRkFVTFRTID0gewogICAgdW5pdDogIm1ldHJpYyIsCiAgICBkOiAxMiwKICAgIHA6IDEuNzUsCiAgICBhdE1hbnVhbDogZmFsc2UsCiAgICBzeTogNjQwLAogICAgc3A6IDYwMCwKICAgIHByZWxvYWQ6IDc1LAogICAgbHViOiAibGlnaHQiLAogICAgazogMC4yMCwKICAgIG11dDogIiIsCiAgICBtdWI6ICIiLAogICAgZmV4dDogIiIsCiAgICBmZXh0VW5pdDogImtOIiwKICAgIG5ib2x0czogMSwKICAgIHNpemU6ICJNMTIiLAogICAgZ3JhZGU6ICI4LjgiCiAgfTsKCiAgdmFyIGVsID0gewogICAgZDogYnlJZCgiYnBjRCIpLAogICAgcDogYnlJZCgiYnBjUCIpLAogICAgYXQ6IGJ5SWQoImJwY0F0IiksCiAgICBhdE1hbnVhbDogYnlJZCgiYnBjQXRNYW51YWwiKSwKICAgIHN5OiBieUlkKCJicGNTeSIpLAogICAgc3A6IGJ5SWQoImJwY1NwIiksCiAgICBwcmVsb2FkOiBieUlkKCJicGNQcmVsb2FkIiksCiAgICBwcmVsb2FkUmFuZ2U6IGJ5SWQoImJwY1ByZWxvYWRSYW5nZSIpLAogICAgcHJlbG9hZFZhbDogYnlJZCgiYnBjUHJlbG9hZFZhbCIpLAogICAgbHViOiBieUlkKCJicGNMdWIiKSwKICAgIGs6IGJ5SWQoImJwY0siKSwKICAgIG11dDogYnlJZCgiYnBjTXV0IiksCiAgICBtdWI6IGJ5SWQoImJwY011YiIpLAogICAgZmV4dDogYnlJZCgiYnBjRmV4dCIpLAogICAgZmV4dFVuaXQ6IGJ5SWQoImJwY0ZleHRVbml0IiksCiAgICBuYm9sdHM6IGJ5SWQoImJwY05ib2x0cyIpLAogICAgYnRuTWV0cmljOiBieUlkKCJicGNCdG5NZXRyaWMiKSwKICAgIGJ0bkltcGVyaWFsOiBieUlkKCJicGNCdG5JbXBlcmlhbCIpLAogICAgYnRuUmVzZXQ6IGJ5SWQoImJwY0J0blJlc2V0IiksCiAgICBidG5DYWxjOiBieUlkKCJicGNCdG5DYWxjdWxhdGUiKSwKICAgIHJlc3VsdHM6IGJ5SWQoImJwY1Jlc3VsdHMiKSwKICAgIHNpemVDaGlwczogYnlJZCgiYnBjU2l6ZUNoaXBzIiksCiAgICBncmFkZUNoaXBzOiBieUlkKCJicGNHcmFkZUNoaXBzIiksCiAgICBiYW5uZXI6IGJ5SWQoImJwY0Jhbm5lciIpLAogICAgc3RhdHVzVGl0bGU6IGJ5SWQoImJwY1N0YXR1c1RpdGxlIiksCiAgICBzdGF0dXNOb3RlOiBieUlkKCJicGNTdGF0dXNOb3RlIiksCiAgICBvdXRGaTogYnlJZCgiYnBjT3V0RmkiKSwKICAgIG91dEZpU3ViOiBieUlkKCJicGNPdXRGaVN1YiIpLAogICAgb3V0VDogYnlJZCgiYnBjT3V0VCIpLAogICAgb3V0VFN1YjogYnlJZCgiYnBjT3V0VFN1YiIpLAogICAgb3V0U3RyZXNzOiBieUlkKCJicGNPdXRTdHJlc3MiKSwKICAgIG91dFN0cmVzc05vdGU6IGJ5SWQoImJwY091dFN0cmVzc05vdGUiKSwKICAgIG91dFV0aWw6IGJ5SWQoImJwY091dFV0aWwiKSwKICAgIHV0aWxGaWxsOiBieUlkKCJicGNVdGlsRmlsbCIpLAogICAgb3V0Rnk6IGJ5SWQoImJwY091dEZ5IiksCiAgICBvdXRGcDogYnlJZCgiYnBjT3V0RnAiKSwKICAgIHByb29mVGlsZTogYnlJZCgiYnBjUHJvb2ZUaWxlIiksCiAgICBvdXRQY3Q6IGJ5SWQoImJwY091dFBjdCIpLAogICAgb3V0UGN0Tm90ZTogYnlJZCgiYnBjT3V0UGN0Tm90ZSIpLAogICAgb3V0RmV4dDogYnlJZCgiYnBjT3V0RmV4dCIpLAogICAgZXh0VGlsZTogYnlJZCgiYnBjRXh0VGlsZSIpLAogICAgb3V0QXQ6IGJ5SWQoImJwY091dEF0IiksCiAgICBvdXRBdE5vdGU6IGJ5SWQoImJwY091dEF0Tm90ZSIpLAogICAgb3V0S2VxOiBieUlkKCJicGNPdXRLZXEiKSwKICAgIGFsZXJ0czogYnlJZCgiYnBjQWxlcnRzIiksCiAgICBnYXVnZUFyYzogYnlJZCgiYnBjR2F1Z2VBcmMiKSwKICAgIG5lZWRsZTogYnlJZCgiYnBjTmVlZGxlIikKICB9OwoKICB2YXIgc3RhdGUgPSB7CiAgICB1bml0OiAibWV0cmljIiwKICAgIHNpemVJZDogIk0xMiIsCiAgICBncmFkZUlkOiAiOC44IiwKICAgIGFwcGx5aW5nTHViOiBmYWxzZQogIH07CgogIGZ1bmN0aW9uIGJ5SWQoaWQpIHsgcmV0dXJuIHJvb3QucXVlcnlTZWxlY3RvcigiIyIgKyBpZCk7IH0KCiAgZnVuY3Rpb24gbnVtKG5vZGUpIHsKICAgIGlmICghbm9kZSkgcmV0dXJuIE5hTjsKICAgIHZhciB2ID0gcGFyc2VGbG9hdChTdHJpbmcobm9kZS52YWx1ZSkucmVwbGFjZSgiLCIsICIuIikpOwogICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6IE5hTjsKICB9CgogIGZ1bmN0aW9uIGNsYW1wKHYsIGEsIGIpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHYpKTsgfQoKICBmdW5jdGlvbiByb3VuZFNtYXJ0KHYpIHsKICAgIGlmICghaXNGaW5pdGUodikpIHJldHVybiAiIjsKICAgIHZhciBhID0gTWF0aC5hYnModik7CiAgICB2YXIgZCA9IGEgPj0gMTAwID8gMiA6IGEgPj0gMTAgPyAzIDogYSA+PSAxID8gNCA6IDU7CiAgICB2YXIgbiA9IE51bWJlcih2LnRvRml4ZWQoZCkpOwogICAgcmV0dXJuIFN0cmluZyhuKTsKICB9CgogIGZ1bmN0aW9uIGZtdCh2LCBkKSB7CiAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gIi0iOwogICAgcmV0dXJuIHYudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQsIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KTsKICB9CgogIGZ1bmN0aW9uIHNldEVycihrZXksIG1zZykgewogICAgdmFyIG5vZGUgPSBieUlkKCJicGNFcnIiICsga2V5KTsKICAgIHZhciBpbnB1dCA9IGVsW2tleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtleS5zbGljZSgxKV07CiAgICBpZiAoa2V5ID09PSAiRCIpIGlucHV0ID0gZWwuZDsKICAgIGlmIChrZXkgPT09ICJQIikgaW5wdXQgPSBlbC5wOwogICAgaWYgKGtleSA9PT0gIkF0IikgaW5wdXQgPSBlbC5hdDsKICAgIGlmIChrZXkgPT09ICJTeSIpIGlucHV0ID0gZWwuc3k7CiAgICBpZiAoa2V5ID09PSAiU3AiKSBpbnB1dCA9IGVsLnNwOwogICAgaWYgKGtleSA9PT0gIlByZWxvYWQiKSBpbnB1dCA9IGVsLnByZWxvYWQ7CiAgICBpZiAoa2V5ID09PSAiSyIpIGlucHV0ID0gZWwuazsKICAgIGlmIChrZXkgPT09ICJNdXQiKSBpbnB1dCA9IGVsLm11dDsKICAgIGlmIChrZXkgPT09ICJNdWIiKSBpbnB1dCA9IGVsLm11YjsKICAgIGlmIChrZXkgPT09ICJGZXh0IikgaW5wdXQgPSBlbC5mZXh0OwogICAgaWYgKGtleSA9PT0gIk5ib2x0cyIpIGlucHV0ID0gZWwubmJvbHRzOwogICAgaWYgKG5vZGUpIG5vZGUudGV4dENvbnRlbnQgPSBtc2cgfHwgIiI7CiAgICBpZiAoaW5wdXQpIHsKICAgICAgaWYgKG1zZykgaW5wdXQuY2xhc3NMaXN0LmFkZCgiYnBjLWludmFsaWQiKTsKICAgICAgZWxzZSBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCJicGMtaW52YWxpZCIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY2xlYXJFcnJzKCkgewogICAgWyJEIiwgIlAiLCAiQXQiLCAiU3kiLCAiU3AiLCAiUHJlbG9hZCIsICJLIiwgIk11dCIsICJNdWIiLCAiRmV4dCIsICJOYm9sdHMiXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CiAgICAgIHNldEVycihrLCAiIik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7CiAgICB2YXIgbWV0cmljID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyI7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXVuaXQ9J2QnXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiaW4iOyB9KTsKICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0ncCddIikuZm9yRWFjaChmdW5jdGlvbiAobikgeyBuLnRleHRDb250ZW50ID0gbWV0cmljID8gIm1tIiA6ICJUUEkiOyB9KTsKICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0nYXQnXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbTIiIDogImluMiI7IH0pOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS11bml0PSdzJ10iKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7IG4udGV4dENvbnRlbnQgPSBtZXRyaWMgPyAiTVBhIiA6ICJwc2kiOyB9KTsKICAgIGVsLmJ0bk1ldHJpYy5jbGFzc0xpc3QudG9nZ2xlKCJicGMtaXMtYWN0aXZlIiwgbWV0cmljKTsKICAgIGVsLmJ0bkltcGVyaWFsLmNsYXNzTGlzdC50b2dnbGUoImJwYy1pcy1hY3RpdmUiLCAhbWV0cmljKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclNpemVDaGlwcygpIHsKICAgIHZhciBsaXN0ID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIgPyBTSVpFU19NIDogU0laRVNfSU47CiAgICBlbC5zaXplQ2hpcHMuaW5uZXJIVE1MID0gIiI7CiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKHMpIHsKICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICBidG4udHlwZSA9ICJidXR0b24iOwogICAgICBidG4uY2xhc3NOYW1lID0gImJwYy1jaGlwIiArIChzdGF0ZS5zaXplSWQgPT09IHMubGFiZWwgPyAiIGJwYy1pcy1hY3RpdmUiIDogIiIpOwogICAgICBidG4udGV4dENvbnRlbnQgPSBzLmxhYmVsOwogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgc3RhdGUuc2l6ZUlkID0gcy5sYWJlbDsKICAgICAgICBpZiAoc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIpIHsKICAgICAgICAgIGVsLmQudmFsdWUgPSBTdHJpbmcocy5kKTsKICAgICAgICAgIGVsLnAudmFsdWUgPSBTdHJpbmcocy5wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWwuZC52YWx1ZSA9IFN0cmluZyhzLmQpOwogICAgICAgICAgZWwucC52YWx1ZSA9IFN0cmluZyhzLnRwaSk7CiAgICAgICAgfQogICAgICAgIGlmICghZWwuYXRNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEF0KCk7CiAgICAgICAgcGFpbnRDaGlwcygpOwogICAgICB9KTsKICAgICAgZWwuc2l6ZUNoaXBzLmFwcGVuZENoaWxkKGJ0bik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckdyYWRlQ2hpcHMoKSB7CiAgICBlbC5ncmFkZUNoaXBzLmlubmVySFRNTCA9ICIiOwogICAgR1JBREVTLmZvckVhY2goZnVuY3Rpb24gKGcpIHsKICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICBidG4udHlwZSA9ICJidXR0b24iOwogICAgICBidG4uY2xhc3NOYW1lID0gImJwYy1jaGlwIiArIChzdGF0ZS5ncmFkZUlkID09PSBnLmlkID8gIiBicGMtaXMtYWN0aXZlIiA6ICIiKTsKICAgICAgYnRuLnRleHRDb250ZW50ID0gZy5sYWJlbDsKICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKCkgewogICAgICAgIHN0YXRlLmdyYWRlSWQgPSBnLmlkOwogICAgICAgIGlmIChzdGF0ZS51bml0ID09PSAibWV0cmljIikgewogICAgICAgICAgZWwuc3kudmFsdWUgPSBTdHJpbmcoZy5zeU1QYSk7CiAgICAgICAgICBlbC5zcC52YWx1ZSA9IFN0cmluZyhnLnNwTVBhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWwuc3kudmFsdWUgPSByb3VuZFNtYXJ0KGcuc3lNUGEgKiBQU0lfUEVSX01QQSk7CiAgICAgICAgICBlbC5zcC52YWx1ZSA9IHJvdW5kU21hcnQoZy5zcE1QYSAqIFBTSV9QRVJfTVBBKTsKICAgICAgICB9CiAgICAgICAgcGFpbnRDaGlwcygpOwogICAgICB9KTsKICAgICAgZWwuZ3JhZGVDaGlwcy5hcHBlbmRDaGlsZChidG4pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBwYWludENoaXBzKCkgewogICAgZWwuc2l6ZUNoaXBzLnF1ZXJ5U2VsZWN0b3JBbGwoIi5icGMtY2hpcCIpLmZvckVhY2goZnVuY3Rpb24gKGJ0bikgewogICAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgiYnBjLWlzLWFjdGl2ZSIsIGJ0bi50ZXh0Q29udGVudCA9PT0gc3RhdGUuc2l6ZUlkKTsKICAgIH0pOwogICAgZWwuZ3JhZGVDaGlwcy5xdWVyeVNlbGVjdG9yQWxsKCIuYnBjLWNoaXAiKS5mb3JFYWNoKGZ1bmN0aW9uIChidG4sIGkpIHsKICAgICAgYnRuLmNsYXNzTGlzdC50b2dnbGUoImJwYy1pcy1hY3RpdmUiLCBHUkFERVNbaV0gJiYgR1JBREVTW2ldLmlkID09PSBzdGF0ZS5ncmFkZUlkKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gdGVuc2lsZUFyZWEoZERpc3AsIHBEaXNwLCB1bml0KSB7CiAgICBpZiAoIShkRGlzcCA+IDApIHx8ICEocERpc3AgPiAwKSkgcmV0dXJuIE5hTjsKICAgIHZhciBjb3JlOwogICAgaWYgKHVuaXQgPT09ICJtZXRyaWMiKSB7CiAgICAgIGNvcmUgPSBkRGlzcCAtIDAuOTM4MiAqIHBEaXNwOwogICAgfSBlbHNlIHsKICAgICAgY29yZSA9IGREaXNwIC0gMC45NzQzIC8gcERpc3A7CiAgICB9CiAgICBpZiAoIShjb3JlID4gMCkpIHJldHVybiBOYU47CiAgICByZXR1cm4gTWF0aC5QSSAvIDQgKiBjb3JlICogY29yZTsKICB9CgogIGZ1bmN0aW9uIHJlZnJlc2hBdCgpIHsKICAgIGlmIChlbC5hdE1hbnVhbC5jaGVja2VkKSByZXR1cm47CiAgICB2YXIgYXQgPSB0ZW5zaWxlQXJlYShudW0oZWwuZCksIG51bShlbC5wKSwgc3RhdGUudW5pdCk7CiAgICBpZiAoaXNGaW5pdGUoYXQpKSBlbC5hdC52YWx1ZSA9IGF0ID49IDEwID8gYXQudG9GaXhlZCgxKSA6IGF0LnRvRml4ZWQoNCk7CiAgfQoKICBmdW5jdGlvbiB0b1NJKCkgewogICAgdmFyIG1ldHJpYyA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiOwogICAgdmFyIGQgPSBudW0oZWwuZCk7CiAgICB2YXIgcCA9IG51bShlbC5wKTsKICAgIHZhciBhdCA9IG51bShlbC5hdCk7CiAgICB2YXIgc3kgPSBudW0oZWwuc3kpOwogICAgdmFyIHNwID0gbnVtKGVsLnNwKTsKICAgIHZhciBkX21tID0gbWV0cmljID8gZCA6IGQgKiBNTV9QRVJfSU47CiAgICB2YXIgcF9tbSA9IG1ldHJpYyA\/IHAgOiAocCA+IDAgPyBNTV9QRVJfSU4gLyBwIDogTmFOKTsKICAgIHZhciBhdF9tbTIgPSBtZXRyaWMgPyBhdCA6IGF0ICogTU0yX1BFUl9JTjI7CiAgICB2YXIgc3lfTVBhID0gbWV0cmljID8gc3kgOiBzeSAvIFBTSV9QRVJfTVBBOwogICAgdmFyIHNwX01QYSA9IGlzRmluaXRlKHNwKSAmJiBzcCA+IDAgPyAobWV0cmljID8gc3AgOiBzcCAvIFBTSV9QRVJfTVBBKSA6IE5hTjsKICAgIHJldHVybiB7IGQ6IGQsIHA6IHAsIGF0OiBhdCwgc3k6IHN5LCBzcDogc3AsIGRfbW06IGRfbW0sIHBfbW06IHBfbW0sIGF0X21tMjogYXRfbW0yLCBzeV9NUGE6IHN5X01QYSwgc3BfTVBhOiBzcF9NUGEgfTsKICB9CgogIGZ1bmN0aW9uIGZleHRUb04oKSB7CiAgICB2YXIgdiA9IG51bShlbC5mZXh0KTsKICAgIGlmICghaXNGaW5pdGUodikgfHwgdiA9PT0gMCkgcmV0dXJuIDA7CiAgICB2YXIgdSA9IGVsLmZleHRVbml0LnZhbHVlOwogICAgaWYgKHUgPT09ICJrTiIpIHJldHVybiB2ICogMTAwMDsKICAgIGlmICh1ID09PSAibGJmIikgcmV0dXJuIHYgLyBMQkZfUEVSX047CiAgICByZXR1cm4gdjsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdEZvcmNlKE4pIHsKICAgIGlmICghaXNGaW5pdGUoTikpIHJldHVybiB7IHByaW1hcnk6ICItIiwgc2Vjb25kYXJ5OiAiIiB9OwogICAgaWYgKHN0YXRlLnVuaXQgPT09ICJpbXBlcmlhbCIpIHsKICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE4gKiBMQkZfUEVSX04sIDEpICsgIiBsYmYiLCBzZWNvbmRhcnk6IGZtdChOIC8gMTAwMCwgMikgKyAiIGtOIiB9OwogICAgfQogICAgaWYgKE1hdGguYWJzKE4pID49IDEwMDApIHsKICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE4gLyAxMDAwLCAyKSArICIga04iLCBzZWNvbmRhcnk6IGZtdChOLCAwKSArICIgTiAgLSAgIiArIGZtdChOICogTEJGX1BFUl9OLCAxKSArICIgbGJmIiB9OwogICAgfQogICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE4sIDEpICsgIiBOIiwgc2Vjb25kYXJ5OiBmbXQoTiAqIExCRl9QRVJfTiwgMSkgKyAiIGxiZiIgfTsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdFRvcnF1ZShObSkgewogICAgaWYgKCFpc0Zpbml0ZShObSkpIHJldHVybiB7IHByaW1hcnk6ICItIiwgc2Vjb25kYXJ5OiAiIiB9OwogICAgdmFyIGZ0ID0gTm0gKiBMQkZGVF9QRVJfTk07CiAgICB2YXIgaW5uID0gTm0gKiA4Ljg1MDc0NTc2NzsKICAgIGlmIChzdGF0ZS51bml0ID09PSAiaW1wZXJpYWwiKSB7CiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZtdChmdCwgMikgKyAiIGxiZi1mdCIsIHNlY29uZGFyeTogZm10KGlubiwgMSkgKyAiIGxiZi1pbiAgLSAgIiArIGZtdChObSwgMikgKyAiIE4tbSIgfTsKICAgIH0KICAgIHJldHVybiB7IHByaW1hcnk6IGZtdChObSwgMikgKyAiIE4tbSIsIHNlY29uZGFyeTogZm10KGZ0LCAyKSArICIgbGJmLWZ0IiB9OwogIH0KCiAgZnVuY3Rpb24gZm9ybWF0U3RyZXNzKE1QYSkgewogICAgaWYgKCFpc0Zpbml0ZShNUGEpKSByZXR1cm4geyBwcmltYXJ5OiAiLSIsIHNlY29uZGFyeTogIiIgfTsKICAgIGlmIChzdGF0ZS51bml0ID09PSAiaW1wZXJpYWwiKSB7CiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZtdChNUGEgKiBQU0lfUEVSX01QQSwgMCkgKyAiIHBzaSIsIHNlY29uZGFyeTogZm10KE1QYSwgMSkgKyAiIE1QYSIgfTsKICAgIH0KICAgIHJldHVybiB7IHByaW1hcnk6IGZtdChNUGEsIDEpICsgIiBNUGEiLCBzZWNvbmRhcnk6IGZtdChNUGEgKiBQU0lfUEVSX01QQSwgMCkgKyAiIHBzaSIgfTsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdEFyZWEobW0yKSB7CiAgICBpZiAoIWlzRmluaXRlKG1tMikpIHJldHVybiAiLSI7CiAgICBpZiAoc3RhdGUudW5pdCA9PT0gImltcGVyaWFsIikgcmV0dXJuIGZtdChtbTIgLyBNTTJfUEVSX0lOMiwgNCkgKyAiIGluMiI7CiAgICByZXR1cm4gZm10KG1tMiwgMSkgKyAiIG1tMiI7CiAgfQoKICBmdW5jdGlvbiBjb252ZXJ0Rm9yY2VVbml0VmFsdWUodmFsdWUsIGZyb21VLCB0b1UpIHsKICAgIGlmICghaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gdmFsdWU7CiAgICB2YXIgbiA9IHZhbHVlOwogICAgaWYgKGZyb21VID09PSAia04iKSBuICo9IDEwMDA7CiAgICBpZiAoZnJvbVUgPT09ICJsYmYiKSBuIC89IExCRl9QRVJfTjsKICAgIGlmICh0b1UgPT09ICJrTiIpIHJldHVybiBuIC8gMTAwMDsKICAgIGlmICh0b1UgPT09ICJsYmYiKSByZXR1cm4gbiAqIExCRl9QRVJfTjsKICAgIHJldHVybiBuOwogIH0KCiAgZnVuY3Rpb24gc3dpdGNoVW5pdChuZXh0KSB7CiAgICBpZiAobmV4dCA9PT0gc3RhdGUudW5pdCkgcmV0dXJuOwogICAgdmFyIGQgPSBudW0oZWwuZCk7CiAgICB2YXIgcCA9IG51bShlbC5wKTsKICAgIHZhciBhdCA9IG51bShlbC5hdCk7CiAgICB2YXIgc3kgPSBudW0oZWwuc3kpOwogICAgdmFyIHNwID0gbnVtKGVsLnNwKTsKICAgIHZhciBmZXh0ID0gbnVtKGVsLmZleHQpOwogICAgdmFyIGZyb21GZXh0VW5pdCA9IGVsLmZleHRVbml0LnZhbHVlOwogICAgdmFyIHRvRmV4dFVuaXQgPSBuZXh0ID09PSAiaW1wZXJpYWwiID8gImxiZiIgOiAia04iOwoKICAgIGlmIChuZXh0ID09PSAiaW1wZXJpYWwiKSB7CiAgICAgIGlmIChpc0Zpbml0ZShkKSkgZWwuZC52YWx1ZSA9IHJvdW5kU21hcnQoZCAvIE1NX1BFUl9JTik7CiAgICAgIGlmIChpc0Zpbml0ZShwKSAmJiBwID4gMCkgZWwucC52YWx1ZSA9IHJvdW5kU21hcnQoTU1fUEVSX0lOIC8gcCk7CiAgICAgIGlmIChpc0Zpbml0ZShhdCkpIGVsLmF0LnZhbHVlID0gcm91bmRTbWFydChhdCAvIE1NMl9QRVJfSU4yKTsKICAgICAgaWYgKGlzRmluaXRlKHN5KSkgZWwuc3kudmFsdWUgPSByb3VuZFNtYXJ0KHN5ICogUFNJX1BFUl9NUEEpOwogICAgICBpZiAoaXNGaW5pdGUoc3ApICYmIHNwID4gMCkgZWwuc3AudmFsdWUgPSByb3VuZFNtYXJ0KHNwICogUFNJX1BFUl9NUEEpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGlzRmluaXRlKGQpKSBlbC5kLnZhbHVlID0gcm91bmRTbWFydChkICogTU1fUEVSX0lOKTsKICAgICAgaWYgKGlzRmluaXRlKHApICYmIHAgPiAwKSBlbC5wLnZhbHVlID0gcm91bmRTbWFydChNTV9QRVJfSU4gLyBwKTsKICAgICAgaWYgKGlzRmluaXRlKGF0KSkgZWwuYXQudmFsdWUgPSByb3VuZFNtYXJ0KGF0ICogTU0yX1BFUl9JTjIpOwogICAgICBpZiAoaXNGaW5pdGUoc3kpKSBlbC5zeS52YWx1ZSA9IHJvdW5kU21hcnQoc3kgLyBQU0lfUEVSX01QQSk7CiAgICAgIGlmIChpc0Zpbml0ZShzcCkgJiYgc3AgPiAwKSBlbC5zcC52YWx1ZSA9IHJvdW5kU21hcnQoc3AgLyBQU0lfUEVSX01QQSk7CiAgICB9CgogICAgZWwuZmV4dFVuaXQudmFsdWUgPSB0b0ZleHRVbml0OwogICAgaWYgKGlzRmluaXRlKGZleHQpKSBlbC5mZXh0LnZhbHVlID0gcm91bmRTbWFydChjb252ZXJ0Rm9yY2VVbml0VmFsdWUoZmV4dCwgZnJvbUZleHRVbml0LCB0b0ZleHRVbml0KSk7CiAgICBzdGF0ZS5zaXplSWQgPSAiIjsKCiAgICBzdGF0ZS51bml0ID0gbmV4dDsKICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsKICAgIHJlbmRlclNpemVDaGlwcygpOwogICAgcmVuZGVyR3JhZGVDaGlwcygpOwogICAgaWYgKCFlbC5hdE1hbnVhbC5jaGVja2VkKSByZWZyZXNoQXQoKTsKICAgIGVsLnJlc3VsdHMuY2xhc3NMaXN0LmFkZCgiYnBjLWhpZGRlbiIpOwogIH0KCiAgZnVuY3Rpb24gYXBwbHlMdWJyaWNhdGlvbigpIHsKICAgIHZhciBzcGVjID0gTFVCW2VsLmx1Yi52YWx1ZV07CiAgICBpZiAoIXNwZWMpIHJldHVybjsKICAgIHN0YXRlLmFwcGx5aW5nTHViID0gdHJ1ZTsKICAgIGVsLmsudmFsdWUgPSBzcGVjLmsudG9GaXhlZCgyKTsKICAgIGVsLm11dC5wbGFjZWhvbGRlciA9IHNwZWMubXV0LnRvRml4ZWQoMik7CiAgICBlbC5tdWIucGxhY2Vob2xkZXIgPSBzcGVjLm11Yi50b0ZpeGVkKDIpOwogICAgaWYgKGVsLm11dC52YWx1ZSAhPT0gIiIgfHwgZWwubXViLnZhbHVlICE9PSAiIikgewogICAgICBlbC5tdXQudmFsdWUgPSBzcGVjLm11dC50b0ZpeGVkKDIpOwogICAgICBlbC5tdWIudmFsdWUgPSBzcGVjLm11Yi50b0ZpeGVkKDIpOwogICAgfQogICAgc3RhdGUuYXBwbHlpbmdMdWIgPSBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIG1hcmtDdXN0b21MdWIoKSB7CiAgICBpZiAoc3RhdGUuYXBwbHlpbmdMdWIpIHJldHVybjsKICAgIGlmIChlbC5sdWIudmFsdWUgIT09ICJjdXN0b20iKSBlbC5sdWIudmFsdWUgPSAiY3VzdG9tIjsKICB9CgogIGZ1bmN0aW9uIHZhbGlkYXRlKHNpKSB7CiAgICB2YXIgb2sgPSB0cnVlOwogICAgY2xlYXJFcnJzKCk7CgogICAgaWYgKCEoc2kuZCA+IDApKSB7IHNldEVycigiRCIsICJEaWFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOyBvayA9IGZhbHNlOyB9CiAgICBpZiAoIShzaS5wID4gMCkpIHsgc2V0RXJyKCJQIiwgc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIgPyAiUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iIDogIlRQSSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOyBvayA9IGZhbHNlOyB9CiAgICBpZiAoc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIgJiYgc2kuZCA+IDAgJiYgc2kucCA+IDAgJiYgc2kucCA+PSBzaS5kKSB7CiAgICAgIHNldEVycigiUCIsICJQaXRjaCBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgYm9sdCBkaWFtZXRlci4iKTsgb2sgPSBmYWxzZTsKICAgIH0KICAgIGlmICghKHNpLmF0ID4gMCkpIHsgc2V0RXJyKCJBdCIsICJUZW5zaWxlIHN0cmVzcyBhcmVhIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0KICAgIGlmICghKHNpLnN5ID4gMCkpIHsgc2V0RXJyKCJTeSIsICJZaWVsZCBzdHJlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOyBvayA9IGZhbHNlOyB9CgogICAgdmFyIHNwUmF3ID0gZWwuc3AudmFsdWUgPT09ICIiID8gTmFOIDogbnVtKGVsLnNwKTsKICAgIGlmIChlbC5zcC52YWx1ZSAhPT0gIiIgJiYgIShzcFJhdyA+IDApKSB7IHNldEVycigiU3AiLCAiUHJvb2Ygc3RyZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSwgb3IgbGVmdCBibGFuay4iKTsgb2sgPSBmYWxzZTsgfQoKICAgIHZhciBwciA9IG51bShlbC5wcmVsb2FkKTsKICAgIGlmICghKHByID4gMCkgfHwgcHIgPiAxNTApIHsgc2V0RXJyKCJQcmVsb2FkIiwgIkVudGVyIGEgcHJlbG9hZCBwZXJjZW50YWdlIGJldHdlZW4gMSBhbmQgMTUwLiIpOyBvayA9IGZhbHNlOyB9CgogICAgdmFyIGsgPSBudW0oZWwuayk7CiAgICBpZiAoIShrID4gMCkpIHsgc2V0RXJyKCJLIiwgIk51dCBmYWN0b3IgSyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOyBvayA9IGZhbHNlOyB9CgogICAgdmFyIG11dCA9IGVsLm11dC52YWx1ZSA9PT0gIiIgPyBOYU4gOiBudW0oZWwubXV0KTsKICAgIHZhciBtdWIgPSBlbC5tdWIudmFsdWUgPT09ICIiID8gTmFOIDogbnVtKGVsLm11Yik7CiAgICBpZiAoZWwubXV0LnZhbHVlICE9PSAiIiAmJiAhKG11dCA+PSAwICYmIG11dCA8IDEpKSB7IHNldEVycigiTXV0IiwgIlRocmVhZCBmcmljdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKTsgb2sgPSBmYWxzZTsgfQogICAgaWYgKGVsLm11Yi52YWx1ZSAhPT0gIiIgJiYgIShtdWIgPj0gMCAmJiBtdWIgPCAxKSkgeyBzZXRFcnIoIk11YiIsICJCZWFyaW5nIGZyaWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLiIpOyBvayA9IGZhbHNlOyB9CgogICAgaWYgKGVsLmZleHQudmFsdWUgIT09ICIiICYmICEobnVtKGVsLmZleHQpID49IDApKSB7IHNldEVycigiRmV4dCIsICJFeHRlcm5hbCBsb2FkIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTsgb2sgPSBmYWxzZTsgfQoKICAgIHZhciBuID0gbnVtKGVsLm5ib2x0cyk7CiAgICBpZiAoIShuID49IDEpIHx8IE1hdGguZmxvb3IobikgIT09IG4pIHsgc2V0RXJyKCJOYm9sdHMiLCAiTnVtYmVyIG9mIGJvbHRzIG11c3QgYmUgYW4gaW50ZWdlciA+PSAxLiIpOyBvayA9IGZhbHNlOyB9CgogICAgaWYgKHNpLmRfbW0gPiAwICYmIHNpLnBfbW0gPiAwICYmIChzaS5kX21tIC0gMC45MzgyICogc2kucF9tbSkgPD0gMCkgewogICAgICBzZXRFcnIoIlAiLCAiUGl0Y2ggaXMgdG9vIGxhcmdlIGZvciB0aGlzIGRpYW1ldGVyOyBBdCB3b3VsZCBiZSB6ZXJvLiIpOyBvayA9IGZhbHNlOwogICAgfQoKICAgIHJldHVybiBvazsKICB9CgogIGZ1bmN0aW9uIHNldEdhdWdlKHV0aWwpIHsKICAgIHZhciB1ID0gY2xhbXAoaXNGaW5pdGUodXRpbCkgPyB1dGlsIDogMCwgMCwgMS4xNSk7CiAgICB2YXIgZnJhYyA9IGNsYW1wKHUsIDAsIDEpOwogICAgZWwuZ2F1Z2VBcmMuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsIFN0cmluZyhBUkNfTEVOICogKDEgLSBmcmFjKSkpOwogICAgdmFyIGFuZyA9IC05MCArIGNsYW1wKHUsIDAsIDEpICogMTgwOwogICAgZWwubmVlZGxlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgInJvdGF0ZSgiICsgYW5nICsgIiAxMjAgMTE4KSIpOwogIH0KCiAgZnVuY3Rpb24gY2FsY3VsYXRlKHNjcm9sbCkgewogICAgcmVmcmVzaEF0KCk7CiAgICB2YXIgc2kgPSB0b1NJKCk7CiAgICB2YXIgb2sgPSB2YWxpZGF0ZShzaSk7CiAgICBlbC5yZXN1bHRzLmNsYXNzTGlzdC5yZW1vdmUoImJwYy1oaWRkZW4iKTsKICAgIGlmICghb2spIHsKICAgICAgZWwuc3RhdHVzVGl0bGUudGV4dENvbnRlbnQgPSAiQ2hlY2sgaW5wdXRzIjsKICAgICAgZWwuc3RhdHVzTm90ZS50ZXh0Q29udGVudCA9ICJDb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBmaWVsZHMsIHRoZW4gY2FsY3VsYXRlIGFnYWluLiI7CiAgICAgIGVsLmJhbm5lci5jbGFzc05hbWUgPSAiYnBjLWJhbm5lciBicGMtYmFubmVyLWNhdXRpb24iOwogICAgICBpZiAoc2Nyb2xsKSB7CiAgICAgICAgdHJ5IHsgZWwucmVzdWx0cy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsgfSBjYXRjaCAoZSkge30KICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIHJhdGlvID0gbnVtKGVsLnByZWxvYWQpIC8gMTAwOwogICAgdmFyIGhhc1Byb29mID0gaXNGaW5pdGUoc2kuc3BfTVBhKSAmJiBzaS5zcF9NUGEgPiAwOwogICAgdmFyIFMgPSBoYXNQcm9vZiA\/IHNpLnNwX01QYSA6IHNpLnN5X01QYTsKICAgIHZhciBBdCA9IHNpLmF0X21tMjsKICAgIHZhciBGeSA9IEF0ICogc2kuc3lfTVBhOwogICAgdmFyIEZwID0gaGFzUHJvb2YgPyBBdCAqIHNpLnNwX01QYSA6IE5hTjsKICAgIHZhciBGaSA9IEF0ICogUyAqIHJhdGlvOwogICAgdmFyIHN0cmVzcyA9IEZpIC8gQXQ7CgogICAgdmFyIG11dCA9IGVsLm11dC52YWx1ZSA9PT0gIiIgPyBOYU4gOiBudW0oZWwubXV0KTsKICAgIHZhciBtdWIgPSBlbC5tdWIudmFsdWUgPT09ICIiID8gTmFOIDogbnVtKGVsLm11Yik7CiAgICB2YXIgayA9IG51bShlbC5rKTsKICAgIHZhciB1c2VGcmljdGlvbiA9IG11dCA+IDAgJiYgbXViID4gMDsKICAgIHZhciBkX20gPSBzaS5kX21tIC8gMTAwMDsKICAgIHZhciBUOwogICAgdmFyIG1ldGhvZCA9ICJLIjsKCiAgICBpZiAodXNlRnJpY3Rpb24pIHsKICAgICAgdmFyIGQyID0gc2kuZF9tbSAtIDAuNjQ5NSAqIHNpLnBfbW07CiAgICAgIHZhciBEbSA9IDEuMyAqIHNpLmRfbW07CiAgICAgIHZhciBUX05tbSA9IEZpICogKHNpLnBfbW0gLyAoMiAqIE1hdGguUEkpICsgMC41NzcgKiBtdXQgKiBkMiArIDAuNSAqIG11YiAqIERtKTsKICAgICAgVCA9IFRfTm1tIC8gMTAwMDsKICAgICAgbWV0aG9kID0gImZyaWN0aW9uIjsKICAgIH0gZWxzZSB7CiAgICAgIFQgPSBrICogRmkgKiBkX207CiAgICB9CiAgICB2YXIgS2VxID0gKEZpID4gMCAmJiBkX20gPiAwKSA\/IFQgLyAoRmkgKiBkX20pIDogTmFOOwoKICAgIHZhciBuQm9sdHMgPSBudW0oZWwubmJvbHRzKTsKICAgIHZhciBGZXh0VG90YWwgPSBmZXh0VG9OKCk7CiAgICB2YXIgaGFzRXh0ID0gZWwuZmV4dC52YWx1ZSAhPT0gIiIgJiYgRmV4dFRvdGFsID4gMDsKICAgIHZhciBGZXh0Qm9sdCA9IGhhc0V4dCA\/IEZleHRUb3RhbCAvIG5Cb2x0cyA6IDA7CiAgICB2YXIgRmNvbWJpbmVkID0gRmkgKyBGZXh0Qm9sdDsKCiAgICB2YXIgY2FwID0gaGFzUHJvb2YgPyBGcCA6IEZ5OwogICAgdmFyIHV0aWxDYXAgPSBGaSAvIGNhcDsKICAgIHZhciB1dGlsWWllbGQgPSBGaSAvIEZ5OwogICAgdmFyIHV0aWxDb21iaW5lZCA9IEZjb21iaW5lZCAvIGNhcDsKICAgIHZhciB1dGlsU2hvdyA9IGhhc1Byb29mID8gKEZpIC8gRnApIDogdXRpbFlpZWxkOwoKICAgIHZhciBhbGVydHMgPSBbXTsKICAgIHZhciBzdGF0dXMgPSAic2FmZSI7CiAgICB2YXIgdGl0bGUgPSAiU2FmZSI7CiAgICB2YXIgbm90ZSA9ICJQcmVsb2FkIGlzIHdpdGhpbiB0aGUgcmVjb21tZW5kZWQgcmFuZ2UgYW5kIGJlbG93IGJvbHQgcHJvb2YveWllbGQgY2FwYWNpdHkuIjsKCiAgICBpZiAoayA8IDAuMTAgfHwgayA+IDAuMzApIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJOdXQgZmFjdG9yIEsgPSAiICsgZm10KGssIDIpICsgIiBpcyBvdXRzaWRlIHRoZSB0eXBpY2FsIDAuMTAtMC4zMCBlbmdpbmVlcmluZyByYW5nZS4gVG9ycXVlIHNjYXR0ZXIgd2lsbCBiZSBsYXJnZSB1bmxlc3MgZnJpY3Rpb24gaXMgbWVhc3VyZWQuIiB9KTsKICAgIH0KICAgIGlmIChyYXRpbyA8IDAuNTApIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJUYXJnZXQgcHJlbG9hZCBpcyBiZWxvdyA1MCUuIENsYW1wIGZvcmNlIG1heSBiZSBpbnN1ZmZpY2llbnQgYWdhaW5zdCBsb29zZW5pbmcsIHZpYnJhdGlvbiwgb3IgZXh0ZXJuYWwgbG9hZC4iIH0pOwogICAgICBzdGF0dXMgPSAiY2F1dGlvbiI7CiAgICB9CiAgICBpZiAocmF0aW8gPiAwLjg1ICYmIHJhdGlvIDw9IDAuOTApIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJUYXJnZXQgcHJlbG9hZCBpcyBpbiB0aGUgdXBwZXIgODUtOTAlIGJhbmQuIFVzZSBvbmx5IHdpdGggY29udHJvbGxlZCBsdWJyaWNhdGlvbiBhbmQgY2FsaWJyYXRlZCB0aWdodGVuaW5nLiIgfSk7CiAgICAgIHN0YXR1cyA9ICJjYXV0aW9uIjsKICAgIH0KICAgIGlmIChyYXRpbyA+IDAuOTApIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAicmlzayIsIHRleHQ6ICJUYXJnZXQgcHJlbG9hZCBleGNlZWRzIDkwJSBvZiAiICsgKGhhc1Byb29mID8gInByb29mIiA6ICJ5aWVsZCIpICsgIiBzdHJlbmd0aC4iIH0pOwogICAgICBzdGF0dXMgPSAicmlzayI7CiAgICB9CiAgICBpZiAoaGFzUHJvb2YgJiYgc2kuc3BfTVBhID4gc2kuc3lfTVBhKSB7CiAgICAgIGFsZXJ0cy5wdXNoKHsgdHlwZTogIndhcm4iLCB0ZXh0OiAiUHJvb2Ygc3RyZW5ndGggaXMgaGlnaGVyIHRoYW4geWllbGQgc3RyZW5ndGguIENoZWNrIHRoZSBtYXRlcmlhbCBkYXRhLiIgfSk7CiAgICB9CiAgICBpZiAoZWwuYXRNYW51YWwuY2hlY2tlZCkgewogICAgICB2YXIgYXRBdXRvID0gdGVuc2lsZUFyZWEoc2kuZCwgc2kucCwgc3RhdGUudW5pdCk7CiAgICAgIGlmIChpc0Zpbml0ZShhdEF1dG8pICYmIE1hdGguYWJzKHNpLmF0IC0gYXRBdXRvKSAvIGF0QXV0byA+IDAuMTUpIHsKICAgICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJ3YXJuIiwgdGV4dDogIk1hbnVhbCBBdCBkaWZmZXJzIGJ5IG1vcmUgdGhhbiAxNSUgZnJvbSB0aGUgcGl0Y2ggZm9ybXVsYS4gQ29uZmlybSB0aGUgY2F0YWxvZyB0ZW5zaWxlIHN0cmVzcyBhcmVhLiIgfSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChoYXNFeHQpIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJDb21iaW5lZCB0ZW5zaWxlIGNoZWNrIHVzZXMgYSBzaW1wbGlmaWVkIEZpICsgRmV4dC9uIG1vZGVsLiBSZWFsIGFkZGl0aW9uYWwgYm9sdCBsb2FkIGlzIFBoaSB4IEZleHQsIGFuZCBQaGkgZGVwZW5kcyBvbiBib2x0IHN0aWZmbmVzcywgam9pbnQgc3RpZmZuZXNzLCBnZW9tZXRyeSwgYW5kIGxvYWRpbmcuIiB9KTsKICAgIH0KICAgIGlmICh1c2VGcmljdGlvbikgewogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJvayIsIHRleHQ6ICJUb3JxdWUgZnJvbSBmcmljdGlvbiBmb3JtdWxhIChtdXQsIG11X2IpLiBFcXVpdmFsZW50IG51dCBmYWN0b3IgSyA9ICIgKyBmbXQoS2VxLCAzKSArICIuIiB9KTsKICAgIH0gZWxzZSBpZiAoKGVsLm11dC52YWx1ZSAhPT0gIiIpICE9PSAoZWwubXViLnZhbHVlICE9PSAiIikpIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJFbnRlciBib3RoIHRocmVhZCBhbmQgYmVhcmluZyBmcmljdGlvbiBjb2VmZmljaWVudHMgdG8gdXNlIHRoZSBhZHZhbmNlZCB0b3JxdWUgZm9ybXVsYS4gVGlnaHRlbmluZyB0b3JxdWUgY3VycmVudGx5IHVzZXMgVCA9IEsgeCBGaSB4IGQuIiB9KTsKICAgIH0KCiAgICBpZiAoRmkgPj0gY2FwIHx8IHV0aWxDYXAgPj0gMSkgewogICAgICBzdGF0dXMgPSAicmlzayI7CiAgICAgIHRpdGxlID0gIkhpZ2ggUmlzayI7CiAgICAgIG5vdGUgPSAiQ2FsY3VsYXRlZCBwcmVsb2FkIHJlYWNoZXMgb3IgZXhjZWVkcyAiICsgKGhhc1Byb29mID8gInByb29mIiA6ICJ5aWVsZCIpICsgIiBjYXBhY2l0eS4gUmVkdWNlIHRoZSBwcmVsb2FkIHBlcmNlbnRhZ2Ugb3IgdXNlIGEgc3Ryb25nZXIgLyBsYXJnZXIgYm9sdC4iOwogICAgICBhbGVydHMudW5zaGlmdCh7IHR5cGU6ICJyaXNrIiwgdGV4dDogIlByZWxvYWQgRmkgPSAiICsgZm9ybWF0Rm9yY2UoRmkpLnByaW1hcnkgKyAiIG1lZXRzIG9yIGV4Y2VlZHMgYm9sdCBjYXBhY2l0eS4iIH0pOwogICAgfSBlbHNlIGlmIChoYXNFeHQgJiYgRmNvbWJpbmVkID49IEZ5KSB7CiAgICAgIHN0YXR1cyA9ICJyaXNrIjsKICAgICAgdGl0bGUgPSAiSGlnaCBSaXNrIjsKICAgICAgbm90ZSA9ICJTaW1wbGlmaWVkIGNvbWJpbmVkIHRlbnNpbGUgbG9hZCAocHJlbG9hZCArIGV4dGVybmFsIGxvYWQgcGVyIGJvbHQpIGV4Y2VlZHMgeWllbGQgY2FwYWNpdHkuIFRoZSBib2x0IG1heSB5aWVsZCBvciB0aGUgam9pbnQgbWF5IHVubG9hZC4iOwogICAgICBhbGVydHMudW5zaGlmdCh7IHR5cGU6ICJyaXNrIiwgdGV4dDogIkNvbWJpbmVkIGxvYWQgIiArIGZvcm1hdEZvcmNlKEZjb21iaW5lZCkucHJpbWFyeSArICIgZXhjZWVkcyB5aWVsZCBsb2FkICIgKyBmb3JtYXRGb3JjZShGeSkucHJpbWFyeSArICIuIiB9KTsKICAgIH0gZWxzZSBpZiAodXRpbENhcCA+PSAwLjg1IHx8IHV0aWxZaWVsZCA+PSAwLjg1IHx8IChoYXNFeHQgJiYgdXRpbENvbWJpbmVkID49IDAuOTApIHx8IHJhdGlvID4gMC44NSB8fCByYXRpbyA8IDAuNTAgfHwgayA8IDAuMTAgfHwgayA+IDAuMzApIHsKICAgICAgaWYgKHN0YXR1cyAhPT0gInJpc2siKSB7CiAgICAgICAgc3RhdHVzID0gImNhdXRpb24iOwogICAgICAgIHRpdGxlID0gIkNhdXRpb24iOwogICAgICAgIGlmIChyYXRpbyA8IDAuNTApIG5vdGUgPSAiUHJlbG9hZCBpcyBsb3cgcmVsYXRpdmUgdG8gcmVjb21tZW5kZWQgcHJhY3RpY2UuIENoZWNrIGxvb3NlbmluZyBhbmQgZmF0aWd1ZSB1bmRlciBjeWNsaWMgbG9hZC4iOwogICAgICAgIGVsc2UgaWYgKGhhc0V4dCAmJiB1dGlsQ29tYmluZWQgPj0gMC45MCkgbm90ZSA9ICJQcmVsb2FkIGlzIGFjY2VwdGFibGUgaW4gaXNvbGF0aW9uLCBidXQgdGhlIHNpbXBsaWZpZWQgY29tYmluZWQgdGVuc2lsZSBsb2FkIGFwcHJvYWNoZXMgYm9sdCBjYXBhY2l0eS4iOwogICAgICAgIGVsc2Ugbm90ZSA9ICJQcmVsb2FkIGFwcHJvYWNoZXMgdGhlIHVwcGVyIHJlY29tbWVuZGVkIHN0cmVuZ3RoIGxpbWl0LiBDb25maXJtIGZyaWN0aW9uLCB0b29sIHNjYXR0ZXIsIGFuZCBhcHBsaWNhYmxlIHN0YW5kYXJkcy4iOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzdGF0dXMgPSAic2FmZSI7CiAgICAgIHRpdGxlID0gIlNhZmUiOwogICAgICBub3RlID0gIlByZWxvYWQgaXMgd2l0aGluIHRoZSByZWNvbW1lbmRlZCByYW5nZSBhbmQgYmVsb3cgIiArIChoYXNQcm9vZiA\/ICJwcm9vZiIgOiAieWllbGQiKSArICIgc3RyZW5ndGguIjsKICAgIH0KCiAgICB2YXIgZmlGbXQgPSBmb3JtYXRGb3JjZShGaSk7CiAgICB2YXIgdEZtdCA9IGZvcm1hdFRvcnF1ZShUKTsKICAgIHZhciBzRm10ID0gZm9ybWF0U3RyZXNzKHN0cmVzcyk7CiAgICBlbC5vdXRGaS50ZXh0Q29udGVudCA9IGZpRm10LnByaW1hcnk7CiAgICBlbC5vdXRGaVN1Yi50ZXh0Q29udGVudCA9IGZpRm10LnNlY29uZGFyeSB8fCAiQ2xhbXAgLyB0ZW5zaW9uIGZvcmNlIEZpIjsKICAgIGVsLm91dFQudGV4dENvbnRlbnQgPSB0Rm10LnByaW1hcnk7CiAgICBlbC5vdXRUU3ViLnRleHRDb250ZW50ID0gKHRGbXQuc2Vjb25kYXJ5ID8gdEZtdC5zZWNvbmRhcnkgKyAiIC0gIiA6ICIiKSArIChtZXRob2QgPT09ICJmcmljdGlvbiIgPyAiZnJvbSBtdXQgLyBtdV9iIiA6ICJmcm9tIEsgeCBGaSB4IGQiKTsKICAgIGVsLm91dFN0cmVzcy50ZXh0Q29udGVudCA9IHNGbXQucHJpbWFyeTsKICAgIGVsLm91dFN0cmVzc05vdGUudGV4dENvbnRlbnQgPSAoc0ZtdC5zZWNvbmRhcnkgPyBzRm10LnNlY29uZGFyeSArICIgLSAiIDogIiIpICsgInNpZ21hID0gRmkgLyBBdCI7CgogICAgZWwub3V0RnkudGV4dENvbnRlbnQgPSBmb3JtYXRGb3JjZShGeSkucHJpbWFyeTsKICAgIGlmIChoYXNQcm9vZikgewogICAgICBlbC5wcm9vZlRpbGUuY2xhc3NMaXN0LnJlbW92ZSgiYnBjLWhpZGRlbiIpOwogICAgICBlbC5vdXRGcC50ZXh0Q29udGVudCA9IGZvcm1hdEZvcmNlKEZwKS5wcmltYXJ5OwogICAgICBlbC5wcm9vZlRpbGUucXVlcnlTZWxlY3RvcigiLmJwYy11IikudGV4dENvbnRlbnQgPSAiRnAgPSBBdCB4IFNwIjsKICAgIH0gZWxzZSB7CiAgICAgIGVsLnByb29mVGlsZS5jbGFzc0xpc3QuYWRkKCJicGMtaGlkZGVuIik7CiAgICAgIGVsLm91dEZwLnRleHRDb250ZW50ID0gIi0iOwogICAgfQoKICAgIHZhciBwY3RMYWJlbCA9IE1hdGgucm91bmQocmF0aW8gKiAxMDApICsgIiUiOwogICAgZWwub3V0UGN0LnRleHRDb250ZW50ID0gcGN0TGFiZWw7CiAgICBlbC5vdXRQY3ROb3RlLnRleHRDb250ZW50ID0gaGFzUHJvb2YgPyAib2YgcHJvb2Ygc3RyZW5ndGggU3AiIDogIm9mIHlpZWxkIHN0cmVuZ3RoIFN5IjsKCiAgICBpZiAoaGFzRXh0KSB7CiAgICAgIGVsLmV4dFRpbGUuY2xhc3NMaXN0LnJlbW92ZSgiYnBjLWhpZGRlbiIpOwogICAgICBlbC5vdXRGZXh0LnRleHRDb250ZW50ID0gZm9ybWF0Rm9yY2UoRmV4dEJvbHQpLnByaW1hcnk7CiAgICAgIGVsLmV4dFRpbGUucXVlcnlTZWxlY3RvcigiLmJwYy11IikudGV4dENvbnRlbnQgPSAicGx1cyBwcmVsb2FkIC0+ICIgKyBmb3JtYXRGb3JjZShGY29tYmluZWQpLnByaW1hcnk7CiAgICB9IGVsc2UgewogICAgICBlbC5leHRUaWxlLmNsYXNzTGlzdC5hZGQoImJwYy1oaWRkZW4iKTsKICAgICAgZWwub3V0RmV4dC50ZXh0Q29udGVudCA9ICItIjsKICAgIH0KCiAgICBlbC5vdXRBdC50ZXh0Q29udGVudCA9IGZvcm1hdEFyZWEoQXQpOwogICAgZWwub3V0QXROb3RlLnRleHRDb250ZW50ID0gZWwuYXRNYW51YWwuY2hlY2tlZCA\/ICJtYW51YWwgaW5wdXQiIDogKHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiID8gImZyb20gZCBhbmQgcGl0Y2giIDogImZyb20gZCBhbmQgVFBJIik7CiAgICBlbC5vdXRLZXEudGV4dENvbnRlbnQgPSBpc0Zpbml0ZShLZXEpID8gZm10KEtlcSwgMykgOiAiLSI7CgogICAgdmFyIHV0aWxQY3QgPSB1dGlsU2hvdyAqIDEwMDsKICAgIGVsLm91dFV0aWwudGV4dENvbnRlbnQgPSBmbXQodXRpbFBjdCwgMSkgKyAiJSBvZiAiICsgKGhhc1Byb29mID8gInByb29mIiA6ICJ5aWVsZCIpOwogICAgZWwudXRpbEZpbGwuc3R5bGUud2lkdGggPSBjbGFtcCh1dGlsUGN0LCAwLCAxMDApICsgIiUiOwogICAgZWwudXRpbEZpbGwuY2xhc3NOYW1lID0gImJwYy11dGlsLWZpbGwiICsgKHN0YXR1cyA9PT0gInJpc2siID8gIiBicGMtaXMtcmlzayIgOiBzdGF0dXMgPT09ICJjYXV0aW9uIiA\/ICIgYnBjLWlzLWNhdXRpb24iIDogIiBicGMtaXMtb2siKTsKICAgIHNldEdhdWdlKHV0aWxZaWVsZCk7CgogICAgZWwuc3RhdHVzVGl0bGUudGV4dENvbnRlbnQgPSB0aXRsZTsKICAgIGVsLnN0YXR1c05vdGUudGV4dENvbnRlbnQgPSBub3RlOwogICAgZWwuYmFubmVyLmNsYXNzTmFtZSA9ICJicGMtYmFubmVyIGJwYy1iYW5uZXItIiArIChzdGF0dXMgPT09ICJzYWZlIiA\/ICJvayIgOiBzdGF0dXMgPT09ICJyaXNrIiA\/ICJyaXNrIiA6ICJjYXV0aW9uIik7CgogICAgZWwuYWxlcnRzLmlubmVySFRNTCA9ICIiOwogICAgYWxlcnRzLmZvckVhY2goZnVuY3Rpb24gKGEpIHsKICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBkaXYuY2xhc3NOYW1lID0gImJwYy1hbGVydCBicGMtYWxlcnQtIiArIChhLnR5cGUgPT09ICJyaXNrIiA\/ICJyaXNrIiA6IGEudHlwZSA9PT0gIm9rIiA\/ICJvayIgOiAid2FybiIpOwogICAgICBkaXYudGV4dENvbnRlbnQgPSBhLnRleHQ7CiAgICAgIGVsLmFsZXJ0cy5hcHBlbmRDaGlsZChkaXYpOwogICAgfSk7CgogICAgaWYgKHNjcm9sbCkgewogICAgICB0cnkgeyBlbC5iYW5uZXIuY2xvc2VzdCgiLmJwYy1jYXJkIikuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogInNtb290aCIsIGJsb2NrOiAibmVhcmVzdCIgfSk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNldEFsbCgpIHsKICAgIHN0YXRlLnVuaXQgPSAibWV0cmljIjsKICAgIHN0YXRlLnNpemVJZCA9IERFRkFVTFRTLnNpemU7CiAgICBzdGF0ZS5ncmFkZUlkID0gREVGQVVMVFMuZ3JhZGU7CiAgICBlbC5kLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLmQpOwogICAgZWwucC52YWx1ZSA9IFN0cmluZyhERUZBVUxUUy5wKTsKICAgIGVsLmF0TWFudWFsLmNoZWNrZWQgPSBmYWxzZTsKICAgIGVsLmF0LnJlYWRPbmx5ID0gdHJ1ZTsKICAgIGVsLnN5LnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLnN5KTsKICAgIGVsLnNwLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLnNwKTsKICAgIGVsLnByZWxvYWQudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMucHJlbG9hZCk7CiAgICBlbC5wcmVsb2FkUmFuZ2UudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMucHJlbG9hZCk7CiAgICBlbC5wcmVsb2FkVmFsLnRleHRDb250ZW50ID0gREVGQVVMVFMucHJlbG9hZCArICIlIjsKICAgIGVsLmx1Yi52YWx1ZSA9IERFRkFVTFRTLmx1YjsKICAgIGVsLmsudmFsdWUgPSBOdW1iZXIoREVGQVVMVFMuaykudG9GaXhlZCgyKTsKICAgIGVsLm11dC52YWx1ZSA9ICIiOwogICAgZWwubXViLnZhbHVlID0gIiI7CiAgICBhcHBseUx1YnJpY2F0aW9uKCk7CiAgICBlbC5mZXh0LnZhbHVlID0gIiI7CiAgICBlbC5mZXh0VW5pdC52YWx1ZSA9IERFRkFVTFRTLmZleHRVbml0OwogICAgZWwubmJvbHRzLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLm5ib2x0cyk7CiAgICB1cGRhdGVVbml0TGFiZWxzKCk7CiAgICByZW5kZXJTaXplQ2hpcHMoKTsKICAgIHJlbmRlckdyYWRlQ2hpcHMoKTsKICAgIHJlZnJlc2hBdCgpOwogICAgZWwucmVzdWx0cy5jbGFzc0xpc3QuYWRkKCJicGMtaGlkZGVuIik7CiAgfQoKICBmdW5jdGlvbiBzeW5jUHJlbG9hZEZyb21OdW1iZXIoKSB7CiAgICB2YXIgdiA9IG51bShlbC5wcmVsb2FkKTsKICAgIGlmICghaXNGaW5pdGUodikpIHJldHVybjsKICAgIGVsLnByZWxvYWRSYW5nZS52YWx1ZSA9IFN0cmluZyhjbGFtcCh2LCA1MCwgOTApKTsKICAgIGVsLnByZWxvYWRWYWwudGV4dENvbnRlbnQgPSBNYXRoLnJvdW5kKHYpICsgIiUiOwogIH0KCiAgZnVuY3Rpb24gc3luY1ByZWxvYWRGcm9tUmFuZ2UoKSB7CiAgICBlbC5wcmVsb2FkLnZhbHVlID0gZWwucHJlbG9hZFJhbmdlLnZhbHVlOwogICAgZWwucHJlbG9hZFZhbC50ZXh0Q29udGVudCA9IGVsLnByZWxvYWRSYW5nZS52YWx1ZSArICIlIjsKICB9CgogIGVsLmF0TWFudWFsLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsKICAgIGVsLmF0LnJlYWRPbmx5ID0gIWVsLmF0TWFudWFsLmNoZWNrZWQ7CiAgICBpZiAoIWVsLmF0TWFudWFsLmNoZWNrZWQpIHJlZnJlc2hBdCgpOwogIH0pOwoKICBlbC5sdWIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgewogICAgYXBwbHlMdWJyaWNhdGlvbigpOwogIH0pOwoKICBbImsiLCAibXV0IiwgIm11YiJdLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgZWxba2V5XS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIG1hcmtDdXN0b21MdWIpOwogIH0pOwoKICBlbC5wcmVsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iiwgc3luY1ByZWxvYWRGcm9tTnVtYmVyKTsKICBlbC5wcmVsb2FkUmFuZ2UuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBzeW5jUHJlbG9hZEZyb21SYW5nZSk7CgogIFsiZCIsICJwIl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICBlbFtrZXldLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKCkgewogICAgICBzdGF0ZS5zaXplSWQgPSAiIjsKICAgICAgcGFpbnRDaGlwcygpOwogICAgICBpZiAoIWVsLmF0TWFudWFsLmNoZWNrZWQpIHJlZnJlc2hBdCgpOwogICAgfSk7CiAgfSk7CgogIFsic3kiLCAic3AiXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgIGVsW2tleV0uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7CiAgICAgIHN0YXRlLmdyYWRlSWQgPSAiIjsKICAgICAgcGFpbnRDaGlwcygpOwogICAgfSk7CiAgfSk7CgogIGZ1bmN0aW9uIG9uUm9vdENsaWNrKGUpIHsKICAgIHZhciBidG4gPSBlLnRhcmdldCAmJiBlLnRhcmdldC5jbG9zZXN0ID8gZS50YXJnZXQuY2xvc2VzdCgiYnV0dG9uIikgOiBudWxsOwogICAgaWYgKCFidG4gfHwgIXJvb3QuY29udGFpbnMoYnRuKSkgcmV0dXJuOwogICAgaWYgKGJ0bi5pZCA9PT0gImJwY0J0bk1ldHJpYyIpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBzd2l0Y2hVbml0KCJtZXRyaWMiKTsKICAgIH0gZWxzZSBpZiAoYnRuLmlkID09PSAiYnBjQnRuSW1wZXJpYWwiKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgc3dpdGNoVW5pdCgiaW1wZXJpYWwiKTsKICAgIH0gZWxzZSBpZiAoYnRuLmlkID09PSAiYnBjQnRuUmVzZXQiKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgcmVzZXRBbGwoKTsKICAgIH0gZWxzZSBpZiAoYnRuLmlkID09PSAiYnBjQnRuQ2FsY3VsYXRlIikgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNhbGN1bGF0ZSh0cnVlKTsKICAgIH0KICB9CgogIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBvblJvb3RDbGljayk7CiAgaWYgKGVsLmJ0bkNhbGMpIGVsLmJ0bkNhbGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7IGNhbGN1bGF0ZSh0cnVlKTsgfSk7CgogIHdpbmRvdy5icGNTd2l0Y2hVbml0ID0gc3dpdGNoVW5pdDsKICB3aW5kb3cuYnBjUmVzZXQgPSByZXNldEFsbDsKICB3aW5kb3cuYnBjQ2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeyBjYWxjdWxhdGUodHJ1ZSk7IH07CgogIHVwZGF0ZVVuaXRMYWJlbHMoKTsKICByZW5kZXJTaXplQ2hpcHMoKTsKICByZW5kZXJHcmFkZUNoaXBzKCk7CiAgYXBwbHlMdWJyaWNhdGlvbigpOwogIHJlZnJlc2hBdCgpOwp9KSgpOwo=<\/textarea>\n<script id=\"bpc-boot-script\" type=\"text\/javascript\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\">\n(function(){\nfunction boot(){\nif(window.bpcCalculate){return;}\nvar el=document.getElementById(\"bpc-js-b64\");\nif(!el){return;}\nvar code=el.value;\nif(!code){code=el.textContent;}\nif(!code){return;}\ncode=code.replace(\/\\s\/g,\"\");\nvar js=atob(code);\nvar s=document.createElement(\"script\");\ns.type=\"text\/javascript\";\ns.setAttribute(\"data-no-minify\",\"1\");\ns.setAttribute(\"data-cfasync\",\"false\");\ns.text=js;\nvar p=document.body;\nif(!p){p=document.getElementsByTagName(\"head\")[0];}\nif(p){p.appendChild(s);}\n}\nwindow.bpcBoot=boot;\nif(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",boot);}\nelse{boot();}\n})();\n<\/script>\n\n<\/div>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Bolt Preload Calculator is a practical engineering tool designed to estimate the required preload force and tightening torque for bolted connections. By considering bolt&#8230;<\/p>","protected":false},"author":2,"featured_media":24676,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8595,8597,8594,8596],"class_list":["post-24675","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bolt-preload","tag-bolt-tension","tag-bolt-torque","tag-clamp-force","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Bolt-Preload-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24675"}],"version-history":[{"count":3,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24675\/revisions"}],"predecessor-version":[{"id":24681,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24675\/revisions\/24681"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24676"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}