{"id":24755,"date":"2026-08-28T00:59:04","date_gmt":"2026-08-28T00:59:04","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24755"},"modified":"2026-08-28T00:59:06","modified_gmt":"2026-08-28T00:59:06","slug":"pin-shear-strength-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/pin-shear-strength-calculator\/","title":{"rendered":"Pin Shear Strength Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Pin Shear Strength Calculator<\/strong> is a practical engineering tool designed to calculate the shear stress, allowable load, required diameter, and safety factor of pins under transverse loading. Supporting both single-shear and double-shear configurations, it helps engineers quickly evaluate pin strength for clevis joints, hinges, mechanical linkages, and industrial equipment. The Pin Shear Strength Calculator simplifies preliminary pin sizing and load capacity verification while helping reduce the risk of shear failure and improve connection reliability.<\/p>\n\n\n\n<!-- WordPress Custom HTML Block: copy ALL content below into Code Editor mode -->\n<!-- Do NOT wrap in DOCTYPE\/html\/head\/body. Do NOT re-save in Visual mode. -->\n<!-- CSS\/JS are scoped to #pin-shear-calculator and will not restyle theme header, footer, or other page content. -->\n<style>\n\/* Pin Shear Strength Calculator \u2014 WordPress-safe scoped styles\n * MUST NOT affect theme header, footer, navigation, or any content\n * outside #pin-shear-calculator. No html\/body\/universal selectors.\n * Paste wordpress-embed.html into a Custom HTML block (Code Editor).\n *\/\n\n.entry-content #pin-shear-calculator,\n.wp-block-html #pin-shear-calculator,\n.elementor-widget-container #pin-shear-calculator,\n#pin-shear-calculator {\n    all: revert;\n    --pssc-primary: #0369a1;\n    --pssc-primary-light: #0284c7;\n    --pssc-primary-dark: #075985;\n    --pssc-success: #059669;\n    --pssc-success-bg: #ecfdf5;\n    --pssc-warning: #d97706;\n    --pssc-warning-bg: #fffbeb;\n    --pssc-danger: #dc2626;\n    --pssc-danger-bg: #fef2f2;\n    --pssc-card-bg: #ffffff;\n    --pssc-text: #0f172a;\n    --pssc-text-muted: #64748b;\n    --pssc-border: #d4dde8;\n    --pssc-shadow: 0 1px 3px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.06);\n    --pssc-radius: 10px;\n    --pssc-mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n    --pssc-font: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n\n    box-sizing: border-box !important;\n    display: block !important;\n    isolation: isolate !important;\n    contain: layout style !important;\n    float: none !important;\n    clear: both !important;\n    position: relative !important;\n    z-index: auto !important;\n    overflow: visible !important;\n    font-family: var(--pssc-font) !important;\n    font-size: 15px !important;\n    font-weight: 400 !important;\n    line-height: 1.55 !important;\n    color: var(--pssc-text) !important;\n    background: transparent !important;\n    width: 100% !important;\n    max-width: 1100px !important;\n    margin: 0 auto !important;\n    padding: 1.25rem 1rem 2rem !important;\n    text-align: left !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n}\n\n.entry-content #pin-shear-calculator *,\n.entry-content #pin-shear-calculator *::before,\n.entry-content #pin-shear-calculator *::after,\n.wp-block-html #pin-shear-calculator *,\n.wp-block-html #pin-shear-calculator *::before,\n.wp-block-html #pin-shear-calculator *::after,\n.elementor-widget-container #pin-shear-calculator *,\n.elementor-widget-container #pin-shear-calculator *::before,\n.elementor-widget-container #pin-shear-calculator *::after,\n#pin-shear-calculator *,\n#pin-shear-calculator *::before,\n#pin-shear-calculator *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #pin-shear-calculator h1,\n.entry-content #pin-shear-calculator h2,\n.entry-content #pin-shear-calculator h3,\n.entry-content #pin-shear-calculator h4,\n.entry-content #pin-shear-calculator p,\n.entry-content #pin-shear-calculator ul,\n.entry-content #pin-shear-calculator ol,\n.entry-content #pin-shear-calculator li,\n.entry-content #pin-shear-calculator section,\n.entry-content #pin-shear-calculator div,\n.entry-content #pin-shear-calculator span,\n.entry-content #pin-shear-calculator strong,\n.entry-content #pin-shear-calculator em,\n.entry-content #pin-shear-calculator i,\n.entry-content #pin-shear-calculator b,\n.entry-content #pin-shear-calculator figure,\n.entry-content #pin-shear-calculator blockquote,\n.wp-block-html #pin-shear-calculator h1,\n.wp-block-html #pin-shear-calculator h2,\n.wp-block-html #pin-shear-calculator h3,\n.wp-block-html #pin-shear-calculator h4,\n.wp-block-html #pin-shear-calculator p,\n.wp-block-html #pin-shear-calculator ul,\n.wp-block-html #pin-shear-calculator ol,\n.wp-block-html #pin-shear-calculator li,\n.wp-block-html #pin-shear-calculator section,\n.wp-block-html #pin-shear-calculator div,\n.wp-block-html #pin-shear-calculator span,\n.wp-block-html #pin-shear-calculator strong,\n.wp-block-html #pin-shear-calculator em,\n.wp-block-html #pin-shear-calculator i,\n.wp-block-html #pin-shear-calculator b,\n.wp-block-html #pin-shear-calculator figure,\n.wp-block-html #pin-shear-calculator blockquote,\n.elementor-widget-container #pin-shear-calculator h1,\n.elementor-widget-container #pin-shear-calculator h2,\n.elementor-widget-container #pin-shear-calculator h3,\n.elementor-widget-container #pin-shear-calculator h4,\n.elementor-widget-container #pin-shear-calculator p,\n.elementor-widget-container #pin-shear-calculator ul,\n.elementor-widget-container #pin-shear-calculator ol,\n.elementor-widget-container #pin-shear-calculator li,\n.elementor-widget-container #pin-shear-calculator section,\n.elementor-widget-container #pin-shear-calculator div,\n.elementor-widget-container #pin-shear-calculator span,\n.elementor-widget-container #pin-shear-calculator strong,\n.elementor-widget-container #pin-shear-calculator em,\n.elementor-widget-container #pin-shear-calculator i,\n.elementor-widget-container #pin-shear-calculator b,\n.elementor-widget-container #pin-shear-calculator figure,\n.elementor-widget-container #pin-shear-calculator blockquote,\n#pin-shear-calculator h1,\n#pin-shear-calculator h2,\n#pin-shear-calculator h3,\n#pin-shear-calculator h4,\n#pin-shear-calculator p,\n#pin-shear-calculator ul,\n#pin-shear-calculator ol,\n#pin-shear-calculator li,\n#pin-shear-calculator section,\n#pin-shear-calculator div,\n#pin-shear-calculator span,\n#pin-shear-calculator strong,\n#pin-shear-calculator em,\n#pin-shear-calculator i,\n#pin-shear-calculator b,\n#pin-shear-calculator figure,\n#pin-shear-calculator blockquote {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: none !important;\n    box-shadow: none !important;\n    float: none !important;\n    font-family: inherit !important;\n    line-height: inherit !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n}\n\n.entry-content #pin-shear-calculator button,\n.entry-content #pin-shear-calculator input,\n.entry-content #pin-shear-calculator select,\n.entry-content #pin-shear-calculator textarea,\n.entry-content #pin-shear-calculator label,\n.wp-block-html #pin-shear-calculator button,\n.wp-block-html #pin-shear-calculator input,\n.wp-block-html #pin-shear-calculator select,\n.wp-block-html #pin-shear-calculator textarea,\n.wp-block-html #pin-shear-calculator label,\n.elementor-widget-container #pin-shear-calculator button,\n.elementor-widget-container #pin-shear-calculator input,\n.elementor-widget-container #pin-shear-calculator select,\n.elementor-widget-container #pin-shear-calculator textarea,\n.elementor-widget-container #pin-shear-calculator label,\n#pin-shear-calculator button,\n#pin-shear-calculator input,\n#pin-shear-calculator select,\n#pin-shear-calculator textarea,\n#pin-shear-calculator label {\n    font: inherit !important;\n    color: inherit !important;\n    margin: 0 !important;\n    min-width: 0 !important;\n    max-width: none !important;\n    float: none !important;\n}\n\n.entry-content #pin-shear-calculator button,\n.wp-block-html #pin-shear-calculator button,\n.elementor-widget-container #pin-shear-calculator button,\n#pin-shear-calculator button {\n    cursor: pointer !important;\n    background: transparent !important;\n    border: none !important;\n    padding: 0 !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n    box-shadow: none !important;\n    text-decoration: none !important;\n    line-height: inherit !important;\n}\n\n.entry-content #pin-shear-calculator a,\n.wp-block-html #pin-shear-calculator a,\n.elementor-widget-container #pin-shear-calculator a,\n#pin-shear-calculator a {\n    color: var(--pssc-primary) !important;\n    text-decoration: none !important;\n}\n\n.entry-content #pin-shear-calculator a:hover,\n.wp-block-html #pin-shear-calculator a:hover,\n.elementor-widget-container #pin-shear-calculator a:hover,\n#pin-shear-calculator a:hover {\n    text-decoration: underline !important;\n}\n\n.entry-content #pin-shear-calculator img,\n.entry-content #pin-shear-calculator svg,\n.wp-block-html #pin-shear-calculator img,\n.wp-block-html #pin-shear-calculator svg,\n.elementor-widget-container #pin-shear-calculator img,\n.elementor-widget-container #pin-shear-calculator svg,\n#pin-shear-calculator img,\n#pin-shear-calculator svg {\n    display: block !important;\n    max-width: 100% !important;\n    height: auto !important;\n}\n\n#pin-shear-calculator strong { font-weight: 700 !important; }\n#pin-shear-calculator sub, #pin-shear-calculator sup { font-size: 75% !important; vertical-align: baseline !important; }\n#pin-shear-calculator sub { bottom: -0.2em !important; position: relative !important; }\n#pin-shear-calculator sup { top: -0.45em !important; position: relative !important; }\n\n#pin-shear-calculator .pssc-hidden { display: none !important; }\n\n#pin-shear-calculator .pssc-js-store {\n    display: none !important;\n    width: 0 !important;\n    height: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    left: -9999px !important;\n    visibility: hidden !important;\n    pointer-events: none !important;\n}\n\n#pin-shear-calculator .pssc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 1.15rem !important;\n}\n\n#pin-shear-calculator .pssc-card {\n    background: var(--pssc-card-bg) !important;\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: var(--pssc-radius) !important;\n    box-shadow: var(--pssc-shadow) !important;\n    overflow: visible !important;\n}\n\n#pin-shear-calculator .pssc-card-h {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    gap: 0.75rem !important;\n    padding: 0.72rem 1rem !important;\n    background: linear-gradient(180deg, #f8fafc, #f1f5f9) !important;\n    border-bottom: 1px solid var(--pssc-border) !important;\n    flex-wrap: wrap !important;\n}\n\n#pin-shear-calculator .pssc-card-h h2 {\n    font-size: 0.72rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.08em !important;\n    text-transform: uppercase !important;\n    color: #1e293b !important;\n}\n\n#pin-shear-calculator .pssc-card-b { padding: 0.95rem 1rem 1.1rem !important; }\n\n#pin-shear-calculator .pssc-section {\n    font-size: 0.78rem !important;\n    font-weight: 700 !important;\n    color: var(--pssc-text) !important;\n    margin: 1.05rem 0 0.65rem !important;\n    padding: 0 0 0.3rem !important;\n    border-bottom: 1px dashed var(--pssc-border) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.45rem !important;\n}\n\n#pin-shear-calculator .pssc-section:first-child { margin-top: 0 !important; }\n\n#pin-shear-calculator .pssc-badge {\n    width: 1.35rem !important;\n    height: 1.35rem !important;\n    border-radius: 999px !important;\n    flex-shrink: 0 !important;\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    background: linear-gradient(135deg, #0f172a, #334155) !important;\n    color: #fff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n}\n\n#pin-shear-calculator .pssc-grid {\n    display: grid !important;\n    gap: 0.7rem 0.75rem !important;\n}\n\n#pin-shear-calculator .pssc-g-2 { grid-template-columns: 1fr 1fr !important; }\n#pin-shear-calculator .pssc-g-3 { grid-template-columns: 1fr 1fr 1fr !important; }\n\n@media (max-width: 640px) {\n    #pin-shear-calculator .pssc-g-2,\n    #pin-shear-calculator .pssc-g-3 { grid-template-columns: 1fr !important; }\n}\n\n#pin-shear-calculator label.pssc-fld {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 0.28rem !important;\n    min-width: 0 !important;\n}\n\n#pin-shear-calculator label.pssc-fld > span.pssc-lbl {\n    font-size: 0.75rem !important;\n    font-weight: 600 !important;\n    color: #334155 !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.3rem !important;\n    flex-wrap: wrap !important;\n}\n\n#pin-shear-calculator .pssc-hint {\n    font-size: 0.68rem !important;\n    color: var(--pssc-text-muted) !important;\n    font-weight: 400 !important;\n}\n\n#pin-shear-calculator input[type=\"number\"],\n#pin-shear-calculator input[type=\"text\"] {\n    appearance: none !important;\n    -webkit-appearance: none !important;\n    width: 100% !important;\n    border: 1px solid #cbd5e1 !important;\n    border-radius: 8px !important;\n    padding: 0.5rem 0.7rem !important;\n    font-size: 0.8125rem !important;\n    background: #fff !important;\n    color: #0f172a !important;\n    font-family: var(--pssc-mono) !important;\n    line-height: 1.25 !important;\n}\n\n#pin-shear-calculator input[type=\"number\"]::-webkit-outer-spin-button,\n#pin-shear-calculator input[type=\"number\"]::-webkit-inner-spin-button {\n    -webkit-appearance: none !important;\n    margin: 0 !important;\n}\n\n#pin-shear-calculator select {\n    display: block !important;\n    width: 100% !important;\n    min-height: 2.45rem !important;\n    padding: 0.48rem 2rem 0.48rem 0.7rem !important;\n    border: 1px solid #cbd5e1 !important;\n    border-radius: 8px !important;\n    background-color: #fff !important;\n    color: #0f172a !important;\n    font-size: 0.8125rem !important;\n    font-family: var(--pssc-mono) !important;\n    appearance: auto !important;\n    -webkit-appearance: menulist !important;\n}\n\n#pin-shear-calculator input:focus,\n#pin-shear-calculator select:focus {\n    outline: 2px solid #38bdf8 !important;\n    outline-offset: 0 !important;\n    border-color: #0ea5e9 !important;\n}\n\n#pin-shear-calculator input:disabled,\n#pin-shear-calculator input[readonly] {\n    background: #f8fafc !important;\n    color: #0f172a !important;\n}\n\n#pin-shear-calculator input.pssc-invalid {\n    border-color: #ef4444 !important;\n    background: #fef2f2 !important;\n}\n\n#pin-shear-calculator .pssc-err {\n    font-size: 0.68rem !important;\n    color: var(--pssc-danger) !important;\n    min-height: 0.85rem !important;\n    line-height: 1.3 !important;\n}\n\n#pin-shear-calculator .pssc-input-row {\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) auto !important;\n    gap: 0.4rem !important;\n    align-items: stretch !important;\n}\n\n#pin-shear-calculator .pssc-unit-pill {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 3.4rem !important;\n    padding: 0 0.55rem !important;\n    border: 1px solid #cbd5e1 !important;\n    border-radius: 8px !important;\n    background: #f8fafc !important;\n    color: var(--pssc-text-muted) !important;\n    font-size: 0.72rem !important;\n    font-weight: 600 !important;\n    font-family: var(--pssc-mono) !important;\n    white-space: nowrap !important;\n}\n\n#pin-shear-calculator .pssc-tools {\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n    flex-shrink: 0 !important;\n    margin-left: auto !important;\n}\n\n#pin-shear-calculator .pssc-unit-switch {\n    display: inline-flex !important;\n    align-items: center !important;\n    gap: 2px !important;\n    padding: 3px !important;\n    border-radius: 8px !important;\n    background: #0f172a !important;\n    border: 1px solid #1e293b !important;\n}\n\n#pin-shear-calculator .pssc-unit-switch .pssc-unit-btn {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    padding: 0.4rem 0.85rem !important;\n    border: none !important;\n    border-radius: 6px !important;\n    background: transparent !important;\n    color: #cbd5e1 !important;\n    font-size: 0.8125rem !important;\n    font-weight: 500 !important;\n    cursor: pointer !important;\n}\n\n#pin-shear-calculator .pssc-unit-switch .pssc-unit-btn:hover { color: #fff !important; }\n\n#pin-shear-calculator .pssc-unit-switch .pssc-unit-btn.pssc-is-active {\n    background: #0ea5e9 !important;\n    color: #fff !important;\n    font-weight: 600 !important;\n}\n\n#pin-shear-calculator .pssc-chip-row {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 0.35rem !important;\n}\n\n#pin-shear-calculator .pssc-chip {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    padding: 0.32rem 0.55rem !important;\n    border-radius: 6px !important;\n    border: 1px solid #cbd5e1 !important;\n    background: #fff !important;\n    color: #334155 !important;\n    font-size: 0.72rem !important;\n    font-weight: 600 !important;\n    font-family: var(--pssc-mono) !important;\n    cursor: pointer !important;\n}\n\n#pin-shear-calculator .pssc-chip:hover { border-color: #38bdf8 !important; }\n\n#pin-shear-calculator .pssc-chip.pssc-is-active {\n    background: #0284c7 !important;\n    color: #fff !important;\n    border-color: #0284c7 !important;\n}\n\n#pin-shear-calculator .pssc-note {\n    font-size: 0.72rem !important;\n    color: var(--pssc-text-muted) !important;\n    background: #f4f7fa !important;\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 8px !important;\n    padding: 0.5rem 0.65rem !important;\n    line-height: 1.45 !important;\n    margin-top: 0.55rem !important;\n}\n\n#pin-shear-calculator .pssc-check-row {\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.45rem !important;\n    font-size: 0.78rem !important;\n    font-weight: 600 !important;\n    color: #334155 !important;\n    margin-top: 0.65rem !important;\n}\n\n#pin-shear-calculator .pssc-check-row input[type=\"checkbox\"] {\n    width: 1rem !important;\n    height: 1rem !important;\n    accent-color: var(--pssc-primary) !important;\n}\n\n#pin-shear-calculator .pssc-advanced {\n    margin-top: 0.65rem !important;\n    padding-top: 0.65rem !important;\n    border-top: 1px dashed var(--pssc-border) !important;\n}\n\n#pin-shear-calculator .pssc-actions {\n    display: flex !important;\n    justify-content: center !important;\n    gap: 0.65rem !important;\n    flex-wrap: wrap !important;\n    margin-top: 1.15rem !important;\n    padding-top: 0.9rem !important;\n    border-top: 1px solid var(--pssc-border) !important;\n}\n\n#pin-shear-calculator .pssc-calc-btn {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 220px !important;\n    padding: 0.85rem 2.5rem !important;\n    border: none !important;\n    border-radius: 10px !important;\n    background: #0077c2 !important;\n    color: #ffffff !important;\n    font-size: 1rem !important;\n    font-weight: 700 !important;\n    cursor: pointer !important;\n}\n\n#pin-shear-calculator .pssc-calc-btn:hover { background: #0066a8 !important; }\n\n#pin-shear-calculator .pssc-tip {\n    position: relative !important;\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 0.95rem !important;\n    height: 0.95rem !important;\n    border-radius: 999px !important;\n    background: #e2e8f0 !important;\n    color: #475569 !important;\n    font-size: 0.62rem !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    flex-shrink: 0 !important;\n}\n\n#pin-shear-calculator .pssc-tip:hover,\n#pin-shear-calculator .pssc-tip:focus {\n    background: #0284c7 !important;\n    color: #fff !important;\n    outline: none !important;\n}\n\n#pin-shear-calculator .pssc-tip-box {\n    display: none !important;\n    position: absolute !important;\n    left: 50% !important;\n    bottom: calc(100% + 8px) !important;\n    transform: translateX(-50%) !important;\n    width: 16.5rem !important;\n    padding: 0.55rem 0.65rem !important;\n    border-radius: 8px !important;\n    z-index: 20 !important;\n    background: #0f172a !important;\n    color: #e2e8f0 !important;\n    font-size: 0.7rem !important;\n    font-weight: 400 !important;\n    line-height: 1.4 !important;\n    box-shadow: 0 8px 24px rgba(15, 23, 42, 0.25) !important;\n    text-align: left !important;\n}\n\n#pin-shear-calculator .pssc-tip-box::after {\n    content: \"\" !important;\n    position: absolute !important;\n    left: 50% !important;\n    top: 100% !important;\n    transform: translateX(-50%) !important;\n    border: 6px solid transparent !important;\n    border-top-color: #0f172a !important;\n}\n\n#pin-shear-calculator .pssc-tip:hover .pssc-tip-box,\n#pin-shear-calculator .pssc-tip:focus .pssc-tip-box { display: block !important; }\n\n\/* Results *\/\n#pin-shear-calculator .pssc-banner {\n    border-radius: 10px !important;\n    padding: 0.85rem 1rem !important;\n    color: #fff !important;\n    margin-bottom: 0.85rem !important;\n    display: flex !important;\n    align-items: flex-start !important;\n    gap: 0.75rem !important;\n}\n\n#pin-shear-calculator .pssc-banner .pssc-dot {\n    width: 0.7rem !important;\n    height: 0.7rem !important;\n    border-radius: 999px !important;\n    background: #fff !important;\n    flex-shrink: 0 !important;\n    margin-top: 0.28rem !important;\n}\n\n#pin-shear-calculator .pssc-banner-kicker {\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.08em !important;\n    text-transform: uppercase !important;\n    opacity: 0.85 !important;\n}\n\n#pin-shear-calculator .pssc-banner-title {\n    font-size: 1.15rem !important;\n    font-weight: 750 !important;\n    margin: 0.1rem 0 0.2rem !important;\n}\n\n#pin-shear-calculator .pssc-banner-note {\n    font-size: 0.75rem !important;\n    opacity: 0.92 !important;\n    line-height: 1.45 !important;\n}\n\n#pin-shear-calculator .pssc-banner-ok { background: linear-gradient(90deg, #14532d, #166534) !important; }\n#pin-shear-calculator .pssc-banner-caution { background: linear-gradient(90deg, #854d0e, #a16207) !important; }\n#pin-shear-calculator .pssc-banner-risk { background: linear-gradient(90deg, #7f1d1d, #991b1b) !important; }\n#pin-shear-calculator .pssc-banner-idle { background: linear-gradient(90deg, #334155, #475569) !important; }\n\n#pin-shear-calculator .pssc-hero {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.65rem !important;\n    margin-bottom: 0.75rem !important;\n}\n\n@media (max-width: 520px) {\n    #pin-shear-calculator .pssc-hero { grid-template-columns: 1fr !important; }\n}\n\n#pin-shear-calculator .pssc-hero-card {\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 10px !important;\n    padding: 0.8rem 0.85rem !important;\n    background: linear-gradient(180deg, #fff, #f8fafc) !important;\n}\n\n#pin-shear-calculator .pssc-hero-card.pssc-is-accent {\n    border-color: #7dd3fc !important;\n    background: linear-gradient(180deg, #f0f9ff, #fff) !important;\n}\n\n#pin-shear-calculator .pssc-hero-card.pssc-is-focus {\n    border-color: #0284c7 !important;\n    box-shadow: 0 0 0 3px rgba(2, 132, 199, 0.16) !important;\n}\n\n#pin-shear-calculator .pssc-hero-k {\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.07em !important;\n    text-transform: uppercase !important;\n    color: var(--pssc-text-muted) !important;\n}\n\n#pin-shear-calculator .pssc-hero-v {\n    font-family: var(--pssc-mono) !important;\n    font-size: 1.25rem !important;\n    font-weight: 700 !important;\n    color: #0f172a !important;\n    margin-top: 0.2rem !important;\n    line-height: 1.2 !important;\n}\n\n#pin-shear-calculator .pssc-hero-u {\n    font-size: 0.7rem !important;\n    color: var(--pssc-text-muted) !important;\n    margin-top: 0.15rem !important;\n}\n\n#pin-shear-calculator .pssc-viz {\n    display: grid !important;\n    grid-template-columns: 200px 1fr !important;\n    gap: 0.75rem !important;\n    align-items: center !important;\n    margin-bottom: 0.75rem !important;\n}\n\n@media (max-width: 640px) {\n    #pin-shear-calculator .pssc-viz { grid-template-columns: 1fr !important; }\n}\n\n#pin-shear-calculator .pssc-sch-wrap {\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 10px !important;\n    padding: 0.45rem 0.4rem 0.35rem !important;\n    background: linear-gradient(180deg, #f8fafc, #fff) !important;\n}\n\n#pin-shear-calculator .pssc-schematic { width: 100% !important; max-width: 200px !important; margin: 0 auto !important; }\n#pin-shear-calculator .pssc-schematic .pssc-sch-pin { fill: #64748b; stroke: #334155; }\n#pin-shear-calculator .pssc-schematic .pssc-sch-plate { fill: #cbd5e1; stroke: #94a3b8; }\n#pin-shear-calculator .pssc-schematic .pssc-sch-force { fill: none; stroke: #0369a1; }\n#pin-shear-calculator .pssc-schematic .pssc-sch-arrow { fill: #0369a1; }\n#pin-shear-calculator .pssc-schematic .pssc-sch-label { fill: #334155; font-size: 11px; font-family: var(--pssc-font); }\n#pin-shear-calculator .pssc-schematic .pssc-sch-dash { fill: none; stroke: #64748b; stroke-dasharray: 3 2; }\n#pin-shear-calculator .pssc-schematic .pssc-g-single { display: none; }\n#pin-shear-calculator .pssc-schematic[data-shear=\"single\"] .pssc-g-single { display: unset; }\n#pin-shear-calculator .pssc-schematic[data-shear=\"single\"] .pssc-g-double { display: none; }\n#pin-shear-calculator .pssc-schematic[data-status=\"ok\"] .pssc-sch-pin { fill: #0f766e; stroke: #115e59; }\n#pin-shear-calculator .pssc-schematic[data-status=\"ok\"] .pssc-sch-force { stroke: #059669; }\n#pin-shear-calculator .pssc-schematic[data-status=\"ok\"] .pssc-sch-arrow { fill: #059669; }\n#pin-shear-calculator .pssc-schematic[data-status=\"caution\"] .pssc-sch-pin { fill: #b45309; stroke: #92400e; }\n#pin-shear-calculator .pssc-schematic[data-status=\"caution\"] .pssc-sch-force { stroke: #d97706; }\n#pin-shear-calculator .pssc-schematic[data-status=\"caution\"] .pssc-sch-arrow { fill: #d97706; }\n#pin-shear-calculator .pssc-schematic[data-status=\"risk\"] .pssc-sch-pin { fill: #b91c1c; stroke: #7f1d1d; }\n#pin-shear-calculator .pssc-schematic[data-status=\"risk\"] .pssc-sch-force { stroke: #dc2626; }\n#pin-shear-calculator .pssc-schematic[data-status=\"risk\"] .pssc-sch-arrow { fill: #dc2626; }\n\n#pin-shear-calculator .pssc-gauge-row {\n    display: grid !important;\n    grid-template-columns: 150px 1fr !important;\n    gap: 0.75rem !important;\n    align-items: center !important;\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 10px !important;\n    padding: 0.55rem 0.75rem 0.4rem !important;\n    background: #fff !important;\n}\n\n@media (max-width: 520px) {\n    #pin-shear-calculator .pssc-gauge-row { grid-template-columns: 1fr !important; }\n}\n\n#pin-shear-calculator .pssc-gauge-svg { width: 150px !important; height: auto !important; }\n#pin-shear-calculator .pssc-gauge-readout { font-family: var(--pssc-mono) !important; font-size: 1.05rem !important; font-weight: 700 !important; }\n#pin-shear-calculator .pssc-gauge-label { font-size: 0.68rem !important; color: var(--pssc-text-muted) !important; }\n\n#pin-shear-calculator .pssc-util { margin-bottom: 0.85rem !important; }\n\n#pin-shear-calculator .pssc-util-head {\n    display: flex !important;\n    justify-content: space-between !important;\n    gap: 0.5rem !important;\n    font-size: 0.72rem !important;\n    margin-bottom: 0.35rem !important;\n}\n\n#pin-shear-calculator .pssc-util-head strong { font-weight: 700 !important; }\n\n#pin-shear-calculator .pssc-util-track {\n    position: relative !important;\n    height: 14px !important;\n    border-radius: 999px !important;\n    overflow: hidden !important;\n    background: #e2e8f0 !important;\n}\n\n#pin-shear-calculator .pssc-util-zones { display: flex !important; height: 100% !important; width: 100% !important; }\n#pin-shear-calculator .pssc-util-zones span { display: block !important; height: 100% !important; }\n#pin-shear-calculator .pssc-z-ok { width: 85% !important; background: #6ee7b7 !important; }\n#pin-shear-calculator .pssc-z-hi { width: 15% !important; background: #fcd34d !important; }\n\n#pin-shear-calculator .pssc-util-fill {\n    position: absolute !important;\n    left: 0 !important;\n    top: 0 !important;\n    bottom: 0 !important;\n    width: 0 !important;\n    background: linear-gradient(90deg, #0284c7, #0369a1) !important;\n    border-radius: 999px !important;\n    transition: width 0.25s ease !important;\n}\n\n#pin-shear-calculator .pssc-util-fill.pssc-is-ok { background: linear-gradient(90deg, #059669, #047857) !important; }\n#pin-shear-calculator .pssc-util-fill.pssc-is-caution { background: linear-gradient(90deg, #d97706, #b45309) !important; }\n#pin-shear-calculator .pssc-util-fill.pssc-is-risk { background: linear-gradient(90deg, #dc2626, #b91c1c) !important; }\n\n#pin-shear-calculator .pssc-util-legend {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 0.65rem 1rem !important;\n    margin-top: 0.35rem !important;\n    font-size: 0.65rem !important;\n    color: var(--pssc-text-muted) !important;\n}\n\n#pin-shear-calculator .pssc-util-legend i {\n    display: inline-block !important;\n    width: 0.65rem !important;\n    height: 0.65rem !important;\n    border-radius: 2px !important;\n    margin-right: 0.25rem !important;\n    vertical-align: -1px !important;\n    font-style: normal !important;\n}\n\n#pin-shear-calculator .pssc-chart {\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 10px !important;\n    padding: 0.7rem 0.8rem 0.8rem !important;\n    background: #fff !important;\n    margin-bottom: 0.75rem !important;\n}\n\n#pin-shear-calculator .pssc-chart-title {\n    font-size: 0.68rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.06em !important;\n    text-transform: uppercase !important;\n    color: var(--pssc-text-muted) !important;\n    margin-bottom: 0.55rem !important;\n}\n\n#pin-shear-calculator .pssc-bar-row {\n    display: grid !important;\n    grid-template-columns: 8.4rem 1fr auto !important;\n    gap: 0.45rem !important;\n    align-items: center !important;\n    margin-top: 0.4rem !important;\n}\n\n#pin-shear-calculator .pssc-bar-k { font-size: 0.7rem !important; color: #334155 !important; }\n#pin-shear-calculator .pssc-bar-track { height: 10px !important; background: #e2e8f0 !important; border-radius: 999px !important; overflow: hidden !important; }\n#pin-shear-calculator .pssc-bar-fill { height: 100% !important; width: 0 !important; border-radius: 999px !important; background: #0284c7 !important; transition: width 0.25s ease !important; }\n#pin-shear-calculator .pssc-bar-fill.pssc-is-ok { background: #059669 !important; }\n#pin-shear-calculator .pssc-bar-fill.pssc-is-caution { background: #d97706 !important; }\n#pin-shear-calculator .pssc-bar-fill.pssc-is-risk { background: #dc2626 !important; }\n#pin-shear-calculator .pssc-bar-sa { background: #0ea5e9 !important; }\n#pin-shear-calculator .pssc-bar-v { font-family: var(--pssc-mono) !important; font-size: 0.7rem !important; color: var(--pssc-text-muted) !important; min-width: 5.5rem !important; text-align: right !important; }\n\n#pin-shear-calculator .pssc-tiles {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.55rem !important;\n}\n\n@media (min-width: 720px) {\n    #pin-shear-calculator .pssc-tiles { grid-template-columns: repeat(3, 1fr) !important; }\n}\n\n#pin-shear-calculator .pssc-tile {\n    background: linear-gradient(180deg, #fff, #f8fafc) !important;\n    border: 1px solid var(--pssc-border) !important;\n    border-radius: 8px !important;\n    padding: 0.6rem 0.7rem !important;\n}\n\n#pin-shear-calculator .pssc-tile .pssc-k {\n    font-size: 0.62rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.06em !important;\n    text-transform: uppercase !important;\n    color: var(--pssc-text-muted) !important;\n}\n\n#pin-shear-calculator .pssc-tile .pssc-v {\n    font-family: var(--pssc-mono) !important;\n    font-size: 0.98rem !important;\n    font-weight: 700 !important;\n    color: #0f172a !important;\n    margin-top: 0.12rem !important;\n}\n\n#pin-shear-calculator .pssc-tile .pssc-u {\n    font-size: 0.68rem !important;\n    color: var(--pssc-text-muted) !important;\n}\n\n#pin-shear-calculator .pssc-alerts {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 0.4rem !important;\n    margin-top: 0.75rem !important;\n}\n\n#pin-shear-calculator .pssc-alert {\n    border-radius: 8px !important;\n    padding: 0.5rem 0.7rem !important;\n    font-size: 0.75rem !important;\n    border: 1px solid !important;\n    line-height: 1.4 !important;\n}\n\n#pin-shear-calculator .pssc-alert-ok { background: #ecfdf5 !important; border-color: #a7f3d0 !important; color: #065f46 !important; }\n#pin-shear-calculator .pssc-alert-warn { background: #fffbeb !important; border-color: #fcd34d !important; color: #92400e !important; }\n#pin-shear-calculator .pssc-alert-risk { background: #fef2f2 !important; border-color: #fca5a5 !important; color: #991b1b !important; }\n\n@media print {\n    #pin-shear-calculator { max-width: none !important; padding: 0 !important; }\n    #pin-shear-calculator .pssc-no-print { display: none !important; }\n    #pin-shear-calculator .pssc-card { break-inside: avoid !important; box-shadow: none !important; }\n}\n\n<\/style>\n\n<div id=\"pin-shear-calculator\"><div class=\"pssc-js-store\" aria-hidden=\"true\" hidden><span class=\"pssc-js-chunk\">KGZ1bmN0aW9uICgpIHsNCiAgInVzZSBzdHJpY3QiOw0KDQogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBpbi1zaGVhci1jYWxjdWxhdG9yIik7DQogIGlmICghcm9vdCB8fCByb290LmdldEF0dHJpYnV0ZSgiZGF0YS1wc3NjLXJlYWR5IikgPT09ICIxIikgcmV0dXJuOw0KICByb290LnNldEF0dHJpYnV0ZSgiZGF0YS1wc3NjLXJlYWR5IiwgIjEiKTsNCg0KICB2YXIgQVJDX0xFTiA9IDI4Mi43NDM7DQogIHZhciBNTV9QRVJfSU4gPSAyNS40Ow0KICB2YXIgTU0yX1BFUl9JTjIgPSA2NDUuMTY7DQogIHZhciBQU0lfUEVSX01QQSA9IDE0NS4wMzc3Mzc3MzsNCiAgdmFyIExCRl9QRVJfTiA9IDAuMjI0ODA4OTQzOw0KDQogIHZhciBQSU5fU0laRVMgPSBbNiwgOCwgMTAsIDEyLCAxNiwgMjAsIDI1LCAzMCwgNDAsIDUwXTsNCg0KICB2YXIgTUFURVJJQUxTID0gew0KICAgIGNhcmJvbjogeyBzeTogMjUwLCBzdXQ6IDQwMCwgdGF1OiAyNDAsIGxhYmVsOiAiQ2FyYm9uIFN0ZWVsIiB9LA0KICAgIGFsbG95OiB7IHN5OiAzNjAsIHN1dDogNjAwLCB0YXU6IDM2MCwgbGFiZWw6ICJBbGxveSBTdGVlbCIgfSwNCiAgICBzdGFpbmxlc3M6IHsgc3k6IDIwNSwgc3V0OiA1MTUsIHRhdTogMzEwLCBsYWJlbDogIlN0YWlubGVzcyBTdGVlbCIgfSwNCiAgICBoYXJkZW5lZDogeyBzeTogODAwLCBzdXQ6IDEwMDAsIHRhdTogNjAwLCBsYWJlbDogIkhhcmRlbmVkIFN0ZWVsIiB9LA0KICAgIGFsdW1pbnVtOiB7IHN5OiAyNzUsIHN1dDogMzEwLCB0YXU6IDE2NSwgbGFiZWw6ICJBbHVtaW51bSBBbGxveSIgfSwNCiAgICBicm9uemU6IHsgc3k6IDE1MCwgc3V0OiAzMDAsIHRhdTogMTgwLCBsYWJlbDogIkJyb256ZSIgfSwNCiAgICBjdXN0b206IG51bGwNCiAgfTsNCg0KICB2YXIgREVGQVVMVFMgPSB7DQogICAgdW5pdDogIm1ldHJpYyIsDQogICAgbW9kZTogInN0cmVzcyIsDQogICAgcGluVHlwZTogImNsZXZpcyIsDQogICAgc2hlYXI6ICJkb3VibGUiLA0KICAgIGQ6IDIwLA0KICAgIEY6IDUwLA0KICAgIGZVbml0OiAia04iLA0KICAgIG1hdGVyaWFsOiAiYWxsb3kiLA0KICAgIHN5OiAzNjAsDQogICAgc3V0OiA2MDAsDQogICAgdGF1OiAzNjAsDQogICAgdGF1U291cmNlOiAibWFudWFsIiwNCiAgICBrOiAwLjYsDQogICAgbnNmOiAyLA0KICAgIG5waW5zOiAxLA0KICAgIHNoYXJlOiAxLA0KICAgIGJlYXJpbmc6IGZhbHNlLA0KICAgIHRoaWNrbmVzczogMTIsDQogICAgZ2FwOiAwDQogIH07DQoNCiAgdmFyIGVsID0gew0KICAgIG1vZGU6IGJ5SWQoInBzc2NNb2RlIiksDQogICAgcGluVHlwZTogYnlJZCgicHNzY1BpblR5cGUiKSwNCiAgICBzaGVhcjogYnlJZCgicHNzY1NoZWFyIiksDQogICAgZDogYnlJZCgicHNzY0QiKSwNCiAgICBkV3JhcDogYnlJZCgicHNzY0RXcmFwIiksDQogICAgRjogYnlJZCgicHNzY0YiKSwNCiAgICBmV3JhcDogYnlJZCgicHNzY0ZXcmFwIiksDQogICAgZlVuaXQ6IGJ5SWQoInBzc2NGVW5pdCIpLA0KICAgIG1hdGVyaWFsOiBieUlkKCJwc3NjTWF0ZXJpYWwiKSwNCiAgICBzeTogYnlJZCgicHNzY1N5IiksDQogICAgc3V0OiBieUlkKCJwc3NjU3V0IiksDQogICAgc3V0V3JhcDogYnlJZCgicHNzY1N1dFdyYXAiKSwNCiAgICB0YXU6IGJ5SWQoInBzc2NUYXUiKSwNCiAgICB0YXVTb3VyY2U6IGJ5SWQoInBzc2NUYXVTb3VyY2UiKSwNCiAgICBrOiBieUlkKCJwc3NjSyIpLA0KICAgIGtXcmFwOiBieUlkKCJwc3NjS1dyYXAiKSwNCiAgICBuc2Y6IGJ5SWQoInBzc2NOc2YiKSwNCiAgICBucGluczogYnlJZCgicHNzY05waW5zIiksDQogICAgc2hhcmU6IGJ5SWQoInBzc2NTaGFyZSIpLA0KICAgIGJlYXJpbmc6IGJ5SWQoInBzc2NCZWFyaW5nIiksDQogICAgYmVhcmluZ0ZpZWxkczogYnlJZCgicHNzY0JlYXJpbmdGaWVsZHMiKSwNCiAgICB0aGlja25lc3M6IGJ5SWQoInBzc2NUaGlja25lc3MiKSwNCiAgICBnYXA6IGJ5SWQoInBzc2NHYXAiKSwNCiAgICBnYXBXcmFwOiBieUlkKCJwc3NjR2FwV3JhcCIpLA0KICAgIGJ0bk1ldHJpYzogYnlJZCgicHNzY0J0bk1ldHJpYyIpLA0KICAgIGJ0bkltcGVyaWFsOiBieUlkKCJwc3NjQnRuSW1wZXJpYWwiKSwNCiAgICBidG5DYWxjOiBieUlkKCJwc3NjQnRuQ2FsY3VsYXRlIiksDQogICAgcmVzdWx0czogYnlJZCgicHNzY1Jlc3VsdHMiKSwNCiAgICBzaXplQ2hpcHM6IGJ5SWQoInBzc2NTaXplQ2hpcHMiKSwNCiAgICBtb2RlTm90ZTogYnlJZCgicHNzY01vZGVOb3RlIiksDQogICAgYmFubmVyOiBieUlkKCJwc3NjQmFubmVyIiksDQogICAgc3RhdHVzVGl0bGU6IGJ5SWQoInBzc2NTdGF0dXNUaXRsZSIpLA0KICAgIHN0YXR1c05vdGU6IGJ5SWQoInBzc2NTdGF0dXNOb3RlIiksDQogICAgaGVyb1N0cmVzczogYnlJZCgicHNzY0hlcm9TdHJlc3MiKSwNCiAgICBoZXJvRmFsbG93OiBieUlkKCJwc3NjSGVyb0ZhbGxvdyIpLA0KICAgIGhlcm9EcmVxOiBieUlkKCJwc3NjSGVyb0RyZXEiKSwNCiAgICBoZXJvU2Y6IGJ5SWQoInBzc2NIZXJvU2YiKSwNCiAgICBvdXRTdHJlc3M6IGJ5SWQoInBzc2NPdXRTdHJlc3MiKSwNCiAgICBvdXRTdHJlc3NTdWI6IGJ5SWQoInBzc2NPdXRTdHJlc3NTdWIiKSwNCiAgICBvdXRGYWxsb3c6IGJ5SWQoInBzc2NPdXRGYWxsb3ciKSwNCiAgICBvdXRGYWxsb3dTdWI6IGJ5SWQoInBzc2NPdXRGYWxsb3dTdWIiKSwNCiAgICBvdXREcmVxOiBieUlkKCJwc3NjT3V0RHJlcSIpLA0KICAgIG91dERyZXFTdWI6IGJ5SWQoInBzc2NPdXREcmVxU3ViIiksDQogICAgb3V0U2Y6IGJ5SWQoInBzc2NPdXRTZiIpLA0KICAgIG91dFNmU3ViOiBieUlkKCJwc3NjT3V0U2ZTdWIiKSwNCiAgICBvdXRVdGlsOiBieUlkKCJwc3NjT3V0VXRpbCIpLA0KICAgIHV0aWxGaWxsOiBieUlkKCJwc3NjVXRpbEZpbGwiKSwNCiAgICBvdXRBcmVhOiBieUlkKCJwc3NjT3V0QXJlYSIpLA0KICAgIG91dEFlZmY6IGJ5SWQoInBzc2NPdXRBZWZmIiksDQogICAgb3V0VGF1QWxsb3c6IGJ5SWQoInBzc2NPdXRUYXVBbGxvdyIpLA0KICAgIG91dEZwaW46IGJ5SWQoInBzc2NPdXRGcGluIiksDQogICAgb3V0RnBpbk5vdGU6IGJ5SWQoInBzc2NPdXRGcGluTm90ZSIpLA0KICAgIG91dEJlYXJpbmc6IGJ5SWQoInBzc2NPdXRCZWFyaW5nIiksDQogICAgb3V0QmVhcmluZ05vdGU6IGJ5SWQoInBzc2NPdXRCZWFyaW5nTm90ZSIpLA0KICAgIG91dEdvdmVybmluZzogYnlJZCgicHNzY091dEdvdmVybmluZyIpLA0KICAgIGdhdWdlQXJjOiBieUlkKCJwc3NjR2F1Z2VBcmMiKSwNCiAgICBuZWVkbGU6IGJ5SWQoInBzc2NOZWVkbGUiKSwNCiAgICBnYXVnZVJlYWQ6IGJ5SWQoInBzc2NHYXVnZVJlYWQiKSwNCiAgICBnYXVnZU5vdGU6IGJ5SWQoInBzc2NHYXVnZU5vdGUiKSwNCiAgICBzY2hlbWF0aWM6IGJ5SWQoInBzc2NTY2hlbWF0aWMiKSwNCiAgICBzY2hGb3JjZTogYnlJZCgicHNzY1NjaEZvcmNlIiksDQogICAgc2NoQ2FwdGlvbjogYnlJZCgicHNzY1NjaENhcHRpb24iKSwNCiAgICBiYXJUYXU6IGJ5SWQoInBzc2NCYXJUYXUiKSwNCiAgICBiYXJUYTogYnlJZCgicHNzY0JhclRhIiksDQogICAgYmFyVGF1VmFsOiBieUlkKCJwc3NjQmFyVGF1VmFsIiksDQogICAgYmFyVGFWYWw6IGJ5SWQoInBzc2NCYXJUYVZhbCIpLA0KICAgIGFsZXJ0czogYnlJZCgicHNzY0FsZXJ0cyIpDQogIH07DQoNCiAgdmFyIHN0YXRlID0gew0KICAgIHVuaXQ6ICJtZXRyaWMiLA0KICAgIGxpdmU6IGZhbHNlLA0KICAgIGFwcGx5aW5nOiBmYWxzZQ0KICB9Ow0KICB2YXIgbGFzdEZVbml0ID0gZWwuZlVuaXQgPyBlbC5mVW5pdC52YWx1ZSA6ICJrTiI7DQoNCiAgZnVuY3Rpb24gYnlJZChpZCkgeyByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCIjIiArIGlkKTsgfQ0KDQogIGZ1bmN0aW9uIG51bShub2RlKSB7DQogICAgaWYgKCFub2RlKSByZXR1cm4gTmFOOw0KICAgIHZhciB2ID0gcGFyc2VGbG9hdChTdHJpbmcobm9kZS52YWx1ZSkucmVwbGFjZSgiLCIsICIuIikpOw0KICAgIHJldHVybiBpc0Zpbml0ZSh2KSA\/IHYgOiBOYU47DQogIH0NCg0KICBmdW5jdGlvbiBjbGFtcCh2LCBhLCBiKSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB2KSk7IH0NCg0KICBmdW5jdGlvbiByb3VuZFNtYXJ0KHYpIHsNCiAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gIiI7DQogICAgdmFyIGEgPSBNYXRoLmFicyh2KTsNCiAgICB2YXIgZCA9IGEgPj0gMTAwID8gMiA6IGEgPj0gMTAgPyAzIDogYSA+PSAxID8gNCA6IDU7DQogICAgcmV0dXJuIFN0cmluZyhOdW1iZXIodi50b0ZpeGVkKGQpKSk7DQogIH0NCg0KICBmdW5jdGlvbiBmbXQodiwgZCkgew0KICAgIGlmICghaXNGaW5pdGUodikpIHJldHVybiAiLSI7DQogICAgcmV0dXJuIHYudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQsIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGVtcHR5KG5vZGUpIHsNCiAgICByZXR1cm4gIW5v<\/span><span class=\"pssc-js-chunk\">ZGUgfHwgU3RyaW5nKG5vZGUudmFsdWUpLnRyaW0oKSA9PT0gIiI7DQogIH0NCg0KICBmdW5jdGlvbiBzZXRFcnIoa2V5LCBtc2cpIHsNCiAgICB2YXIgbm9kZSA9IGJ5SWQoInBzc2NFcnIiICsga2V5KTsNCiAgICB2YXIgbWFwID0gew0KICAgICAgRDogZWwuZCwgRjogZWwuRiwgU3k6IGVsLnN5LCBTdXQ6IGVsLnN1dCwgVGF1OiBlbC50YXUsIEs6IGVsLmssDQogICAgICBOc2Y6IGVsLm5zZiwgTnBpbnM6IGVsLm5waW5zLCBTaGFyZTogZWwuc2hhcmUsIFQ6IGVsLnRoaWNrbmVzcywgR2FwOiBlbC5nYXANCiAgICB9Ow0KICAgIHZhciBpbnB1dCA9IG1hcFtrZXldOw0KICAgIGlmIChub2RlKSBub2RlLnRleHRDb250ZW50ID0gbXNnIHx8ICIiOw0KICAgIGlmIChpbnB1dCkgew0KICAgICAgaWYgKG1zZykgaW5wdXQuY2xhc3NMaXN0LmFkZCgicHNzYy1pbnZhbGlkIik7DQogICAgICBlbHNlIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoInBzc2MtaW52YWxpZCIpOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGNsZWFyRXJycygpIHsNCiAgICBbIkQiLCAiRiIsICJTeSIsICJTdXQiLCAiVGF1IiwgIksiLCAiTnNmIiwgIk5waW5zIiwgIlNoYXJlIiwgIlQiLCAiR2FwIl0uZm9yRWFjaChmdW5jdGlvbiAoaykgew0KICAgICAgc2V0RXJyKGssICIiKTsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgdmFyIG1ldHJpYyA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiOw0KICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0nZCddIikuZm9yRWFjaChmdW5jdGlvbiAobikgew0KICAgICAgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiaW4iOw0KICAgIH0pOw0KICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0ndCddIikuZm9yRWFjaChmdW5jdGlvbiAobikgew0KICAgICAgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiaW4iOw0KICAgIH0pOw0KICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0nYSddIikuZm9yRWFjaChmdW5jdGlvbiAobikgew0KICAgICAgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbVx1MDBiMiIgOiAiaW5cdTAwYjIiOw0KICAgIH0pOw0KICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0ncyddIikuZm9yRWFjaChmdW5jdGlvbiAobikgew0KICAgICAgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJNUGEiIDogInBzaSI7DQogICAgfSk7DQogICAgaWYgKGVsLmJ0bk1ldHJpYykgZWwuYnRuTWV0cmljLmNsYXNzTGlzdC50b2dnbGUoInBzc2MtaXMtYWN0aXZlIiwgbWV0cmljKTsNCiAgICBpZiAoZWwuYnRuSW1wZXJpYWwpIGVsLmJ0bkltcGVyaWFsLmNsYXNzTGlzdC50b2dnbGUoInBzc2MtaXMtYWN0aXZlIiwgIW1ldHJpYyk7DQogIH0NCg0KICBmdW5jdGlvbiBwaW5BcmVhTW0yKGREaXNwKSB7DQogICAgaWYgKCEoZERpc3AgPiAwKSkgcmV0dXJuIE5hTjsNCiAgICB2YXIgZG1tID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIgPyBkRGlzcCA6IGREaXNwICogTU1fUEVSX0lOOw0KICAgIHJldHVybiBNYXRoLlBJIC8gNCAqIGRtbSAqIGRtbTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHJlZnJlc2hBcmVhUHJldmlldygpIHsNCiAgICB2YXIgZCA9IG51bShlbC5kKTsNCiAgICBpZiAoIWVsLmQgfHwgZWwubW9kZS52YWx1ZSA9PT0gImRpYW1ldGVyIikgcmV0dXJuOw0KICAgIHZhciBBID0gcGluQXJlYU1tMihkKTsNCiAgICBpZiAoIWlzRmluaXRlKEEpIHx8ICEoQSA+IDApKSByZXR1cm47DQogIH0NCg0KICBmdW5jdGlvbiByZW5kZXJTaXplQ2hpcHMoKSB7DQogICAgaWYgKCFlbC5zaXplQ2hpcHMpIHJldHVybjsNCiAgICBlbC5zaXplQ2hpcHMuaW5uZXJIVE1MID0gIiI7DQogICAgUElOX1NJWkVTLmZvckVhY2goZnVuY3Rpb24gKHN6KSB7DQogICAgICB2YXIgZGlzcCA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiID8gc3ogOiBzeiAvIE1NX1BFUl9JTjsNCiAgICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsNCiAgICAgIGJ0bi50eXBlID0gImJ1dHRvbiI7DQogICAgICBidG4uY2xhc3NOYW1lID0gInBzc2MtY2hpcCI7DQogICAgICBidG4udGV4dENvbnRlbnQgPSBzdGF0ZS51bml0ID09PSAibWV0cmljIiA\/IHN6ICsgIiBtbSIgOiByb3VuZFNtYXJ0KGRpc3ApICsgIiBpbiI7DQogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIHN0YXRlLmFwcGx5aW5nID0gdHJ1ZTsNCiAgICAgICAgZWwuZC52YWx1ZSA9IHJvdW5kU21hcnQoZGlzcCk7DQogICAgICAgIHN0YXRlLmFwcGx5aW5nID0gZmFsc2U7DQogICAgICAgIHBhaW50Q2hpcHMoYnRuKTsNCiAgICAgICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7DQogICAgICB9KTsNCiAgICAgIGVsLnNpemVDaGlwcy5hcHBlbmRDaGlsZChidG4pOw0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gcGFpbnRDaGlwcyhhY3RpdmVCdG4pIHsNCiAgICBpZiAoIWVsLnNpemVDaGlwcykgcmV0dXJuOw0KICAgIGVsLnNpemVDaGlwcy5xdWVyeVNlbGVjdG9yQWxsKCIucHNzYy1jaGlwIikuZm9yRWFjaChmdW5jdGlvbiAoYnRuKSB7DQogICAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgicHNzYy1pcy1hY3RpdmUiLCBidG4gPT09IGFjdGl2ZUJ0bik7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBhcHBseU1hdGVyaWFsKCkgew0KICAgIHZhciBtID0gTUFURVJJQUxTW2VsLm1hdGVyaWFsLnZhbHVlXTsNCiAgICBpZiAoIW0pIHsNCiAgICAgIGVsLnN5LnJlYWRPbmx5ID0gZmFsc2U7DQogICAgICBpZiAoZWwuc3V0KSBlbC5zdXQucmVhZE9ubHkgPSBmYWxzZTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgc3RhdGUuYXBwbHlpbmcgPSB0cnVlOw0KICAgIHZhciBtZXRyaWMgPSBzdGF0ZS51bml0ID09PSAibWV0cmljIjsNCiAgICBlbC5zeS52YWx1ZSA9IG1ldHJpYyA\/IFN0cmluZyhtLnN5KSA6IHJvdW5kU21hcnQobS5zeSAqIFBTSV9QRVJfTVBBKTsNCiAgICBpZiAoZWwuc3V0KSB7DQogICAgICBlbC5zdXQudmFsdWUgPSBtZXRyaWMgPyBTdHJpbmcobS5zdXQpIDogcm91bmRTbWFydChtLnN1dCAqIFBTSV9QRVJfTVBBKTsNCiAgICAgIGVsLnN1dC5yZWFkT25seSA9IHRydWU7DQogICAgfQ0KICAgIGVsLnN5LnJlYWRPbmx5ID0gdHJ1ZTsNCiAgICBpZiAoZWwudGF1U291cmNlLnZhbHVlID09PSAiZXN0aW1hdGUiKSB1cGRhdGVUYXVGcm9tRXN0aW1hdGUoKTsNCiAgICBlbHNlIGlmIChlbC50YXVTb3VyY2UudmFsdWUgPT09ICJtYW51YWwiKSB7DQogICAgICBlbC50YXUudmFsdWUgPSBtZXRyaWMgPyBTdHJpbmcobS50YXUpIDogcm91bmRTbWFydChtLnRhdSAqIFBTSV9QRVJfTVBBKTsNCiAgICB9DQogICAgc3RhdGUuYXBwbHlpbmcgPSBmYWxzZTsNCiAgfQ0KDQogIGZ1bmN0aW9uIG1hcmtDdXN0b21NYXRlcmlhbCgpIHsNCiAgICBpZiAoc3RhdGUuYXBwbHlpbmcpIHJldHVybjsNCiAgICBpZiAoZWwubWF0ZXJpYWwudmFsdWUgIT09ICJjdXN0b20iKSBlbC5tYXRlcmlhbC52YWx1ZSA9ICJjdXN0b20iOw0KICAgIGVsLnN5LnJlYWRPbmx5ID0gZmFsc2U7DQogICAgaWYgKGVsLnN1dCkgZWwuc3V0LnJlYWRPbmx5ID0gZmFsc2U7DQogIH0NCg0KICBmdW5jdGlvbiB1cGRhdGVUYXVGcm9tRXN0aW1hdGUoKSB7DQogICAgaWYgKGVsLnRhdVNvdXJjZS52YWx1ZSAhPT0gImVzdGltYXRlIikgcmV0dXJuOw0KICAgIHZhciBzdXQgPSBudW0oZWwuc3V0KTsNCiAgICB2YXIgayA9IG51bShlbC5rKTsNCiAgICBpZiAoIShzdXQgPiAwKSB8fCAhKGsgPiAwKSkgcmV0dXJuOw0KICAgIHZhciBtZXRyaWMgPSBzdGF0ZS51bml0ID09PSAibWV0cmljIjsNCiAgICB2YXIgdGF1TVBhID0gbWV0cmljID8gc3V0ICogayA6IChzdXQgLyBQU0lfUEVSX01QQSkgKiBrOw0KICAgIGVsLnRhdS52YWx1ZSA9IG1ldHJpYyA\/IHJvdW5kU21hcnQodGF1TVBhKSA6IHJvdW5kU21hcnQodGF1TVBhICogUFNJX1BFUl9NUEEpOw0KICAgIGVsLnRhdS5yZWFkT25seSA9IHRydWU7DQogIH0NCg0KICBmdW5jdGlvbiBvblRhdVNvdXJjZUNoYW5nZSgpIHsNCiAgICB2YXIgc3JjID0gZWwudGF1U291cmNlLnZhbHVlOw0KICAgIGlmIChzcmMgPT09ICJtYW51YWwiKSB7DQogICAgICBlbC50YXUucmVhZE9ubHkgPSBmYWxzZTsNCiAgICAgIGlmIChlbC5rV3JhcCkgZWwua1dyYXAuY2xhc3NMaXN0LmFkZCgicHNzYy1oaWRkZW4iKTsNCiAgICAgIGlmIChlbC5zdXRXcmFwKSBlbC5zdXRXcmFwLmNsYXNzTGlzdC5hZGQoInBzc2MtaGlkZGVuIik7DQogICAgfSBlbHNlIHsNCiAgICAgIGVsLnRhdS5yZWFkT25seSA9IHRydWU7DQogICAgICBpZiAoZWwua1dyYXApIGVsLmtXcmFwLmNsYXNzTGlzdC5yZW1vdmUoInBzc2MtaGlkZGVuIik7DQogICAgICBpZiAoZWwuc3V0V3JhcCkgZWwuc3V0V3JhcC5jbGFzc0xpc3QucmVtb3ZlKCJwc3NjLWhp<\/span><span class=\"pssc-js-chunk\">ZGRlbiIpOw0KICAgICAgdXBkYXRlVGF1RnJvbUVzdGltYXRlKCk7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gZm9yY2VUb04oKSB7DQogICAgdmFyIHYgPSBudW0oZWwuRik7DQogICAgaWYgKCFpc0Zpbml0ZSh2KSkgcmV0dXJuIE5hTjsNCiAgICB2YXIgdSA9IGVsLmZVbml0LnZhbHVlOw0KICAgIGlmICh1ID09PSAia04iKSByZXR1cm4gdiAqIDEwMDA7DQogICAgaWYgKHUgPT09ICJsYmYiKSByZXR1cm4gdiAvIExCRl9QRVJfTjsNCiAgICByZXR1cm4gdjsNCiAgfQ0KDQogIGZ1bmN0aW9uIGNvbnZlcnRGb3JjZVVuaXRWYWx1ZSh2YWx1ZSwgZnJvbVUsIHRvVSkgew0KICAgIGlmICghaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gdmFsdWU7DQogICAgdmFyIG4gPSB2YWx1ZTsNCiAgICBpZiAoZnJvbVUgPT09ICJrTiIpIG4gKj0gMTAwMDsNCiAgICBpZiAoZnJvbVUgPT09ICJsYmYiKSBuIC89IExCRl9QRVJfTjsNCiAgICBpZiAodG9VID09PSAia04iKSByZXR1cm4gbiAvIDEwMDA7DQogICAgaWYgKHRvVSA9PT0gImxiZiIpIHJldHVybiBuICogTEJGX1BFUl9OOw0KICAgIHJldHVybiBuOw0KICB9DQoNCiAgZnVuY3Rpb24gZm9ybWF0Rm9yY2UoTikgew0KICAgIGlmICghaXNGaW5pdGUoTikpIHJldHVybiB7IHByaW1hcnk6ICItIiwgc2Vjb25kYXJ5OiAiIiB9Ow0KICAgIGlmIChzdGF0ZS51bml0ID09PSAiaW1wZXJpYWwiKSB7DQogICAgICByZXR1cm4gew0KICAgICAgICBwcmltYXJ5OiBmbXQoTiAqIExCRl9QRVJfTiwgMSkgKyAiIGxiZiIsDQogICAgICAgIHNlY29uZGFyeTogZm10KE4gLyAxMDAwLCAyKSArICIga04gIC8gICIgKyBmbXQoTiwgMCkgKyAiIE4iDQogICAgICB9Ow0KICAgIH0NCiAgICBpZiAoTWF0aC5hYnMoTikgPj0gMTAwMCkgew0KICAgICAgcmV0dXJuIHsNCiAgICAgICAgcHJpbWFyeTogZm10KE4gLyAxMDAwLCAyKSArICIga04iLA0KICAgICAgICBzZWNvbmRhcnk6IGZtdChOLCAwKSArICIgTiAgLyAgIiArIGZtdChOICogTEJGX1BFUl9OLCAxKSArICIgbGJmIg0KICAgICAgfTsNCiAgICB9DQogICAgcmV0dXJuIHsNCiAgICAgIHByaW1hcnk6IGZtdChOLCAxKSArICIgTiIsDQogICAgICBzZWNvbmRhcnk6IGZtdChOICogTEJGX1BFUl9OLCAxKSArICIgbGJmIg0KICAgIH07DQogIH0NCg0KICBmdW5jdGlvbiBmb3JtYXRTdHJlc3MoTVBhKSB7DQogICAgaWYgKCFpc0Zpbml0ZShNUGEpKSByZXR1cm4geyBwcmltYXJ5OiAiLSIsIHNlY29uZGFyeTogIiIgfTsNCiAgICBpZiAoc3RhdGUudW5pdCA9PT0gImltcGVyaWFsIikgew0KICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE1QYSAqIFBTSV9QRVJfTVBBLCAwKSArICIgcHNpIiwgc2Vjb25kYXJ5OiBmbXQoTVBhLCAxKSArICIgTVBhIiB9Ow0KICAgIH0NCiAgICByZXR1cm4geyBwcmltYXJ5OiBmbXQoTVBhLCAxKSArICIgTVBhIiwgc2Vjb25kYXJ5OiBmbXQoTVBhICogUFNJX1BFUl9NUEEsIDApICsgIiBwc2kiIH07DQogIH0NCg0KICBmdW5jdGlvbiBmb3JtYXRBcmVhKG1tMikgew0KICAgIGlmICghaXNGaW5pdGUobW0yKSkgcmV0dXJuICItIjsNCiAgICBpZiAoc3RhdGUudW5pdCA9PT0gImltcGVyaWFsIikgcmV0dXJuIGZtdChtbTIgLyBNTTJfUEVSX0lOMiwgNCkgKyAiIGluXHUwMGIyIjsNCiAgICByZXR1cm4gZm10KG1tMiwgMSkgKyAiIG1tXHUwMGIyIjsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZvcm1hdExlbmd0aChtbSkgew0KICAgIGlmICghaXNGaW5pdGUobW0pKSByZXR1cm4gIi0iOw0KICAgIGlmIChzdGF0ZS51bml0ID09PSAiaW1wZXJpYWwiKSByZXR1cm4gZm10KG1tIC8gTU1fUEVSX0lOLCAzKSArICIgaW4iOw0KICAgIHJldHVybiBmbXQobW0sIDIpICsgIiBtbSI7DQogIH0NCg0KICBmdW5jdGlvbiBzd2l0Y2hVbml0KG5leHQpIHsNCiAgICBpZiAobmV4dCA9PT0gc3RhdGUudW5pdCkgcmV0dXJuOw0KICAgIHZhciBkID0gbnVtKGVsLmQpOw0KICAgIHZhciBzeSA9IG51bShlbC5zeSk7DQogICAgdmFyIHN1dCA9IG51bShlbC5zdXQpOw0KICAgIHZhciB0YXUgPSBudW0oZWwudGF1KTsNCiAgICB2YXIgdCA9IG51bShlbC50aGlja25lc3MpOw0KICAgIHZhciBnYXAgPSBudW0oZWwuZ2FwKTsNCiAgICB2YXIgRiA9IG51bShlbC5GKTsNCiAgICB2YXIgZnJvbUZVID0gZWwuZlVuaXQudmFsdWU7DQogICAgdmFyIHRvRlUgPSBuZXh0ID09PSAiaW1wZXJpYWwiID8gImxiZiIgOiAiTiI7DQoNCiAgICBpZiAobmV4dCA9PT0gImltcGVyaWFsIikgew0KICAgICAgaWYgKGlzRmluaXRlKGQpKSBlbC5kLnZhbHVlID0gcm91bmRTbWFydChkIC8gTU1fUEVSX0lOKTsNCiAgICAgIGlmIChpc0Zpbml0ZShzeSkpIGVsLnN5LnZhbHVlID0gcm91bmRTbWFydChzeSAqIFBTSV9QRVJfTVBBKTsNCiAgICAgIGlmIChpc0Zpbml0ZShzdXQpKSBlbC5zdXQudmFsdWUgPSByb3VuZFNtYXJ0KHN1dCAqIFBTSV9QRVJfTVBBKTsNCiAgICAgIGlmIChpc0Zpbml0ZSh0YXUpKSBlbC50YXUudmFsdWUgPSByb3VuZFNtYXJ0KHRhdSAqIFBTSV9QRVJfTVBBKTsNCiAgICAgIGlmIChpc0Zpbml0ZSh0KSkgZWwudGhpY2tuZXNzLnZhbHVlID0gcm91bmRTbWFydCh0IC8gTU1fUEVSX0lOKTsNCiAgICAgIGlmIChpc0Zpbml0ZShnYXApKSBlbC5nYXAudmFsdWUgPSByb3VuZFNtYXJ0KGdhcCAvIE1NX1BFUl9JTik7DQogICAgfSBlbHNlIHsNCiAgICAgIGlmIChpc0Zpbml0ZShkKSkgZWwuZC52YWx1ZSA9IHJvdW5kU21hcnQoZCAqIE1NX1BFUl9JTik7DQogICAgICBpZiAoaXNGaW5pdGUoc3kpKSBlbC5zeS52YWx1ZSA9IHJvdW5kU21hcnQoc3kgLyBQU0lfUEVSX01QQSk7DQogICAgICBpZiAoaXNGaW5pdGUoc3V0KSkgZWwuc3V0LnZhbHVlID0gcm91bmRTbWFydChzdXQgLyBQU0lfUEVSX01QQSk7DQogICAgICBpZiAoaXNGaW5pdGUodGF1KSkgZWwudGF1LnZhbHVlID0gcm91bmRTbWFydCh0YXUgLyBQU0lfUEVSX01QQSk7DQogICAgICBpZiAoaXNGaW5pdGUodCkpIGVsLnRoaWNrbmVzcy52YWx1ZSA9IHJvdW5kU21hcnQodCAqIE1NX1BFUl9JTik7DQogICAgICBpZiAoaXNGaW5pdGUoZ2FwKSkgZWwuZ2FwLnZhbHVlID0gcm91bmRTbWFydChnYXAgKiBNTV9QRVJfSU4pOw0KICAgIH0NCg0KICAgIGVsLmZVbml0LnZhbHVlID0gdG9GVTsNCiAgICBsYXN0RlVuaXQgPSB0b0ZVOw0KICAgIGlmIChpc0Zpbml0ZShGKSkgZWwuRi52YWx1ZSA9IHJvdW5kU21hcnQoY29udmVydEZvcmNlVW5pdFZhbHVlKEYsIGZyb21GVSwgdG9GVSkpOw0KICAgIHN0YXRlLnVuaXQgPSBuZXh0Ow0KICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICByZW5kZXJTaXplQ2hpcHMoKTsNCiAgICBpZiAoc3RhdGUubGl2ZSkgY2FsY3VsYXRlKGZhbHNlKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHVwZGF0ZU1vZGVVSSgpIHsNCiAgICB2YXIgbW9kZSA9IGVsLm1vZGUudmFsdWU7DQogICAgaWYgKGVsLmRXcmFwKSBlbC5kV3JhcC5jbGFzc0xpc3QudG9nZ2xlKCJwc3NjLWhpZGRlbiIsIG1vZGUgPT09ICJkaWFtZXRlciIpOw0KICAgIGlmIChlbC5mV3JhcCkgZWwuZldyYXAuY2xhc3NMaXN0LnRvZ2dsZSgicHNzYy1oaWRkZW4iLCBtb2RlID09PSAiY2FwYWNpdHkiKTsNCiAgICBpZiAoZWwuc2l6ZUNoaXBzICYmIGVsLnNpemVDaGlwcy5wYXJlbnRFbGVtZW50KSB7DQogICAgICBlbC5zaXplQ2hpcHMucGFyZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJwc3NjLWhpZGRlbiIsIG1vZGUgPT09ICJkaWFtZXRlciIpOw0KICAgIH0NCg0KICAgIGlmIChlbC5tb2RlTm90ZSkgew0KICAgICAgaWYgKG1vZGUgPT09ICJzdHJlc3MiKSB7DQogICAgICAgIGVsLm1vZGVOb3RlLnRleHRDb250ZW50ID0gIlNoZWFyIFN0cmVzcyBDaGVjazogZXZhbHVhdGUgd2hldGhlciB0aGUgc2VsZWN0ZWQgcGluIGRpYW1ldGVyIGNhbiBjYXJyeSB0aGUgYXBwbGllZCB0cmFuc3ZlcnNlIGxvYWQgd2l0aG91dCBleGNlZWRpbmcgYWxsb3dhYmxlIHNoZWFyIHN0cmVzcy4iOw0KICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAiY2FwYWNpdHkiKSB7DQogICAgICAgIGVsLm1vZGVOb3RlLnRleHRDb250ZW50ID0gIkFsbG93YWJsZSBMb2FkOiBjb21wdXRlIG1heGltdW0gYWxsb3dhYmxlIHNoZWFyIGxvYWQgZm9yIHRoZSBnaXZlbiBwaW4gZGlhbWV0ZXIsIG1hdGVyaWFsLCBhbmQgc2FmZXR5IGZhY3Rvci4iOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgZWwubW9kZU5vdGUudGV4dENvbnRlbnQgPSAiUmVxdWlyZWQgUGluIERpYW1ldGVyOiBjYWxjdWxhdGUgdGhlIG1pbmltdW0gcGluIGRpYW1ldGVyIG5lZWRlZCBmb3IgdGhlIGFwcGxpZWQgbG9hZCBhbmQgbWF0ZXJpYWwgc3RyZW5ndGguIjsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoZWwuaGVyb1N0cmVzcykgZWwuaGVyb1N0cmVzcy5jbGFzc0xpc3QudG9nZ2xlKCJwc3NjLWlzLWZvY3VzIiwgbW9kZSA9PT0gInN0cmVzcyIpOw0KICAgIGlmIChlbC5oZXJvRmFsbG93KSBlbC5oZXJvRmFsbG93LmNsYXNzTGlzdC50b2dnbGUoInBzc2Mt<\/span><span class=\"pssc-js-chunk\">aXMtZm9jdXMiLCBtb2RlID09PSAiY2FwYWNpdHkiKTsNCiAgICBpZiAoZWwuaGVyb0RyZXEpIGVsLmhlcm9EcmVxLmNsYXNzTGlzdC50b2dnbGUoInBzc2MtaXMtZm9jdXMiLCBtb2RlID09PSAiZGlhbWV0ZXIiKTsNCiAgICBpZiAoZWwuaGVyb1NmKSBlbC5oZXJvU2YuY2xhc3NMaXN0LnRvZ2dsZSgicHNzYy1pcy1mb2N1cyIsIG1vZGUgPT09ICJzdHJlc3MiIHx8IG1vZGUgPT09ICJjYXBhY2l0eSIpOw0KICB9DQoNCiAgZnVuY3Rpb24gdG9TSSgpIHsNCiAgICB2YXIgbWV0cmljID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyI7DQogICAgdmFyIGQgPSBudW0oZWwuZCk7DQogICAgdmFyIG1vZGUgPSBlbC5tb2RlLnZhbHVlOw0KICAgIHZhciBuUGxhbmVzID0gZWwuc2hlYXIudmFsdWUgPT09ICJkb3VibGUiID8gMiA6IDE7DQogICAgdmFyIHRhdVN0ciA9IG51bShlbC50YXUpOw0KICAgIHJldHVybiB7DQogICAgICBtb2RlOiBtb2RlLA0KICAgICAgZDogZCwNCiAgICAgIGRfbW06IG1ldHJpYyA\/IGQgOiBkICogTU1fUEVSX0lOLA0KICAgICAgc3lfTVBhOiBtZXRyaWMgPyBudW0oZWwuc3kpIDogbnVtKGVsLnN5KSAvIFBTSV9QRVJfTVBBLA0KICAgICAgc3V0X01QYTogbWV0cmljID8gbnVtKGVsLnN1dCkgOiBudW0oZWwuc3V0KSAvIFBTSV9QRVJfTVBBLA0KICAgICAgdGF1X01QYTogbWV0cmljID8gdGF1U3RyIDogdGF1U3RyIC8gUFNJX1BFUl9NUEEsDQogICAgICBrOiBudW0oZWwuayksDQogICAgICBuc2Y6IG51bShlbC5uc2YpLA0KICAgICAgbnBpbnM6IG51bShlbC5ucGlucyksDQogICAgICBzaGFyZTogbnVtKGVsLnNoYXJlKSwNCiAgICAgIEZfTjogZm9yY2VUb04oKSwNCiAgICAgIG5QbGFuZXM6IG5QbGFuZXMsDQogICAgICBzaGVhcjogZWwuc2hlYXIudmFsdWUsDQogICAgICBiZWFyaW5nOiBlbC5iZWFyaW5nICYmIGVsLmJlYXJpbmcuY2hlY2tlZCwNCiAgICAgIHRfbW06IG1ldHJpYyA\/IG51bShlbC50aGlja25lc3MpIDogbnVtKGVsLnRoaWNrbmVzcykgKiBNTV9QRVJfSU4sDQogICAgICBnYXBfbW06IG1ldHJpYyA\/IG51bShlbC5nYXApIDogbnVtKGVsLmdhcCkgKiBNTV9QRVJfSU4sDQogICAgICBwaW5UeXBlOiBlbC5waW5UeXBlLnZhbHVlDQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHZhbGlkYXRlKHNpKSB7DQogICAgdmFyIG9rID0gdHJ1ZTsNCiAgICBjbGVhckVycnMoKTsNCg0KICAgIGlmIChzaS5tb2RlICE9PSAiZGlhbWV0ZXIiKSB7DQogICAgICBpZiAoZW1wdHkoZWwuZCkgfHwgIWlzRmluaXRlKG51bShlbC5kKSkpIHsgc2V0RXJyKCJEIiwgIkVudGVyIHBpbiBkaWFtZXRlci4iKTsgb2sgPSBmYWxzZTsgfQ0KICAgICAgZWxzZSBpZiAoIShzaS5kID4gMCkpIHsgc2V0RXJyKCJEIiwgIkRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0NCiAgICAgIGVsc2UgaWYgKHNpLmRfbW0gPCAxIHx8IHNpLmRfbW0gPiAyMDApIHsgc2V0RXJyKCJEIiwgIkRpYW1ldGVyIGxvb2tzIHVucmVhbGlzdGljICh0eXBpY2FsIDJcdTIwMTMyMDAgbW0pLiIpOyBvayA9IGZhbHNlOyB9DQogICAgfQ0KDQogICAgaWYgKHNpLm1vZGUgIT09ICJjYXBhY2l0eSIpIHsNCiAgICAgIGlmIChlbXB0eShlbC5GKSB8fCAhaXNGaW5pdGUobnVtKGVsLkYpKSkgeyBzZXRFcnIoIkYiLCAiRW50ZXIgYXBwbGllZCBzaGVhciBsb2FkLiIpOyBvayA9IGZhbHNlOyB9DQogICAgICBlbHNlIGlmICghKHNpLkZfTiA+IDApKSB7IHNldEVycigiRiIsICJBcHBsaWVkIGxvYWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTsgb2sgPSBmYWxzZTsgfQ0KICAgIH0NCg0KICAgIGlmIChlbXB0eShlbC5zeSkgfHwgIWlzRmluaXRlKG51bShlbC5zeSkpIHx8ICEoc2kuc3lfTVBhID4gMCkpIHsNCiAgICAgIHNldEVycigiU3kiLCAiRW50ZXIgeWllbGQgc3RyZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIik7DQogICAgICBvayA9IGZhbHNlOw0KICAgIH0NCg0KICAgIGlmIChlbC50YXVTb3VyY2UudmFsdWUgPT09ICJlc3RpbWF0ZSIpIHsNCiAgICAgIGlmIChlbXB0eShlbC5zdXQpIHx8ICFpc0Zpbml0ZShudW0oZWwuc3V0KSkgfHwgIShzaS5zdXRfTVBhID4gMCkpIHsNCiAgICAgICAgc2V0RXJyKCJTdXQiLCAiRW50ZXIgdWx0aW1hdGUgdGVuc2lsZSBzdHJlbmd0aCBmb3Igc2hlYXIgZXN0aW1hdGlvbi4iKTsNCiAgICAgICAgb2sgPSBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGlmIChlbXB0eShlbC5rKSB8fCAhaXNGaW5pdGUobnVtKGVsLmspKSB8fCAhKHNpLmsgPiAwKSB8fCBzaS5rID4gMSkgew0KICAgICAgICBzZXRFcnIoIksiLCAiU2hlYXIgcmF0aW8gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEgKGRlZmF1bHQgMC42MCkuIik7DQogICAgICAgIG9rID0gZmFsc2U7DQogICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgIGlmIChlbXB0eShlbC50YXUpIHx8ICFpc0Zpbml0ZShudW0oZWwudGF1KSkgfHwgIShzaS50YXVfTVBhID4gMCkpIHsNCiAgICAgICAgc2V0RXJyKCJUYXUiLCAiRW50ZXIgc2hlYXIgc3RyZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIik7DQogICAgICAgIG9rID0gZmFsc2U7DQogICAgICB9DQogICAgfQ0KDQogICAgaWYgKGVtcHR5KGVsLm5zZikgfHwgIWlzRmluaXRlKG51bShlbC5uc2YpKSB8fCAhKHNpLm5zZiA+IDApKSB7DQogICAgICBzZXRFcnIoIk5zZiIsICJEZXNpZ24gc2FmZXR5IGZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOw0KICAgICAgb2sgPSBmYWxzZTsNCiAgICB9IGVsc2UgaWYgKHNpLm5zZiA8IDEgfHwgc2kubnNmID4gMTIpIHsNCiAgICAgIHNldEVycigiTnNmIiwgIkVudGVyIGEgc2FmZXR5IGZhY3RvciBiZXR3ZWVuIDEgYW5kIDEyLiIpOw0KICAgICAgb2sgPSBmYWxzZTsNCiAgICB9DQoNCiAgICBpZiAoZW1wdHkoZWwubnBpbnMpIHx8ICFpc0Zpbml0ZShudW0oZWwubnBpbnMpKSB8fCAhKHNpLm5waW5zID49IDEpIHx8IE1hdGguZmxvb3Ioc2kubnBpbnMpICE9PSBzaS5ucGlucykgew0KICAgICAgc2V0RXJyKCJOcGlucyIsICJOdW1iZXIgb2YgcGlucyBtdXN0IGJlIGFuIGludGVnZXIgXHUyMjY1IDEuIik7DQogICAgICBvayA9IGZhbHNlOw0KICAgIH0NCg0KICAgIGlmIChlbXB0eShlbC5zaGFyZSkgfHwgIWlzRmluaXRlKG51bShlbC5zaGFyZSkpIHx8ICEoc2kuc2hhcmUgPiAwKSB8fCBzaS5zaGFyZSA+IDEpIHsNCiAgICAgIHNldEVycigiU2hhcmUiLCAiTG9hZCBzaGFyaW5nIGZhY3RvciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKTsNCiAgICAgIG9rID0gZmFsc2U7DQogICAgfQ0KDQogICAgaWYgKHNpLmJlYXJpbmcpIHsNCiAgICAgIGlmIChlbXB0eShlbC50aGlja25lc3MpIHx8ICFpc0Zpbml0ZShudW0oZWwudGhpY2tuZXNzKSkgfHwgIShzaS50X21tID4gMCkpIHsNCiAgICAgICAgc2V0RXJyKCJUIiwgIkVudGVyIHBsYXRlIG9yIGx1ZyB0aGlja25lc3MgZ3JlYXRlciB0aGFuIHplcm8uIik7DQogICAgICAgIG9rID0gZmFsc2U7DQogICAgICB9DQogICAgfQ0KDQogICAgaWYgKCFlbXB0eShlbC5nYXApICYmIGlzRmluaXRlKG51bShlbC5nYXApKSAmJiBzaS5nYXBfbW0gPCAwKSB7DQogICAgICBzZXRFcnIoIkdhcCIsICJQbGF0ZSBnYXAgY2Fubm90IGJlIG5lZ2F0aXZlLiIpOw0KICAgICAgb2sgPSBmYWxzZTsNCiAgICB9DQoNCiAgICByZXR1cm4gb2s7DQogIH0NCg0KICBmdW5jdGlvbiBzZXRHYXVnZShzZikgew0KICAgIHZhciBmcmFjID0gY2xhbXAoKGlzRmluaXRlKHNmKSA\/IHNmIDogMCkgLyA0LCAwLCAxKTsNCiAgICBpZiAoZWwuZ2F1Z2VBcmMpIGVsLmdhdWdlQXJjLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLCBTdHJpbmcoQVJDX0xFTiAqICgxIC0gZnJhYykpKTsNCiAgICB2YXIgYW5nID0gLTkwICsgZnJhYyAqIDE4MDsNCiAgICBpZiAoZWwubmVlZGxlKSBlbC5uZWVkbGUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCAicm90YXRlKCIgKyBhbmcgKyAiIDEyMCAxMTgpIik7DQogIH0NCg0KICBmdW5jdGlvbiBzZXRTY2hlbWF0aWMoc3RhdHVzLCBzaGVhcikgew0KICAgIGlmICghZWwuc2NoZW1hdGljKSByZXR1cm47DQogICAgZWwuc2NoZW1hdGljLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0dXMiLCBzdGF0dXMgfHwgImlkbGUiKTsNCiAgICBlbC5zY2hlbWF0aWMuc2V0QXR0cmlidXRlKCJkYXRhLXNoZWFyIiwgc2hlYXIgPT09ICJkb3VibGUiID8gImRvdWJsZSIgOiAic2luZ2xlIik7DQogIH0NCg0KICBmdW5jdGlvbiBzZXRCYXIobm9kZSwgcGN0KSB7DQogICAgaWYgKCFub2RlKSByZXR1cm47DQogICAgbm9kZS5zdHlsZS53aWR0aCA9IGNsYW1wKHBjdCwgMCwgMTAwKSArICIlIjsNCiAgfQ0KDQogIGZ1bmN0aW9uIGNhbGN1bGF0ZShzY3JvbGwpIHsNCiAgICB1cGRhdGVNb2RlVUkoKTsNCiAgICB2YXIgc2kgPSB0b1NJKCk7DQogICAgdmFyIG9rID0gdmFsaWRhdGUoc2kpOw0KICAgIGlmIChlbC5yZXN1bHRzKSBlbC5yZXN1bHRzLmNsYXNzTGlzdC5yZW1v<\/span><span class=\"pssc-js-chunk\">dmUoInBzc2MtaGlkZGVuIik7DQoNCiAgICBpZiAoIW9rKSB7DQogICAgICBzdGF0ZS5saXZlID0gZmFsc2U7DQogICAgICBlbC5zdGF0dXNUaXRsZS50ZXh0Q29udGVudCA9ICJDaGVjayBpbnB1dHMiOw0KICAgICAgZWwuc3RhdHVzTm90ZS50ZXh0Q29udGVudCA9ICJDb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBmaWVsZHMsIHRoZW4gY2FsY3VsYXRlIGFnYWluLiI7DQogICAgICBlbC5iYW5uZXIuY2xhc3NOYW1lID0gInBzc2MtYmFubmVyIHBzc2MtYmFubmVyLWNhdXRpb24iOw0KICAgICAgc2V0R2F1Z2UoMCk7DQogICAgICBzZXRTY2hlbWF0aWMoImlkbGUiLCBzaS5zaGVhcik7DQogICAgICBpZiAoc2Nyb2xsKSBzY3JvbGxUb1Jlc3VsdHMoKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICB2YXIgdGF1U3RyZW5ndGggPSBzaS50YXVfTVBhOw0KICAgIGlmIChlbC50YXVTb3VyY2UudmFsdWUgPT09ICJlc3RpbWF0ZSIpIHsNCiAgICAgIHRhdVN0cmVuZ3RoID0gc2kuayAqIHNpLnN1dF9NUGE7DQogICAgfQ0KICAgIHZhciB0YXVBbGxvdyA9IHRhdVN0cmVuZ3RoIC8gc2kubnNmOw0KICAgIHZhciBuUGxhbmVzID0gc2kublBsYW5lczsNCiAgICB2YXIgRnRvdGFsID0gc2kubW9kZSA9PT0gImNhcGFjaXR5IiA\/IDAgOiBzaS5GX047DQogICAgdmFyIEZwaW4gPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gMCA6IEZ0b3RhbCAqIHNpLnNoYXJlIC8gc2kubnBpbnM7DQoNCiAgICB2YXIgZF9tbSA9IHNpLmRfbW07DQogICAgdmFyIEEgPSBzaS5tb2RlID09PSAiZGlhbWV0ZXIiID8gTmFOIDogTWF0aC5QSSAvIDQgKiBkX21tICogZF9tbTsNCiAgICB2YXIgQWVmZiA9IGlzRmluaXRlKEEpID8gQSAqIG5QbGFuZXMgOiBOYU47DQoNCiAgICB2YXIgZFJlcXVpcmVkID0gTWF0aC5zcXJ0KDQgKiBGcGluIC8gKE1hdGguUEkgKiBuUGxhbmVzICogdGF1QWxsb3cpKTsNCiAgICBpZiAoc2kubW9kZSA9PT0gImRpYW1ldGVyIikgZF9tbSA9IGRSZXF1aXJlZDsNCg0KICAgIGlmIChzaS5tb2RlID09PSAiZGlhbWV0ZXIiKSB7DQogICAgICBBID0gTWF0aC5QSSAvIDQgKiBkX21tICogZF9tbTsNCiAgICAgIEFlZmYgPSBBICogblBsYW5lczsNCiAgICB9DQoNCiAgICB2YXIgRmFsbG93ID0gQWVmZiAqIHRhdUFsbG93Ow0KICAgIHZhciB0YXUgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gMCA6IEZwaW4gLyBBZWZmOw0KICAgIHZhciBzZkFjdHVhbCA9IHRhdVN0cmVuZ3RoIC8gKHRhdSA+IDAgPyB0YXUgOiAxZS0xMik7DQogICAgdmFyIHNmQWxsb3cgPSBGYWxsb3cgLyAoRnBpbiA+IDAgPyBGcGluIDogMWUtMTIpOw0KICAgIHZhciB1dGlsID0gc2kubW9kZSA9PT0gImNhcGFjaXR5IiA\/IDAgOiAoRnBpbiAvIEZhbGxvdykgKiAxMDA7DQoNCiAgICB2YXIgYmVhcmluZ1N0cmVzcyA9IE5hTjsNCiAgICB2YXIgYmVhcmluZ0FsbG93ID0gTmFOOw0KICAgIGlmIChzaS5iZWFyaW5nICYmIHNpLnRfbW0gPiAwICYmIGRfbW0gPiAwKSB7DQogICAgICBiZWFyaW5nU3RyZXNzID0gRnBpbiAvIChkX21tICogc2kudF9tbSk7DQogICAgICBiZWFyaW5nQWxsb3cgPSBzaS5zeV9NUGE7DQogICAgfQ0KDQogICAgdmFyIGdvdmVybmluZyA9ICJQaW4gU2hlYXIiOw0KICAgIGlmIChzaS5iZWFyaW5nICYmIGlzRmluaXRlKGJlYXJpbmdTdHJlc3MpICYmIGJlYXJpbmdTdHJlc3MgPiB0YXUpIHsNCiAgICAgIGlmIChiZWFyaW5nU3RyZXNzID49IGJlYXJpbmdBbGxvdykgZ292ZXJuaW5nID0gIkJlYXJpbmciOw0KICAgICAgZWxzZSBpZiAoYmVhcmluZ1N0cmVzcyAvIGJlYXJpbmdBbGxvdyA+IHRhdSAvIHRhdUFsbG93KSBnb3Zlcm5pbmcgPSAiQmVhcmluZyI7DQogICAgfQ0KICAgIGlmIChzaS5nYXBfbW0gPiAwLjUgKiBkX21tKSBnb3Zlcm5pbmcgPSAiUmV2aWV3IEJlbmRpbmciOw0KDQogICAgdmFyIGFsZXJ0cyA9IFtdOw0KICAgIHZhciBzdGF0dXMgPSAic2FmZSI7DQogICAgdmFyIHRpdGxlID0gIlNhZmUiOw0KICAgIHZhciBub3RlID0gIkFjdHVhbCBzaGVhciBzdHJlc3MgaXMgYmVsb3cgYWxsb3dhYmxlIHNoZWFyIHN0cmVzcyBmb3IgdGhlIHNlbGVjdGVkIGRlc2lnbiBzYWZldHkgZmFjdG9yLiI7DQoNCiAgICBpZiAoc2kuc2hlYXIgPT09ICJkb3VibGUiKSB7DQogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJvayIsIHRleHQ6ICJEb3VibGUgc2hlYXI6IGVmZmVjdGl2ZSBzaGVhciBhcmVhID0gMiBcdTAwZDcgQS4gQm90aCBwbGFuZXMgYXNzdW1lZCBlcXVhbGx5IGxvYWRlZC4iIH0pOw0KICAgIH0gZWxzZSB7DQogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJvayIsIHRleHQ6ICJTaW5nbGUgc2hlYXI6IGVmZmVjdGl2ZSBzaGVhciBhcmVhID0gQS4gQ29uc2lkZXIgZG91YmxlIHNoZWFyIHdoZXJlIHByYWN0aWNhbCB0byBpbmNyZWFzZSBjYXBhY2l0eS4iIH0pOw0KICAgIH0NCg0KICAgIGlmIChzaS5ucGlucyA+IDEpIHsNCiAgICAgIGFsZXJ0cy5wdXNoKHsNCiAgICAgICAgdHlwZTogIm9rIiwNCiAgICAgICAgdGV4dDogIkxvYWQgcGVyIHBpbiA9IHRvdGFsIGxvYWQgXHUwMGQ3ICIgKyBmbXQoc2kuc2hhcmUsIDIpICsgIiAvICIgKyBzaS5ucGlucyArICIgPSAiICsgZm9ybWF0Rm9yY2UoRnBpbikucHJpbWFyeSArICIuIg0KICAgICAgfSk7DQogICAgfQ0KDQogICAgaWYgKHNpLm1vZGUgIT09ICJkaWFtZXRlciIgJiYgZF9tbSA8IGRSZXF1aXJlZCkgew0KICAgICAgYWxlcnRzLnB1c2goew0KICAgICAgICB0eXBlOiAicmlzayIsDQogICAgICAgIHRleHQ6ICJTZWxlY3RlZCBkaWFtZXRlciAiICsgZm9ybWF0TGVuZ3RoKGRfbW0pICsgIiBpcyBiZWxvdyByZXF1aXJlZCAiICsgZm9ybWF0TGVuZ3RoKGRSZXF1aXJlZCkgKyAiLiBJbmNyZWFzZSBwaW4gZGlhbWV0ZXIuIg0KICAgICAgfSk7DQogICAgfQ0KDQogICAgaWYgKHNpLm1vZGUgPT09ICJkaWFtZXRlciIpIHsNCiAgICAgIGFsZXJ0cy5wdXNoKHsgdHlwZTogIm9rIiwgdGV4dDogIlJlcXVpcmVkIGRpYW1ldGVyIGQgPSBcdTIyMWEoNEYgLyAoXHUwM2MwIFx1MDBkNyBuIFx1MDBkNyBcdTAzYzRhbGxvdykpID0gIiArIGZvcm1hdExlbmd0aChkUmVxdWlyZWQpICsgIi4iIH0pOw0KICAgIH0NCg0KICAgIGlmICh1dGlsID4gMTAwIHx8IHRhdSA+PSB0YXVBbGxvdykgew0KICAgICAgc3RhdHVzID0gInJpc2siOw0KICAgICAgdGl0bGUgPSAiSGlnaCBSaXNrIjsNCiAgICAgIG5vdGUgPSAiQXBwbGllZCBsb2FkIGV4Y2VlZHMgYWxsb3dhYmxlIHNoZWFyIGNhcGFjaXR5LiBJbmNyZWFzZSBwaW4gZGlhbWV0ZXIsIHVzZSBkb3VibGUgc2hlYXIsIGFkZCBwaW5zLCBvciBzZWxlY3QgaGlnaGVyLXN0cmVuZ3RoIG1hdGVyaWFsLiI7DQogICAgICBhbGVydHMudW5zaGlmdCh7IHR5cGU6ICJyaXNrIiwgdGV4dDogIkFwcGxpZWQgbG9hZCBwZXIgcGluIGV4Y2VlZHMgYWxsb3dhYmxlIHNoZWFyIGxvYWQuIExvYWQgdXRpbGl6YXRpb24gIiArIGZtdCh1dGlsLCAxKSArICIlLiIgfSk7DQogICAgfSBlbHNlIGlmICh1dGlsID49IDg1IHx8IHNmQWxsb3cgPCAxLjE1KSB7DQogICAgICBzdGF0dXMgPSAiY2F1dGlvbiI7DQogICAgICB0aXRsZSA9ICJDYXV0aW9uIjsNCiAgICAgIG5vdGUgPSAiTG9hZCB1dGlsaXphdGlvbiBhcHByb2FjaGVzIHRoZSBhbGxvd2FibGUgbGltaXQuIENvbmZpcm0gam9pbnQgZ2VvbWV0cnkgYW5kIGFwcGxpY2FibGUgc3RhbmRhcmRzLiI7DQogICAgICBhbGVydHMudW5zaGlmdCh7IHR5cGU6ICJ3YXJuIiwgdGV4dDogIkxvYWQgdXRpbGl6YXRpb24gaXMgIiArIGZtdCh1dGlsLCAxKSArICIlIG9mIGFsbG93YWJsZSBjYXBhY2l0eS4iIH0pOw0KICAgIH0gZWxzZSBpZiAoc2kubW9kZSAhPT0gImNhcGFjaXR5Iikgew0KICAgICAgYWxlcnRzLnVuc2hpZnQoeyB0eXBlOiAib2siLCB0ZXh0OiAiUGluIHNoZWFyIHNhZmV0eSBzdGF0dXMgaXMgU2FmZS4gU2FmZXR5IGZhY3RvciA9ICIgKyBmbXQoc2ZBY3R1YWwsIDIpICsgIiAoXHUwM2M0c3RyZW5ndGggLyBcdTAzYzQpLiIgfSk7DQogICAgfQ0KDQogICAgaWYgKHNpLmJlYXJpbmcgJiYgaXNGaW5pdGUoYmVhcmluZ1N0cmVzcykpIHsNCiAgICAgIGlmIChiZWFyaW5nU3RyZXNzID49IGJlYXJpbmdBbGxvdykgew0KICAgICAgICBzdGF0dXMgPSAicmlzayI7DQogICAgICAgIHRpdGxlID0gIkhpZ2ggUmlzayI7DQogICAgICAgIGdvdmVybmluZyA9ICJCZWFyaW5nIjsNCiAgICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAicmlzayIsIHRleHQ6ICJCZWFyaW5nIHN0cmVzcyAiICsgZm9ybWF0U3RyZXNzKGJlYXJpbmdTdHJlc3MpLnByaW1hcnkgKyAiIGV4Y2VlZHMgeWllbGQtYmFzZWQgbGltaXQuIEluY3JlYXNlIHBsYXRlIHRoaWNrbmVzcy4iIH0pOw0KICAgICAgfSBlbHNlIGlmIChiZWFyaW5nU3RyZXNzID49IDAuODUgKiBiZWFyaW5nQWxsb3cpIHsNCiAgICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJCZWFyaW5nIHN0cmVzcyBhcHByb2FjaGVzIHRoZSBhbGxvd2Fi<\/span><span class=\"pssc-js-chunk\">bGUgbGltaXQgKCIgKyBmbXQoYmVhcmluZ1N0cmVzcyAvIGJlYXJpbmdBbGxvdyAqIDEwMCwgMSkgKyAiJSBvZiBTeSkuIiB9KTsNCiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInNhZmUiKSB7IHN0YXR1cyA9ICJjYXV0aW9uIjsgdGl0bGUgPSAiQ2F1dGlvbiI7IH0NCiAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoc2kuZ2FwX21tID4gMC41ICogZF9tbSkgew0KICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJMYXJnZSB1bnN1cHBvcnRlZCBzcGFuIG9yIHBsYXRlIGdhcCAoIiArIGZvcm1hdExlbmd0aChzaS5nYXBfbW0pICsgIikgbWF5IGNhdXNlIHBpbiBiZW5kaW5nIHRvIGdvdmVybi4gUmV2aWV3IGpvaW50IGdlb21ldHJ5LiIgfSk7DQogICAgICBpZiAoZ292ZXJuaW5nID09PSAiUGluIFNoZWFyIikgZ292ZXJuaW5nID0gIlJldmlldyBCZW5kaW5nIjsNCiAgICB9DQoNCiAgICB2YXIgdEZtdCA9IGZvcm1hdFN0cmVzcyh0YXUpOw0KICAgIHZhciBmYWxsb3dGbXQgPSBmb3JtYXRGb3JjZShGYWxsb3cpOw0KICAgIHZhciBmcGluRm10ID0gZm9ybWF0Rm9yY2UoRnBpbik7DQoNCiAgICBpZiAoZWwub3V0U3RyZXNzKSB7DQogICAgICBlbC5vdXRTdHJlc3MudGV4dENvbnRlbnQgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gIlx1MjAxNCIgOiB0Rm10LnByaW1hcnk7DQogICAgICBlbC5vdXRTdHJlc3NTdWIudGV4dENvbnRlbnQgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gIkVudGVyIGxvYWQgaW4gY2FwYWNpdHkgbW9kZSIgOiAiXHUwM2M0ID0gRiAvIEFlZmYiOw0KICAgIH0NCiAgICBpZiAoZWwub3V0RmFsbG93KSB7DQogICAgICBlbC5vdXRGYWxsb3cudGV4dENvbnRlbnQgPSBmYWxsb3dGbXQucHJpbWFyeTsNCiAgICAgIGVsLm91dEZhbGxvd1N1Yi50ZXh0Q29udGVudCA9ICJGYWxsb3cgPSBcdTAzYzRhbGxvdyBcdTAwZDcgQWVmZiI7DQogICAgfQ0KICAgIGlmIChlbC5vdXREcmVxKSB7DQogICAgICBlbC5vdXREcmVxLnRleHRDb250ZW50ID0gZm9ybWF0TGVuZ3RoKGRSZXF1aXJlZCk7DQogICAgICBlbC5vdXREcmVxU3ViLnRleHRDb250ZW50ID0gImQgPSBcdTIyMWEoNEYgLyAoXHUwM2MwIG4gXHUwM2M0YWxsb3cpKSI7DQogICAgfQ0KICAgIGlmIChlbC5vdXRTZikgew0KICAgICAgZWwub3V0U2YudGV4dENvbnRlbnQgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gIlx1MjAxNCIgOiBmbXQoc2ZBY3R1YWwsIDIpOw0KICAgICAgZWwub3V0U2ZTdWIudGV4dENvbnRlbnQgPSAiXHUwM2M0c3RyZW5ndGggLyBcdTAzYzRhY3R1YWwiOw0KICAgIH0NCg0KICAgIGlmIChlbC5vdXRVdGlsKSBlbC5vdXRVdGlsLnRleHRDb250ZW50ID0gc2kubW9kZSA9PT0gImNhcGFjaXR5IiA\/ICJcdTIwMTQiIDogZm10KHV0aWwsIDEpICsgIiUgb2YgYWxsb3dhYmxlIjsNCiAgICBpZiAoZWwudXRpbEZpbGwpIHsNCiAgICAgIGVsLnV0aWxGaWxsLnN0eWxlLndpZHRoID0gY2xhbXAodXRpbCwgMCwgMTAwKSArICIlIjsNCiAgICAgIGVsLnV0aWxGaWxsLmNsYXNzTmFtZSA9ICJwc3NjLXV0aWwtZmlsbCIgKyAoc3RhdHVzID09PSAicmlzayIgPyAiIHBzc2MtaXMtcmlzayIgOiBzdGF0dXMgPT09ICJjYXV0aW9uIiA\/ICIgcHNzYy1pcy1jYXV0aW9uIiA6ICIgcHNzYy1pcy1vayIpOw0KICAgIH0NCg0KICAgIGlmIChlbC5vdXRBcmVhKSBlbC5vdXRBcmVhLnRleHRDb250ZW50ID0gZm9ybWF0QXJlYShBKTsNCiAgICBpZiAoZWwub3V0QWVmZikgZWwub3V0QWVmZi50ZXh0Q29udGVudCA9IGZvcm1hdEFyZWEoQWVmZik7DQogICAgaWYgKGVsLm91dFRhdUFsbG93KSBlbC5vdXRUYXVBbGxvdy50ZXh0Q29udGVudCA9IGZvcm1hdFN0cmVzcyh0YXVBbGxvdykucHJpbWFyeTsNCiAgICBpZiAoZWwub3V0RnBpbikgZWwub3V0RnBpbi50ZXh0Q29udGVudCA9IHNpLm1vZGUgPT09ICJjYXBhY2l0eSIgPyAiXHUyMDE0IiA6IGZwaW5GbXQucHJpbWFyeTsNCiAgICBpZiAoZWwub3V0RnBpbk5vdGUpIHsNCiAgICAgIGVsLm91dEZwaW5Ob3RlLnRleHRDb250ZW50ID0gc2kubnBpbnMgPiAxDQogICAgICAgID8gInRvdGFsICIgKyBmb3JtYXRGb3JjZShGdG90YWwpLnByaW1hcnkgKyAiIFx1MDBkNyAiICsgZm10KHNpLnNoYXJlLCAyKSArICIgLyAiICsgc2kubnBpbnMNCiAgICAgICAgOiAic2luZ2xlIHBpbiI7DQogICAgfQ0KICAgIGlmIChlbC5vdXRCZWFyaW5nKSB7DQogICAgICBlbC5vdXRCZWFyaW5nLnRleHRDb250ZW50ID0gc2kuYmVhcmluZyAmJiBpc0Zpbml0ZShiZWFyaW5nU3RyZXNzKSA\/IGZvcm1hdFN0cmVzcyhiZWFyaW5nU3RyZXNzKS5wcmltYXJ5IDogIlx1MjAxNCI7DQogICAgfQ0KICAgIGlmIChlbC5vdXRCZWFyaW5nTm90ZSkgew0KICAgICAgZWwub3V0QmVhcmluZ05vdGUudGV4dENvbnRlbnQgPSBzaS5iZWFyaW5nID8gIlx1MDNjMyA9IEYgLyAoZCBcdTAwZDcgdCkiIDogIkVuYWJsZSBiZWFyaW5nIGNoZWNrIjsNCiAgICB9DQogICAgaWYgKGVsLm91dEdvdmVybmluZykgZWwub3V0R292ZXJuaW5nLnRleHRDb250ZW50ID0gZ292ZXJuaW5nOw0KDQogICAgaWYgKGVsLmdhdWdlUmVhZCkgZWwuZ2F1Z2VSZWFkLnRleHRDb250ZW50ID0gc2kubW9kZSA9PT0gImNhcGFjaXR5IiA\/ICJcdTIwMTQiIDogZm10KHNmQWN0dWFsLCAyKTsNCiAgICBpZiAoZWwuZ2F1Z2VOb3RlKSBlbC5nYXVnZU5vdGUudGV4dENvbnRlbnQgPSAiU2FmZXR5IGZhY3RvciAoc2NhbGUgMFx1MjAxMzQpIjsNCiAgICBzZXRHYXVnZShzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gMCA6IHNmQWN0dWFsKTsNCg0KICAgIGlmIChlbC5zY2hGb3JjZSkgZWwuc2NoRm9yY2UudGV4dENvbnRlbnQgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gIlx1MjAxNCIgOiBmcGluRm10LnByaW1hcnk7DQogICAgaWYgKGVsLnNjaENhcHRpb24pIHsNCiAgICAgIGVsLnNjaENhcHRpb24udGV4dENvbnRlbnQgPSBzaS5zaGVhciA9PT0gImRvdWJsZSIgPyAiRG91YmxlIHNoZWFyICBcdTAwYjcgIDIgcGxhbmVzIiA6ICJTaW5nbGUgc2hlYXIgIFx1MDBiNyAgMSBwbGFuZSI7DQogICAgfQ0KICAgIHNldFNjaGVtYXRpYyhzdGF0dXMgPT09ICJyaXNrIiA\/ICJyaXNrIiA6IHN0YXR1cyA9PT0gImNhdXRpb24iID8gImNhdXRpb24iIDogIm9rIiwgc2kuc2hlYXIpOw0KDQogICAgdmFyIHNjYWxlID0gTWF0aC5tYXgodGF1QWxsb3csIHRhdSwgMSk7DQogICAgc2V0QmFyKGVsLmJhclRhdSwgc2kubW9kZSA9PT0gImNhcGFjaXR5IiA\/IDAgOiB0YXUgLyBzY2FsZSAqIDEwMCk7DQogICAgc2V0QmFyKGVsLmJhclRhLCB0YXVBbGxvdyAvIHNjYWxlICogMTAwKTsNCiAgICBpZiAoZWwuYmFyVGF1VmFsKSBlbC5iYXJUYXVWYWwudGV4dENvbnRlbnQgPSBzaS5tb2RlID09PSAiY2FwYWNpdHkiID8gIlx1MjAxNCIgOiB0Rm10LnByaW1hcnk7DQogICAgaWYgKGVsLmJhclRhVmFsKSBlbC5iYXJUYVZhbC50ZXh0Q29udGVudCA9IGZvcm1hdFN0cmVzcyh0YXVBbGxvdykucHJpbWFyeTsNCiAgICBpZiAoZWwuYmFyVGF1KSB7DQogICAgICBlbC5iYXJUYXUuY2xhc3NOYW1lID0gInBzc2MtYmFyLWZpbGwiICsgKHN0YXR1cyA9PT0gInJpc2siID8gIiBwc3NjLWlzLXJpc2siIDogc3RhdHVzID09PSAiY2F1dGlvbiIgPyAiIHBzc2MtaXMtY2F1dGlvbiIgOiAiIHBzc2MtaXMtb2siKTsNCiAgICB9DQoNCiAgICBlbC5zdGF0dXNUaXRsZS50ZXh0Q29udGVudCA9IHRpdGxlOw0KICAgIGVsLnN0YXR1c05vdGUudGV4dENvbnRlbnQgPSBub3RlOw0KICAgIGVsLmJhbm5lci5jbGFzc05hbWUgPSAicHNzYy1iYW5uZXIgcHNzYy1iYW5uZXItIiArIChzdGF0dXMgPT09ICJzYWZlIiA\/ICJvayIgOiBzdGF0dXMgPT09ICJyaXNrIiA\/ICJyaXNrIiA6ICJjYXV0aW9uIik7DQoNCiAgICBpZiAoZWwuYWxlcnRzKSB7DQogICAgICBlbC5hbGVydHMuaW5uZXJIVE1MID0gIiI7DQogICAgICBhbGVydHMuZm9yRWFjaChmdW5jdGlvbiAoYSkgew0KICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQogICAgICAgIGRpdi5jbGFzc05hbWUgPSAicHNzYy1hbGVydCBwc3NjLWFsZXJ0LSIgKyAoYS50eXBlID09PSAicmlzayIgPyAicmlzayIgOiBhLnR5cGUgPT09ICJvayIgPyAib2siIDogIndhcm4iKTsNCiAgICAgICAgZGl2LnRleHRDb250ZW50ID0gYS50ZXh0Ow0KICAgICAgICBlbC5hbGVydHMuYXBwZW5kQ2hpbGQoZGl2KTsNCiAgICAgIH0pOw0KICAgIH0NCg0KICAgIHN0YXRlLmxpdmUgPSB0cnVlOw0KICAgIGlmIChzY3JvbGwpIHNjcm9sbFRvUmVzdWx0cygpOw0KICB9DQoNCiAgZnVuY3Rpb24gc2Nyb2xsVG9SZXN1bHRzKCkgew0KICAgIHRyeSB7DQogICAgICBpZiAoZWwuYmFubmVyKSBlbC5iYW5uZXIuY2xvc2VzdCgiLnBzc2MtY2FyZCIpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiIH0pOw0KICAgIH0gY2F0Y2ggKGUpIHt9DQogIH0NCg0KICBmdW5jdGlvbiBvblJvb3RD<\/span><span class=\"pssc-js-chunk\">bGljayhlKSB7DQogICAgdmFyIGJ0biA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCJidXR0b24iKSA6IG51bGw7DQogICAgaWYgKCFidG4gfHwgIXJvb3QuY29udGFpbnMoYnRuKSkgcmV0dXJuOw0KICAgIGlmIChidG4uaWQgPT09ICJwc3NjQnRuTWV0cmljIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFVuaXQoIm1ldHJpYyIpOyB9DQogICAgZWxzZSBpZiAoYnRuLmlkID09PSAicHNzY0J0bkltcGVyaWFsIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFVuaXQoImltcGVyaWFsIik7IH0NCiAgICBlbHNlIGlmIChidG4uaWQgPT09ICJwc3NjQnRuQ2FsY3VsYXRlIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IGNhbGN1bGF0ZSh0cnVlKTsgfQ0KICB9DQoNCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIG9uUm9vdENsaWNrKTsNCiAgaWYgKGVsLmJ0bkNhbGMpIGVsLmJ0bkNhbGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7IGNhbGN1bGF0ZSh0cnVlKTsgfSk7DQoNCiAgaWYgKGVsLm1hdGVyaWFsKSBlbC5tYXRlcmlhbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgaWYgKGVsLm1hdGVyaWFsLnZhbHVlID09PSAiY3VzdG9tIikgew0KICAgICAgZWwuc3kucmVhZE9ubHkgPSBmYWxzZTsNCiAgICAgIGlmIChlbC5zdXQpIGVsLnN1dC5yZWFkT25seSA9IGZhbHNlOw0KICAgIH0gZWxzZSBhcHBseU1hdGVyaWFsKCk7DQogICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7DQogIH0pOw0KDQogIFsic3kiLCAic3V0IiwgInRhdSIsICJrIl0uZm9yRWFjaChmdW5jdGlvbiAoaWQpIHsNCiAgICB2YXIgbm9kZSA9IGVsW2lkID09PSAic3kiID8gInN5IiA6IGlkID09PSAic3V0IiA\/ICJzdXQiIDogaWQgPT09ICJ0YXUiID8gInRhdSIgOiAiayJdOw0KICAgIGlmICghbm9kZSkgcmV0dXJuOw0KICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7DQogICAgICBtYXJrQ3VzdG9tTWF0ZXJpYWwoKTsNCiAgICAgIGlmIChlbC50YXVTb3VyY2UudmFsdWUgPT09ICJlc3RpbWF0ZSIpIHVwZGF0ZVRhdUZyb21Fc3RpbWF0ZSgpOw0KICAgICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7DQogICAgfSk7DQogIH0pOw0KDQogIGlmIChlbC50YXVTb3VyY2UpIGVsLnRhdVNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgb25UYXVTb3VyY2VDaGFuZ2UoKTsNCiAgICBpZiAoc3RhdGUubGl2ZSkgY2FsY3VsYXRlKGZhbHNlKTsNCiAgfSk7DQoNCiAgWyJkIiwgIkYiLCAibnNmIiwgIm5waW5zIiwgInNoYXJlIiwgInRoaWNrbmVzcyIsICJnYXAiXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsNCiAgICB2YXIgbWFwID0geyBkOiBlbC5kLCBGOiBlbC5GLCBuc2Y6IGVsLm5zZiwgbnBpbnM6IGVsLm5waW5zLCBzaGFyZTogZWwuc2hhcmUsIHRoaWNrbmVzczogZWwudGhpY2tuZXNzLCBnYXA6IGVsLmdhcCB9Ow0KICAgIGlmICghbWFwW2tleV0pIHJldHVybjsNCiAgICBtYXBba2V5XS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uICgpIHsNCiAgICAgIGlmIChrZXkgPT09ICJkIiAmJiBlbC5zaXplQ2hpcHMpIGVsLnNpemVDaGlwcy5xdWVyeVNlbGVjdG9yQWxsKCIucHNzYy1jaGlwIikuZm9yRWFjaChmdW5jdGlvbiAoYikgeyBiLmNsYXNzTGlzdC5yZW1vdmUoInBzc2MtaXMtYWN0aXZlIik7IH0pOw0KICAgICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7DQogICAgfSk7DQogIH0pOw0KDQogIGlmIChlbC5tb2RlKSBlbC5tb2RlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICB1cGRhdGVNb2RlVUkoKTsNCiAgICBpZiAoc3RhdGUubGl2ZSkgY2FsY3VsYXRlKGZhbHNlKTsNCiAgfSk7DQoNCiAgaWYgKGVsLnNoZWFyKSBlbC5zaGVhci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7DQogIH0pOw0KDQogIGlmIChlbC5iZWFyaW5nKSBlbC5iZWFyaW5nLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICBpZiAoZWwuYmVhcmluZ0ZpZWxkcykgZWwuYmVhcmluZ0ZpZWxkcy5jbGFzc0xpc3QudG9nZ2xlKCJwc3NjLWhpZGRlbiIsICFlbC5iZWFyaW5nLmNoZWNrZWQpOw0KICAgIGlmIChzdGF0ZS5saXZlKSBjYWxjdWxhdGUoZmFsc2UpOw0KICB9KTsNCg0KICBpZiAoZWwuZlVuaXQpIGVsLmZVbml0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbmV4dCA9IGVsLmZVbml0LnZhbHVlOw0KICAgIGlmIChuZXh0ID09PSBsYXN0RlVuaXQpIHJldHVybjsNCiAgICB2YXIgRiA9IG51bShlbC5GKTsNCiAgICBlbC5mVW5pdC52YWx1ZSA9IGxhc3RGVW5pdDsNCiAgICBpZiAoaXNGaW5pdGUoRikpIGVsLkYudmFsdWUgPSByb3VuZFNtYXJ0KGNvbnZlcnRGb3JjZVVuaXRWYWx1ZShGLCBsYXN0RlVuaXQsIG5leHQpKTsNCiAgICBlbC5mVW5pdC52YWx1ZSA9IG5leHQ7DQogICAgbGFzdEZVbml0ID0gbmV4dDsNCiAgICBpZiAoc3RhdGUubGl2ZSkgY2FsY3VsYXRlKGZhbHNlKTsNCiAgfSk7DQoNCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24gKGUpIHsNCiAgICBpZiAoZS5rZXkgPT09ICJFbnRlciIgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQudGFnTmFtZSA9PT0gIklOUFVUIikgew0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgY2FsY3VsYXRlKHRydWUpOw0KICAgIH0NCiAgfSk7DQoNCiAgYXBwbHlNYXRlcmlhbCgpOw0KICBvblRhdVNvdXJjZUNoYW5nZSgpOw0KICB1cGRhdGVNb2RlVUkoKTsNCiAgdXBkYXRlVW5pdExhYmVscygpOw0KICByZW5kZXJTaXplQ2hpcHMoKTsNCn0pKCk7DQo=<\/span><\/div>\n    <div class=\"pssc-layout\">\n        <section class=\"pssc-card\" id=\"psscInputs\">\n            <div class=\"pssc-card-h\">\n                <h2>Input Parameters<\/h2>\n                <div class=\"pssc-tools pssc-no-print\">\n                    <div class=\"pssc-unit-switch\" role=\"group\" aria-label=\"Unit system\">\n                        <button type=\"button\" class=\"pssc-unit-btn pssc-is-active\" id=\"psscBtnMetric\">Metric<\/button>\n                        <button type=\"button\" class=\"pssc-unit-btn\" id=\"psscBtnImperial\">Imperial<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <div class=\"pssc-card-b\">\n\n                <div class=\"pssc-section\"><span class=\"pssc-badge\">1<\/span> Calculation Setup<\/div>\n                <div class=\"pssc-grid pssc-g-2\">\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Calculation Mode\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Shear Stress Check: verify an existing pin. Allowable Load: find maximum capacity. Required Pin Diameter: size a new pin for the applied load.<\/span><\/span>\n                        <\/span>\n                        <select id=\"psscMode\">\n                            <option value=\"stress\" selected>Shear Stress Check<\/option>\n                            <option value=\"capacity\">Allowable Load<\/option>\n                            <option value=\"diameter\">Required Pin Diameter<\/option>\n                        <\/select>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Pin Type\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Select the pin category for reference. Calculation uses circular cross-section shear area A = &#960;d&#178;\/4 regardless of pin type.<\/span><\/span>\n                        <\/span>\n                        <select id=\"psscPinType\">\n                            <option value=\"cylindrical\">Cylindrical Pin<\/option>\n                            <option value=\"clevis\" selected>Clevis Pin<\/option>\n                            <option value=\"hinge\">Hinge Pin<\/option>\n                            <option value=\"dowel\">Dowel Pin<\/option>\n                            <option value=\"custom\">Custom<\/option>\n                        <\/select>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Shear Condition\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Single shear: one shear plane (Aeff = A). Double shear: two planes as in a clevis joint (Aeff = 2&#215;A).<\/span><\/span>\n                        <\/span>\n                        <select id=\"psscShear\">\n                            <option value=\"single\">Single Shear<\/option>\n                            <option value=\"double\" selected>Double Shear<\/option>\n                        <\/select>\n                    <\/label>\n                <\/div>\n                <p class=\"pssc-note\" id=\"psscModeNote\">\n                    Shear Stress Check: evaluate whether the selected pin diameter can carry the applied transverse load without exceeding allowable shear stress.\n                <\/p>\n\n                <div class=\"pssc-section\"><span class=\"pssc-badge\">2<\/span> Pin Geometry &amp; Loading<\/div>\n                <div class=\"pssc-chip-row pssc-no-print\" id=\"psscSizeChips\" aria-label=\"Common pin diameters\" style=\"margin-bottom:0.65rem\"><\/div>\n                <div class=\"pssc-grid pssc-g-2\">\n                    <label class=\"pssc-fld\" id=\"psscDWrap\">\n                        <span class=\"pssc-lbl\">\n                            Pin Diameter\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Nominal pin diameter d. Cross-sectional area A = &#960;d&#178;\/4. Not required in Required Pin Diameter mode.<\/span><\/span>\n                        <\/span>\n                        <div class=\"pssc-input-row\">\n                            <input id=\"psscD\" type=\"number\" min=\"0\" step=\"any\" value=\"20\" inputmode=\"decimal\">\n                            <span class=\"pssc-unit-pill\" data-unit=\"d\">mm<\/span>\n                        <\/div>\n                        <span class=\"pssc-err\" id=\"psscErrD\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\" id=\"psscFWrap\">\n                        <span class=\"pssc-lbl\">\n                            Applied Shear Load\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Total transverse load on the joint. The calculator distributes load among pins using the load sharing factor.<\/span><\/span>\n                        <\/span>\n                        <div class=\"pssc-input-row\">\n                            <input id=\"psscF\" type=\"number\" min=\"0\" step=\"any\" value=\"50\" inputmode=\"decimal\">\n                            <select id=\"psscFUnit\" aria-label=\"Load unit\" style=\"min-width:4.6rem;width:auto;padding-right:1.6rem!important\">\n                                <option value=\"N\">N<\/option>\n                                <option value=\"kN\" selected>kN<\/option>\n                                <option value=\"lbf\">lbf<\/option>\n                            <\/select>\n                        <\/div>\n                        <span class=\"pssc-err\" id=\"psscErrF\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Number of Pins\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Load per pin = Total load &#215; Load sharing factor \/ Number of pins.<\/span><\/span>\n                        <\/span>\n                        <input id=\"psscNpins\" type=\"number\" min=\"1\" step=\"1\" value=\"1\" inputmode=\"numeric\">\n                        <span class=\"pssc-err\" id=\"psscErrNpins\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Load Sharing Factor\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Conservative factor when load is not equally distributed among pins. Default 1.0 assumes equal sharing.<\/span><\/span>\n                        <\/span>\n                        <input id=\"psscShare\" type=\"number\" min=\"0\" step=\"any\" value=\"1.0\" inputmode=\"decimal\">\n                        <span class=\"pssc-err\" id=\"psscErrShare\"><\/span>\n                    <\/label>\n                <\/div>\n\n                <div class=\"pssc-section\"><span class=\"pssc-badge\">3<\/span> Material Strength<\/div>\n                <label class=\"pssc-fld\">\n                    <span class=\"pssc-lbl\">\n                        Pin Material\n                        <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Select a material preset or choose Custom to enter your own strength values.<\/span><\/span>\n                    <\/span>\n                    <select id=\"psscMaterial\">\n                        <option value=\"carbon\">Carbon Steel<\/option>\n                        <option value=\"alloy\" selected>Alloy Steel<\/option>\n                        <option value=\"stainless\">Stainless Steel<\/option>\n                        <option value=\"hardened\">Hardened Steel<\/option>\n                        <option value=\"aluminum\">Aluminum Alloy<\/option>\n                        <option value=\"bronze\">Bronze<\/option>\n                        <option value=\"custom\">Custom<\/option>\n                    <\/select>\n                <\/label>\n                <div class=\"pssc-grid pssc-g-2\" style=\"margin-top:0.65rem\">\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Yield Strength\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Material yield strength Sy. Used for bearing stress comparison when bearing check is enabled.<\/span><\/span>\n                        <\/span>\n                        <div class=\"pssc-input-row\">\n                            <input id=\"psscSy\" type=\"number\" min=\"0\" step=\"any\" value=\"360\" inputmode=\"decimal\" readonly>\n                            <span class=\"pssc-unit-pill\" data-unit=\"s\">MPa<\/span>\n                        <\/div>\n                        <span class=\"pssc-err\" id=\"psscErrSy\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\" id=\"psscSutWrap\">\n                        <span class=\"pssc-lbl\">\n                            Ultimate Tensile Strength\n                            <span class=\"pssc-hint\">(optional, for estimation)<\/span>\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Used to estimate shear strength when &quot;Estimate from tensile&quot; is selected: &#964;strength = ratio &#215; Sut.<\/span><\/span>\n                        <\/span>\n                        <div class=\"pssc-input-row\">\n                            <input id=\"psscSut\" type=\"number\" min=\"0\" step=\"any\" value=\"600\" inputmode=\"decimal\" readonly>\n                            <span class=\"pssc-unit-pill\" data-unit=\"s\">MPa<\/span>\n                        <\/div>\n                        <span class=\"pssc-err\" id=\"psscErrSut\"><\/span>\n                    <\/label>\n                <\/div>\n                <div class=\"pssc-grid pssc-g-2\" style=\"margin-top:0.65rem\">\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Shear Strength Source\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Enter shear strength directly or estimate from ultimate tensile strength using a shear ratio (default 0.60).<\/span><\/span>\n                        <\/span>\n                        <select id=\"psscTauSource\">\n                            <option value=\"manual\" selected>Manual input<\/option>\n                            <option value=\"estimate\">Estimate from tensile strength<\/option>\n                        <\/select>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Shear Strength &#964;<sub>strength<\/sub>\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Material shear strength used in calculations. Allowable shear stress = &#964;strength \/ design safety factor.<\/span><\/span>\n                        <\/span>\n                        <div class=\"pssc-input-row\">\n                            <input id=\"psscTau\" type=\"number\" min=\"0\" step=\"any\" value=\"360\" inputmode=\"decimal\">\n                            <span class=\"pssc-unit-pill\" data-unit=\"s\">MPa<\/span>\n                        <\/div>\n                        <span class=\"pssc-err\" id=\"psscErrTau\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\" id=\"psscKWrap\">\n                        <span class=\"pssc-lbl\">\n                            Shear Strength Ratio\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">&#964;strength = ratio &#215; Sut. Default 0.60 is a common estimate for steel pins.<\/span><\/span>\n                        <\/span>\n                        <input id=\"psscK\" type=\"number\" min=\"0\" step=\"any\" value=\"0.6\" inputmode=\"decimal\">\n                        <span class=\"pssc-err\" id=\"psscErrK\"><\/span>\n                    <\/label>\n                    <label class=\"pssc-fld\">\n                        <span class=\"pssc-lbl\">\n                            Design Safety Factor\n                            <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">&#964;allow = &#964;strength \/ SF. Default 2.0 is a common static-design starting point.<\/span><\/span>\n                        <\/span>\n                        <input id=\"psscNsf\" type=\"number\" min=\"0\" step=\"any\" value=\"2.0\" inputmode=\"decimal\">\n                        <span class=\"pssc-err\" id=\"psscErrNsf\"><\/span>\n                    <\/label>\n                <\/div>\n\n                <div class=\"pssc-section\"><span class=\"pssc-badge\">4<\/span> Advanced Checks<\/div>\n                <label class=\"pssc-check-row pssc-no-print\">\n                    <input type=\"checkbox\" id=\"psscBearing\">\n                    Enable bearing stress check\n                    <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Compare pin shear capacity with plate bearing stress &#963;bearing = F \/ (d &#215; t). Requires plate thickness input.<\/span><\/span>\n                <\/label>\n                <div class=\"pssc-advanced pssc-hidden\" id=\"psscBearingFields\">\n                    <div class=\"pssc-grid pssc-g-2\">\n                        <label class=\"pssc-fld\">\n                            <span class=\"pssc-lbl\">\n                                Plate \/ Lug Thickness\n                                <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Thickness t of the plate or lug bearing against the pin. Used in &#963;bearing = F \/ (d &#215; t).<\/span><\/span>\n                            <\/span>\n                            <div class=\"pssc-input-row\">\n                                <input id=\"psscThickness\" type=\"number\" min=\"0\" step=\"any\" value=\"12\" inputmode=\"decimal\">\n                                <span class=\"pssc-unit-pill\" data-unit=\"t\">mm<\/span>\n                            <\/div>\n                            <span class=\"pssc-err\" id=\"psscErrT\"><\/span>\n                        <\/label>\n                        <label class=\"pssc-fld\" id=\"psscGapWrap\">\n                            <span class=\"pssc-lbl\">\n                                Plate Gap \/ Unsupported Span\n                                <span class=\"pssc-hint\">(optional)<\/span>\n                                <span class=\"pssc-tip\" tabindex=\"0\">?<span class=\"pssc-tip-box\">Gap between plates or unsupported pin span. Large gaps may cause pin bending to govern even when shear is acceptable.<\/span><\/span>\n                            <\/span>\n                            <div class=\"pssc-input-row\">\n                                <input id=\"psscGap\" type=\"number\" min=\"0\" step=\"any\" value=\"0\" inputmode=\"decimal\">\n                                <span class=\"pssc-unit-pill\" data-unit=\"t\">mm<\/span>\n                            <\/div>\n                            <span class=\"pssc-err\" id=\"psscErrGap\"><\/span>\n                        <\/label>\n                    <\/div>\n                <\/div>\n\n                <div class=\"pssc-actions pssc-no-print\">\n                    <button type=\"button\" class=\"pssc-calc-btn\" id=\"psscBtnCalculate\">Calculate<\/button>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <aside class=\"pssc-hidden\" id=\"psscResults\">\n            <section class=\"pssc-card\">\n                <div class=\"pssc-card-h\">\n                    <h2>Calculated Results<\/h2>\n                <\/div>\n                <div class=\"pssc-card-b\">\n                    <div class=\"pssc-banner pssc-banner-idle\" id=\"psscBanner\">\n                        <span class=\"pssc-dot\" aria-hidden=\"true\"><\/span>\n                        <div>\n                            <div class=\"pssc-banner-kicker\">Pin shear safety status<\/div>\n                            <div class=\"pssc-banner-title\" id=\"psscStatusTitle\">Ready<\/div>\n                            <p class=\"pssc-banner-note\" id=\"psscStatusNote\">Enter pin data and press Calculate.<\/p>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-hero\">\n                        <div class=\"pssc-hero-card pssc-is-accent pssc-is-focus\" id=\"psscHeroStress\">\n                            <div class=\"pssc-hero-k\">Actual Shear Stress<\/div>\n                            <div class=\"pssc-hero-v\" id=\"psscOutStress\">&mdash;<\/div>\n                            <div class=\"pssc-hero-u\" id=\"psscOutStressSub\">&tau; = F \/ A<sub>eff<\/sub><\/div>\n                        <\/div>\n                        <div class=\"pssc-hero-card pssc-is-accent\" id=\"psscHeroFallow\">\n                            <div class=\"pssc-hero-k\">Max Allowable Shear Load<\/div>\n                            <div class=\"pssc-hero-v\" id=\"psscOutFallow\">&mdash;<\/div>\n                            <div class=\"pssc-hero-u\" id=\"psscOutFallowSub\">F<sub>allow<\/sub> = &tau;<sub>allow<\/sub> &times; A<sub>eff<\/sub><\/div>\n                        <\/div>\n                        <div class=\"pssc-hero-card\" id=\"psscHeroDreq\">\n                            <div class=\"pssc-hero-k\">Required Pin Diameter<\/div>\n                            <div class=\"pssc-hero-v\" id=\"psscOutDreq\">&mdash;<\/div>\n                            <div class=\"pssc-hero-u\" id=\"psscOutDreqSub\">d = &radic;(4F \/ (&pi; n &tau;<sub>allow<\/sub>))<\/div>\n                        <\/div>\n                        <div class=\"pssc-hero-card\" id=\"psscHeroSf\">\n                            <div class=\"pssc-hero-k\">Safety Factor<\/div>\n                            <div class=\"pssc-hero-v\" id=\"psscOutSf\">&mdash;<\/div>\n                            <div class=\"pssc-hero-u\" id=\"psscOutSfSub\">&tau;<sub>strength<\/sub> \/ &tau;<sub>actual<\/sub><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-viz\">\n                        <div class=\"pssc-sch-wrap\">\n                            <svg class=\"pssc-schematic\" id=\"psscSchematic\" viewBox=\"0 0 200 250\" role=\"img\" aria-label=\"Pin shear joint diagram\" data-status=\"idle\" data-shear=\"double\">\n                                <text class=\"pssc-sch-label\" x=\"100\" y=\"16\" text-anchor=\"middle\" id=\"psscSchCaption\">Double shear  &middot;  2 planes<\/text>\n\n                                <g class=\"pssc-g-double\">\n                                    <rect class=\"pssc-sch-plate\" x=\"20\" y=\"58\" width=\"60\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <rect class=\"pssc-sch-plate\" x=\"120\" y=\"58\" width=\"60\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <rect class=\"pssc-sch-plate\" x=\"20\" y=\"86\" width=\"60\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <rect class=\"pssc-sch-plate\" x=\"120\" y=\"86\" width=\"60\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <line class=\"pssc-sch-dash\" x1=\"20\" y1=\"80\" x2=\"180\" y2=\"80\" stroke-width=\"1\"\/>\n                                    <line class=\"pssc-sch-dash\" x1=\"20\" y1=\"108\" x2=\"180\" y2=\"108\" stroke-width=\"1\"\/>\n                                    <line class=\"pssc-sch-force\" x1=\"182\" y1=\"68\" x2=\"198\" y2=\"68\" stroke-width=\"2.2\"\/>\n                                    <polygon class=\"pssc-sch-arrow\" points=\"190,63 198,68 190,73\"\/>\n                                    <line class=\"pssc-sch-force\" x1=\"18\" y1=\"96\" x2=\"2\" y2=\"96\" stroke-width=\"2.2\"\/>\n                                    <polygon class=\"pssc-sch-arrow\" points=\"10,91 2,96 10,101\"\/>\n                                    <line class=\"pssc-sch-force\" x1=\"182\" y1=\"124\" x2=\"198\" y2=\"124\" stroke-width=\"2.2\"\/>\n                                    <polygon class=\"pssc-sch-arrow\" points=\"190,119 198,124 190,129\"\/>\n                                <\/g>\n\n                                <g class=\"pssc-g-single\">\n                                    <rect class=\"pssc-sch-plate\" x=\"28\" y=\"72\" width=\"144\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <rect class=\"pssc-sch-plate\" x=\"28\" y=\"102\" width=\"144\" height=\"22\" rx=\"1.5\" stroke-width=\"1\"\/>\n                                    <line class=\"pssc-sch-dash\" x1=\"28\" y1=\"96\" x2=\"172\" y2=\"96\" stroke-width=\"1\"\/>\n                                    <line class=\"pssc-sch-force\" x1=\"176\" y1=\"83\" x2=\"196\" y2=\"83\" stroke-width=\"2.2\"\/>\n                                    <polygon class=\"pssc-sch-arrow\" points=\"188,78 198,83 188,88\"\/>\n                                    <line class=\"pssc-sch-force\" x1=\"24\" y1=\"113\" x2=\"6\" y2=\"113\" stroke-width=\"2.2\"\/>\n                                    <polygon class=\"pssc-sch-arrow\" points=\"14,108 4,113 14,118\"\/>\n                                <\/g>\n\n                                <circle class=\"pssc-sch-pin\" cx=\"100\" cy=\"80\" r=\"5\" stroke-width=\"1.2\"\/>\n                                <rect class=\"pssc-sch-pin\" x=\"94\" y=\"80\" width=\"12\" height=\"28\" stroke-width=\"1.2\"\/>\n                                <circle class=\"pssc-sch-pin\" cx=\"100\" cy=\"108\" r=\"5\" stroke-width=\"1.2\"\/>\n                                <line x1=\"88\" y1=\"68\" x2=\"112\" y2=\"68\" stroke=\"#64748b\" stroke-width=\"0.8\"\/>\n                                <line x1=\"88\" y1=\"72\" x2=\"112\" y2=\"72\" stroke=\"#64748b\" stroke-width=\"0.8\"\/>\n                                <text class=\"pssc-sch-label\" x=\"100\" y=\"66\" text-anchor=\"middle\" style=\"font-size:9px\">d<\/text>\n\n                                <text class=\"pssc-sch-label\" id=\"psscSchForce\" x=\"100\" y=\"188\" text-anchor=\"middle\">&mdash;<\/text>\n                                <text class=\"pssc-sch-label\" x=\"100\" y=\"204\" text-anchor=\"middle\" style=\"font-size:10px\">load per pin<\/text>\n                                <text class=\"pssc-sch-label\" x=\"100\" y=\"222\" text-anchor=\"middle\" style=\"font-size:10px\">F &rarr; clevis \/ hinge joint<\/text>\n                            <\/svg>\n                        <\/div>\n                        <div class=\"pssc-gauge-row\">\n                            <svg class=\"pssc-gauge-svg\" viewBox=\"0 0 240 140\" aria-hidden=\"true\">\n                                <defs>\n                                    <linearGradient id=\"psscGaugeGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                                        <stop offset=\"0%\" stop-color=\"#dc2626\"\/>\n                                        <stop offset=\"25%\" stop-color=\"#d97706\"\/>\n                                        <stop offset=\"55%\" stop-color=\"#059669\"\/>\n                                        <stop offset=\"100%\" stop-color=\"#047857\"\/>\n                                    <\/linearGradient>\n                                <\/defs>\n                                <path d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"#e8eef4\" stroke-width=\"14\" stroke-linecap=\"round\"\/>\n                                <path id=\"psscGaugeArc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#psscGaugeGrad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\"\/>\n                                <g id=\"psscNeedle\" 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=\"pssc-gauge-label\">Safety factor indicator<\/div>\n                                <div class=\"pssc-gauge-readout\" id=\"psscGaugeRead\">&mdash;<\/div>\n                                <div class=\"pssc-gauge-label\" id=\"psscGaugeNote\" style=\"margin-top:0.25rem\">Safety factor (scale 0&ndash;4)<\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-util\">\n                        <div class=\"pssc-util-head\">\n                            <span>Load utilization<\/span>\n                            <strong id=\"psscOutUtil\">&mdash;<\/strong>\n                        <\/div>\n                        <div class=\"pssc-util-track\" aria-hidden=\"true\">\n                            <div class=\"pssc-util-zones\"><span class=\"pssc-z-ok\"><\/span><span class=\"pssc-z-hi\"><\/span><\/div>\n                            <div class=\"pssc-util-fill\" id=\"psscUtilFill\"><\/div>\n                        <\/div>\n                        <div class=\"pssc-util-legend\">\n                            <span><i style=\"background:#6ee7b7\"><\/i> &le; 85% allowable<\/span>\n                            <span><i style=\"background:#fcd34d\"><\/i> 85&ndash;100% caution<\/span>\n                            <span><i style=\"background:#fca5a5\"><\/i> &gt; 100% high risk<\/span>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-chart\">\n                        <div class=\"pssc-chart-title\">Shear stress comparison<\/div>\n                        <div class=\"pssc-bar-row\">\n                            <span class=\"pssc-bar-k\">Actual &tau;<\/span>\n                            <div class=\"pssc-bar-track\"><div class=\"pssc-bar-fill\" id=\"psscBarTau\"><\/div><\/div>\n                            <span class=\"pssc-bar-v\" id=\"psscBarTauVal\">&mdash;<\/span>\n                        <\/div>\n                        <div class=\"pssc-bar-row\">\n                            <span class=\"pssc-bar-k\">Allowable &tau;<sub>allow<\/sub><\/span>\n                            <div class=\"pssc-bar-track\"><div class=\"pssc-bar-fill pssc-bar-sa\" id=\"psscBarTa\"><\/div><\/div>\n                            <span class=\"pssc-bar-v\" id=\"psscBarTaVal\">&mdash;<\/span>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-tiles\">\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Pin cross-section area<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutArea\">&mdash;<\/div>\n                            <div class=\"pssc-u\">A = &pi;d&sup2;\/4<\/div>\n                        <\/div>\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Effective shear area<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutAeff\">&mdash;<\/div>\n                            <div class=\"pssc-u\">single or double shear<\/div>\n                        <\/div>\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Allowable shear stress<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutTauAllow\">&mdash;<\/div>\n                            <div class=\"pssc-u\">&tau;<sub>strength<\/sub> \/ SF<\/div>\n                        <\/div>\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Load per pin<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutFpin\">&mdash;<\/div>\n                            <div class=\"pssc-u\" id=\"psscOutFpinNote\">F &times; share \/ n<\/div>\n                        <\/div>\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Bearing stress<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutBearing\">&mdash;<\/div>\n                            <div class=\"pssc-u\" id=\"psscOutBearingNote\">optional check<\/div>\n                        <\/div>\n                        <div class=\"pssc-tile\">\n                            <div class=\"pssc-k\">Governing condition<\/div>\n                            <div class=\"pssc-v\" id=\"psscOutGoverning\">&mdash;<\/div>\n                            <div class=\"pssc-u\">Pin Shear \/ Bearing \/ Bending<\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pssc-alerts\" id=\"psscAlerts\"><\/div>\n                <\/div>\n            <\/section>\n        <\/aside>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">(function(){var r=document.getElementById(\"pin-shear-calculator\");if(!r)return;var p=r.querySelectorAll(\".pssc-js-chunk\"),b=\"\",i;for(i=0;i<p.length;i++)b+=p[i].textContent;if(!b)return;try{(new Function(atob(b)))();}catch(e){console.error(\"Pin Shear Strength Calculator failed:\",e);}})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Pin Shear Strength Calculator is a practical engineering tool designed to calculate the shear stress, allowable load, required diameter, and safety factor of pins&#8230;<\/p>","protected":false},"author":2,"featured_media":24756,"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":[8639,8640,8638,8605],"class_list":["post-24755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-pin-calculator","tag-pin-design","tag-pin-shear","tag-shear-strength","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Pin-Shear-Strength-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24755"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24755\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24756"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24755"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}