{"id":24770,"date":"2026-08-28T06:51:16","date_gmt":"2026-08-28T06:51:16","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24770"},"modified":"2026-08-28T07:08:18","modified_gmt":"2026-08-28T07:08:18","slug":"yield-strength-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/yield-strength-calculator\/","title":{"rendered":"Yield Strength Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Yield Strength Calculator<\/strong> is a practical engineering tool designed to calculate yield stress, allowable load, required cross-sectional area, safety factor, and yield utilization for mechanical components under applied loads. By entering material yield strength, component dimensions, and loading conditions, users can quickly evaluate whether a design remains within the elastic range. The Yield Strength Calculator helps engineers optimize material selection, component sizing, and structural safety while reducing the risk of permanent deformation and yielding failure.<\/p>\n\n\n\n<!-- Yield Strength Calculator - WordPress Custom HTML Block -->\n<!-- Paste entire file. CSS inline + JS via base64 loader (WordPress-safe). -->\n<style>\n\/* Yield Strength Calculator - WordPress-safe scoped styles *\/\n\/* All rules scoped under #ysc-calculator \u2014 resistant to theme overrides *\/\n\n#ysc-calculator.ysc-calculator {\n    --ysc-primary: #1a5276;\n    --ysc-primary-light: #2471a3;\n    --ysc-primary-dark: #0e3352;\n    --ysc-accent: #e67e22;\n    --ysc-safe: #27ae60;\n    --ysc-caution: #f39c12;\n    --ysc-danger: #c0392b;\n    --ysc-neutral: #7f8c8d;\n    --ysc-bg: #ecf0f1;\n    --ysc-card-bg: #ffffff;\n    --ysc-border: #d5dbdb;\n    --ysc-text: #2c3e50;\n    --ysc-text-muted: #5d6d7e;\n    --ysc-shadow: 0 2px 12px rgba(26, 82, 118, 0.08);\n    --ysc-radius: 8px;\n    --ysc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --ysc-mono: 'Consolas', 'Courier New', monospace;\n\n    box-sizing: border-box !important;\n    display: block !important;\n    max-width: 1000px !important;\n    width: 100% !important;\n    margin: 0 auto !important;\n    padding: 1.5rem 1rem !important;\n    font-family: var(--ysc-font) !important;\n    color: var(--ysc-text) !important;\n    line-height: 1.6 !important;\n    font-size: 16px !important;\n    text-align: left !important;\n    background: transparent !important;\n    border: none !important;\n    float: none !important;\n    position: relative !important;\n    isolation: isolate;\n}\n\n#ysc-calculator.ysc-calculator *,\n#ysc-calculator.ysc-calculator *::before,\n#ysc-calculator.ysc-calculator *::after {\n    box-sizing: border-box !important;\n}\n\n\/* WordPress theme reset \u2014 prevent inherited form\/typography styles *\/\n#ysc-calculator.ysc-calculator div,\n#ysc-calculator.ysc-calculator section,\n#ysc-calculator.ysc-calculator form,\n#ysc-calculator.ysc-calculator fieldset {\n    float: none !important;\n    clear: none !important;\n    max-width: none;\n}\n\n#ysc-calculator.ysc-calculator form {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: transparent !important;\n}\n\n#ysc-calculator.ysc-calculator fieldset.ysc-input-section {\n    border: none !important;\n    margin: 0 0 1.25rem 0 !important;\n    padding: 0 !important;\n    min-width: 0 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-card {\n    background: var(--ysc-card-bg) !important;\n    border-radius: var(--ysc-radius) !important;\n    box-shadow: var(--ysc-shadow) !important;\n    border: 1px solid var(--ysc-border) !important;\n    padding: 1.5rem !important;\n    margin: 0 0 1.5rem 0 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 1.5rem !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-panel-header {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    gap: 0.75rem !important;\n    margin-bottom: 1.25rem !important;\n    padding-bottom: 0.75rem !important;\n    border-bottom: 2px solid var(--ysc-bg) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-panel-header h2 {\n    font-size: 1.25rem !important;\n    color: var(--ysc-primary) !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    font-weight: 600 !important;\n    line-height: 1.3 !important;\n    font-family: var(--ysc-font) !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    border: none !important;\n    background: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-unit-toggle {\n    display: flex !important;\n    flex-direction: row !important;\n    border-radius: var(--ysc-radius) !important;\n    overflow: hidden !important;\n    border: 1px solid var(--ysc-border) !important;\n    background: transparent !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-unit-btn {\n    display: inline-block !important;\n    padding: 0.4rem 1rem !important;\n    border: none !important;\n    border-radius: 0 !important;\n    background: var(--ysc-bg) !important;\n    color: var(--ysc-text-muted) !important;\n    cursor: pointer !important;\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    box-shadow: none !important;\n    min-height: unset !important;\n    height: auto !important;\n    width: auto !important;\n    margin: 0 !important;\n    transition: background 0.2s !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-unit-btn.ysc-active {\n    background: var(--ysc-primary) !important;\n    color: #ffffff !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-unit-btn:hover:not(.ysc-active) {\n    background: #dfe6e9 !important;\n    color: var(--ysc-text-muted) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-input-section legend {\n    display: block !important;\n    float: none !important;\n    width: 100% !important;\n    font-weight: 600 !important;\n    color: var(--ysc-primary-dark) !important;\n    font-size: 0.9rem !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.04em !important;\n    margin: 0 0 0.75rem 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: transparent !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-form-row {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 1rem !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-form-group {\n    display: block !important;\n    margin-bottom: 0.85rem !important;\n    padding: 0 !important;\n    width: 100% !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-form-group label {\n    display: block !important;\n    font-size: 0.875rem !important;\n    font-weight: 600 !important;\n    margin: 0 0 0.35rem 0 !important;\n    padding: 0 !important;\n    color: var(--ysc-text) !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n    text-transform: none !important;\n    cursor: default !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-optional {\n    font-weight: 400 !important;\n    color: var(--ysc-text-muted) !important;\n    font-size: 0.8rem !important;\n}\n\n#ysc-calculator.ysc-calculator input[type=\"number\"],\n#ysc-calculator.ysc-calculator select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 0.55rem 0.75rem !important;\n    border: 1px solid var(--ysc-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.95rem !important;\n    font-family: var(--ysc-font) !important;\n    background: #ffffff !important;\n    color: var(--ysc-text) !important;\n    transition: border-color 0.2s, box-shadow 0.2s !important;\n    margin: 0 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    line-height: 1.4 !important;\n    box-shadow: none !important;\n    appearance: auto !important;\n    -webkit-appearance: auto !important;\n    outline: none !important;\n    float: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n#ysc-calculator.ysc-calculator input[type=\"number\"]:focus,\n#ysc-calculator.ysc-calculator select:focus {\n    border-color: var(--ysc-primary-light) !important;\n    box-shadow: 0 0 0 3px rgba(36, 113, 163, 0.15) !important;\n    outline: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-input-with-unit {\n    display: flex !important;\n    flex-direction: row !important;\n    align-items: stretch !important;\n    gap: 0.5rem !important;\n    width: 100% !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-input-with-unit input[type=\"number\"] {\n    flex: 1 1 auto !important;\n    width: auto !important;\n    min-width: 0 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-unit-label {\n    display: flex !important;\n    align-items: center !important;\n    flex-shrink: 0 !important;\n    padding: 0 0.65rem !important;\n    background: var(--ysc-bg) !important;\n    border: 1px solid var(--ysc-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.8rem !important;\n    font-weight: 600 !important;\n    color: var(--ysc-text-muted) !important;\n    white-space: nowrap !important;\n    min-width: 3rem !important;\n    justify-content: center !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n}\n\n#ysc-calculator.ysc-calculator select.ysc-inline-unit {\n    display: block !important;\n    width: auto !important;\n    flex: 0 0 auto !important;\n    min-width: 4.5rem !important;\n    padding: 0.55rem 0.5rem !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-tooltip {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 16px !important;\n    height: 16px !important;\n    border-radius: 50% !important;\n    background: var(--ysc-primary-light) !important;\n    color: #ffffff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    position: relative !important;\n    vertical-align: middle !important;\n    margin-left: 0.25rem !important;\n    border: none !important;\n    padding: 0 !important;\n    line-height: 1 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-tooltip::after {\n    content: attr(data-tip) !important;\n    position: absolute !important;\n    bottom: calc(100% + 6px) !important;\n    left: 50% !important;\n    transform: translateX(-50%) !important;\n    background: var(--ysc-primary-dark) !important;\n    color: #ffffff !important;\n    padding: 0.4rem 0.6rem !important;\n    border-radius: 4px !important;\n    font-size: 0.75rem !important;\n    font-weight: 400 !important;\n    white-space: normal !important;\n    width: max-content !important;\n    max-width: 220px !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n    transition: opacity 0.2s !important;\n    z-index: 100 !important;\n    text-transform: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-tooltip:hover::after {\n    opacity: 1 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-hidden {\n    display: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-form-actions {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    justify-content: center !important;\n    align-items: center !important;\n    gap: 0.75rem !important;\n    margin-top: 1rem !important;\n    padding: 0 !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-btn {\n    display: inline-block !important;\n    padding: 0.75rem 1.5rem !important;\n    border: none !important;\n    border-radius: 6px !important;\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    box-shadow: none !important;\n    min-height: unset !important;\n    height: auto !important;\n    margin: 0 !important;\n    transition: transform 0.2s, box-shadow 0.2s !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-btn-primary {\n    background: linear-gradient(135deg, var(--ysc-primary) 0%, var(--ysc-primary-light) 100%) !important;\n    color: #ffffff !important;\n    width: 33.33% !important;\n    min-width: 140px !important;\n    max-width: 100% !important;\n}\n\n#ysc-calculator.ysc-calculator button.ysc-btn-primary:hover,\n#ysc-calculator.ysc-calculator button.ysc-btn-primary:focus {\n    transform: translateY(-1px) !important;\n    box-shadow: 0 4px 12px rgba(26, 82, 118, 0.3) !important;\n    color: #ffffff !important;\n    background: linear-gradient(135deg, var(--ysc-primary) 0%, var(--ysc-primary-light) 100%) !important;\n    border: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-status-badge {\n    display: inline-block !important;\n    padding: 0.35rem 0.85rem !important;\n    border-radius: 20px !important;\n    font-size: 0.8rem !important;\n    font-weight: 700 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n    font-family: var(--ysc-font) !important;\n    line-height: 1.4 !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-status-neutral {\n    background: #ecf0f1 !important;\n    color: var(--ysc-neutral) !important;\n    border: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-status-safe {\n    background: rgba(39, 174, 96, 0.15) !important;\n    color: var(--ysc-safe) !important;\n    border: 1px solid var(--ysc-safe) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-status-caution {\n    background: rgba(243, 156, 18, 0.15) !important;\n    color: #d68910 !important;\n    border: 1px solid var(--ysc-caution) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-status-danger {\n    background: rgba(192, 57, 43, 0.12) !important;\n    color: var(--ysc-danger) !important;\n    border: 1px solid var(--ysc-danger) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-error-box,\n#ysc-calculator.ysc-calculator .ysc-warning-box {\n    padding: 0.85rem 1rem !important;\n    border-radius: 6px !important;\n    margin-bottom: 1rem !important;\n    font-size: 0.9rem !important;\n    font-family: var(--ysc-font) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-error-box {\n    background: rgba(192, 57, 43, 0.08) !important;\n    border: 1px solid var(--ysc-danger) !important;\n    color: var(--ysc-danger) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-warning-box {\n    background: rgba(243, 156, 18, 0.08) !important;\n    border: 1px solid var(--ysc-caution) !important;\n    color: #b7950b !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-error-box ul,\n#ysc-calculator.ysc-calculator .ysc-warning-box ul {\n    margin: 0.35rem 0 0 1.25rem !important;\n    padding: 0 !important;\n    list-style: disc !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-visual-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 1rem !important;\n    margin-bottom: 1.25rem !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-viz-card {\n    background: var(--ysc-bg) !important;\n    border-radius: 6px !important;\n    padding: 0.75rem !important;\n    border: 1px solid var(--ysc-border) !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-viz-card h3 {\n    font-size: 0.8rem !important;\n    color: var(--ysc-text-muted) !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n    margin: 0 0 0.5rem 0 !important;\n    padding: 0 !important;\n    text-align: center !important;\n    font-weight: 600 !important;\n    line-height: 1.3 !important;\n    font-family: var(--ysc-font) !important;\n    border: none !important;\n    background: none !important;\n}\n\n#ysc-calculator.ysc-calculator .ysc-viz-card svg {\n    width: 100% !important;\n    height: auto !important;\n    display: block !important;\n    max-width: 100% !important;\n}\n\n@media (max-width: 600px) {\n    #ysc-calculator.ysc-calculator .ysc-form-row {\n        grid-template-columns: 1fr !important;\n    }\n\n    #ysc-calculator.ysc-calculator button.ysc-btn-primary {\n        width: 100% !important;\n    }\n}\n\n@media (max-width: 700px) {\n    #ysc-calculator.ysc-calculator .ysc-visual-grid {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n@media print {\n    #ysc-calculator.ysc-calculator .ysc-form-actions,\n    #ysc-calculator.ysc-calculator .ysc-unit-toggle {\n        display: none !important;\n    }\n\n    #ysc-calculator.ysc-calculator .ysc-card {\n        box-shadow: none !important;\n        break-inside: avoid;\n    }\n}\n\n<\/style>\n<div id=\"ysc-calculator\" class=\"ysc-calculator\">\n        <div class=\"ysc-layout\">\n            <section class=\"ysc-input-panel ysc-card\" aria-label=\"Calculator inputs\">\n                <div class=\"ysc-panel-header\">\n                    <h2>Input Parameters<\/h2>\n                    <div class=\"ysc-unit-toggle\" role=\"group\" aria-label=\"Unit system\">\n                        <button type=\"button\" class=\"ysc-unit-btn ysc-active\" data-unit=\"metric\">Metric<\/button>\n                        <button type=\"button\" class=\"ysc-unit-btn\" data-unit=\"imperial\">Imperial<\/button>\n                    <\/div>\n                <\/div>\n\n                <form id=\"ysc-calcForm\" novalidate>\n                    <fieldset class=\"ysc-input-section\">\n                        <legend>Calculation Mode<\/legend>\n                        <div class=\"ysc-form-group\">\n                            <label for=\"ysc-calcMode\">Mode<\/label>\n                            <select id=\"ysc-calcMode\" name=\"calcMode\">\n                                <option value=\"yieldCheck\">Yield Stress Check<\/option>\n                                <option value=\"maxYieldLoad\">Maximum Yield Load<\/option>\n                                <option value=\"allowableLoad\">Allowable Load<\/option>\n                                <option value=\"requiredArea\">Required Area<\/option>\n                                <option value=\"requiredDiameter\">Required Diameter<\/option>\n                                <option value=\"combinedStress\">Combined Stress Check<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"ysc-input-section\">\n                        <legend>Geometry<\/legend>\n                        <div class=\"ysc-form-row\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-componentType\">Component Type<\/label>\n                                <select id=\"ysc-componentType\" name=\"componentType\">\n                                    <option value=\"roundRod\">Round Rod<\/option>\n                                    <option value=\"hollowTube\">Hollow Tube<\/option>\n                                    <option value=\"rectBar\">Rectangular Bar<\/option>\n                                    <option value=\"flatPlate\">Flat Plate<\/option>\n                                    <option value=\"shaft\">Shaft<\/option>\n                                    <option value=\"bracket\">Bracket<\/option>\n                                    <option value=\"custom\">Custom<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-sectionType\">Cross-Section Type<\/label>\n                                <select id=\"ysc-sectionType\" name=\"sectionType\">\n                                    <option value=\"solidRound\">Solid Round<\/option>\n                                    <option value=\"hollowRound\">Hollow Round<\/option>\n                                    <option value=\"rectangle\">Rectangle<\/option>\n                                    <option value=\"customArea\">Custom Area<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group ysc-geom-field\" data-section=\"solidRound shaft roundRod\">\n                            <label for=\"ysc-diameter\">\n                                Diameter\n                                <span class=\"ysc-tooltip\" data-tip=\"Solid round section outer diameter\">?<\/span>\n                            <\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-diameter\" name=\"diameter\" value=\"20\" min=\"0.001\" step=\"any\">\n                                <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-row ysc-geom-field ysc-hidden\" data-section=\"hollowRound hollowTube\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-outerDiameter\">Outer Diameter<\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-outerDiameter\" name=\"outerDiameter\" value=\"30\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-innerDiameter\">Inner Diameter<\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-innerDiameter\" name=\"innerDiameter\" value=\"20\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-row ysc-geom-field ysc-hidden\" data-section=\"rectangle rectBar flatPlate bracket\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-width\">Width<\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-width\" name=\"width\" value=\"40\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-thickness\">Thickness<\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-thickness\" name=\"thickness\" value=\"10\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group ysc-geom-field ysc-hidden\" data-section=\"customArea custom\">\n                            <label for=\"ysc-customArea\">Custom Cross-Sectional Area<\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-customArea\" name=\"customArea\" value=\"314.16\" min=\"0.001\" step=\"any\">\n                                <span class=\"ysc-unit-label\" data-unit-key=\"area\">mm\u00b2<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group\">\n                            <label for=\"ysc-netArea\">\n                                Net Section Area <span class=\"ysc-optional\">(optional)<\/span>\n                                <span class=\"ysc-tooltip\" data-tip=\"Use for holes, slots, threads, grooves, or notches\">?<\/span>\n                            <\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-netArea\" name=\"netArea\" placeholder=\"Leave blank to use gross area\" min=\"0.001\" step=\"any\">\n                                <span class=\"ysc-unit-label\" data-unit-key=\"area\">mm\u00b2<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group\">\n                            <label for=\"ysc-componentLength\">\n                                Component Length <span class=\"ysc-optional\">(optional)<\/span>\n                            <\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-componentLength\" name=\"componentLength\" placeholder=\"For elongation\" min=\"0.001\" step=\"any\">\n                                <span class=\"ysc-unit-label\" data-unit-key=\"length\">mm<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"ysc-input-section\">\n                        <legend>Material<\/legend>\n                        <div class=\"ysc-form-row\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-material\">Material Preset<\/label>\n                                <select id=\"ysc-material\" name=\"material\">\n                                    <option value=\"structuralSteel\" selected>Structural Steel<\/option>\n                                    <option value=\"carbonSteel\">Carbon Steel<\/option>\n                                    <option value=\"alloySteel\">Alloy Steel<\/option>\n                                    <option value=\"stainlessSteel\">Stainless Steel<\/option>\n                                    <option value=\"aluminum\">Aluminum Alloy<\/option>\n                                    <option value=\"titanium\">Titanium Alloy<\/option>\n                                    <option value=\"brass\">Brass<\/option>\n                                    <option value=\"copper\">Copper<\/option>\n                                    <option value=\"custom\">Custom Material<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-yieldStrength\">Yield Strength<\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-yieldStrength\" name=\"yieldStrength\" value=\"355\" min=\"0.001\" step=\"any\" required>\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"stress\">MPa<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                        <div class=\"ysc-form-row\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-ultimateStrength\">Ultimate Tensile Strength <span class=\"ysc-optional\">(optional)<\/span><\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-ultimateStrength\" name=\"ultimateStrength\" value=\"510\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"stress\">MPa<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-youngsModulus\">Young&#8217;s Modulus <span class=\"ysc-optional\">(optional)<\/span><\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-youngsModulus\" name=\"youngsModulus\" placeholder=\"e.g. 210\" min=\"0.001\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"modulus\">GPa<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"ysc-input-section\">\n                        <legend>Loading &amp; Design<\/legend>\n                        <div class=\"ysc-form-group ysc-load-field\" data-mode=\"yieldCheck maxYieldLoad allowableLoad requiredArea requiredDiameter combinedStress\">\n                            <label for=\"ysc-appliedLoad\">Applied Axial Load<\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-appliedLoad\" name=\"appliedLoad\" value=\"50\" min=\"0\" step=\"any\">\n                                <select id=\"ysc-loadUnit\" class=\"ysc-inline-unit\" aria-label=\"Load unit\">\n                                    <option value=\"kN\">kN<\/option>\n                                    <option value=\"N\">N<\/option>\n                                    <option value=\"lbf\">lbf<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group ysc-load-field ysc-hidden\" data-mode=\"combinedStress\">\n                            <label for=\"ysc-appliedShearLoad\">Applied Shear Load <span class=\"ysc-optional\">(optional)<\/span><\/label>\n                            <div class=\"ysc-input-with-unit\">\n                                <input type=\"number\" id=\"ysc-appliedShearLoad\" name=\"appliedShearLoad\" value=\"0\" min=\"0\" step=\"any\">\n                                <select id=\"ysc-shearLoadUnit\" class=\"ysc-inline-unit\" aria-label=\"Shear load unit\">\n                                    <option value=\"kN\">kN<\/option>\n                                    <option value=\"N\">N<\/option>\n                                    <option value=\"lbf\">lbf<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-row ysc-load-field ysc-hidden\" data-mode=\"combinedStress\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-directNormalStress\">Direct Normal Stress <span class=\"ysc-optional\">(optional)<\/span><\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-directNormalStress\" name=\"directNormalStress\" placeholder=\"Override calculated \u03c3\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"stress\">MPa<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-directShearStress\">Direct Shear Stress <span class=\"ysc-optional\">(optional)<\/span><\/label>\n                                <div class=\"ysc-input-with-unit\">\n                                    <input type=\"number\" id=\"ysc-directShearStress\" name=\"directShearStress\" placeholder=\"Override calculated \u03c4\" step=\"any\">\n                                    <span class=\"ysc-unit-label\" data-unit-key=\"stress\">MPa<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-row\">\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-safetyFactor\">\n                                    Design Safety Factor\n                                    <span class=\"ysc-tooltip\" data-tip=\"Allowable stress = yield strength \/ SF\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"ysc-safetyFactor\" name=\"safetyFactor\" value=\"2.0\" min=\"0.001\" step=\"any\" required>\n                            <\/div>\n                            <div class=\"ysc-form-group\">\n                                <label for=\"ysc-stressConcentration\">\n                                    Stress Concentration Factor K<sub>t<\/sub>\n                                    <span class=\"ysc-tooltip\" data-tip=\"Local stress = K_t \u00d7 nominal stress\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"ysc-stressConcentration\" name=\"stressConcentration\" value=\"1.0\" min=\"0.001\" step=\"any\">\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ysc-form-group ysc-criterion-field ysc-hidden\" data-mode=\"combinedStress\">\n                            <label for=\"ysc-yieldCriterion\">Yield Criterion<\/label>\n                            <select id=\"ysc-yieldCriterion\" name=\"yieldCriterion\">\n                                <option value=\"direct\">Direct Stress<\/option>\n                                <option value=\"vonMises\">Von Mises<\/option>\n                                <option value=\"tresca\">Tresca<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/fieldset>\n\n                    <div class=\"ysc-form-actions\">\n                        <button type=\"submit\" class=\"ysc-btn ysc-btn-primary\" id=\"ysc-calculateBtn\">Calculate<\/button>\n                    <\/div>\n                <\/form>\n            <\/section>\n\n            <section class=\"ysc-results-panel ysc-card ysc-hidden\" id=\"ysc-resultsPanel\" aria-label=\"Calculation results\">\n                <div class=\"ysc-panel-header\">\n                    <h2>Results<\/h2>\n                    <div id=\"ysc-statusBadge\" class=\"ysc-status-badge ysc-status-neutral\">Awaiting Input<\/div>\n                <\/div>\n\n                <div id=\"ysc-errorBox\" class=\"ysc-error-box ysc-hidden\" role=\"alert\"><\/div>\n                <div id=\"ysc-warningBox\" class=\"ysc-warning-box ysc-hidden\" role=\"status\"><\/div>\n\n                <div class=\"ysc-visual-grid\">\n                    <div class=\"ysc-viz-card\">\n                        <h3>Axial Loading<\/h3>\n                        <svg id=\"ysc-axialDiagram\" viewBox=\"0 0 280 120\" aria-hidden=\"true\"><\/svg>\n                    <\/div>\n                    <div class=\"ysc-viz-card\">\n                        <h3>Stress Comparison<\/h3>\n                        <svg id=\"ysc-stressComparison\" viewBox=\"0 0 280 120\" aria-hidden=\"true\"><\/svg>\n                    <\/div>\n                    <div class=\"ysc-viz-card\">\n                        <h3>Stress-Strain Curve<\/h3>\n                        <svg id=\"ysc-stressStrainCurve\" viewBox=\"0 0 280 160\" aria-hidden=\"true\"><\/svg>\n                    <\/div>\n                    <div class=\"ysc-viz-card\">\n                        <h3>Yield Utilization<\/h3>\n                        <svg id=\"ysc-utilizationGauge\" viewBox=\"0 0 200 140\" aria-hidden=\"true\"><\/svg>\n                    <\/div>\n                <\/div>\n            <\/section>\n        <\/div>\n    <\/div>\n<script>\n(function(){\n  var r=document.getElementById('ysc-calculator');\n  if(!r){return;}\n  try{\n    var p=[\"LyoqDQogKiBZaWVsZCBTdHJlbmd0aCBDYWxjdWxhdG9yDQogKiBTY29wZWQgZm9yIFdvcmRQcmVzcyBlbWJlZCAtIGRvZXMgbm90IGFmZmVjdCBlbGVtZW50cyBvdXRzaWRlICN5c2MtY2FsY3VsYXRvcg0KICovDQoNCihmdW5jdGlvbiAoKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5c2MtY2FsY3VsYXRvcicpOw0KICAgIGlmICghcm9vdCkgcmV0dXJuOw0KDQogICAgZnVuY3Rpb24gJChpZCkgew0KICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCcjeXNjLScgKyBpZCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gJGFsbChzZWwpIHsNCiAgICAgICAgcmV0dXJuIHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWwpOw0KICAgIH0NCg0KICAgIC8vIOKUgOKUgOKUgCBNYXRlcmlhbCBQcmVzZXRzIChpbnRlcm5hbDogTVBhIGZvciBzdHJlc3MsIEdQYSBmb3IgRSkg4pSA4pSA4pSADQogICAgY29uc3QgTUFURVJJQUxTID0gew0KICAgICAgICBzdHJ1Y3R1cmFsU3RlZWw6IHsgeWllbGQ6IDM1NSwgdWx0aW1hdGU6IDUxMCwgRTogMjEwIH0sDQogICAgICAgIGNhcmJvblN0ZWVsOiAgICAgeyB5aWVsZDogMjUwLCB1bHRpbWF0ZTogNDAwLCBFOiAyMDAgfSwNCiAgICAgICAgYWxsb3lTdGVlbDogICAgICB7IHlpZWxkOiA2OTAsIHVsdGltYXRlOiA4NjAsIEU6IDIwNSB9LA0KICAgICAgICBzdGFpbmxlc3NTdGVlbDogIHsgeWllbGQ6IDIwNSwgdWx0aW1hdGU6IDUxNSwgRTogMTkzIH0sDQogICAgICAgIGFsdW1pbnVtOiAgICAgICAgeyB5aWVsZDogMjc1LCB1bHRpbWF0ZTogMzEwLCBFOiA2OSB9LA0KICAgICAgICB0aXRhbml1bTogICAgICAgIHsgeWllbGQ6IDg4MCwgdWx0aW1hdGU6IDk1MCwgRTogMTE0IH0sDQogICAgICAgIGJyYXNzOiAgICAgICAgICAgeyB5aWVsZDogMTI0LCB1bHRpbWF0ZTogMzM4LCBFOiA5NyB9LA0KICAgICAgICBjb3BwZXI6ICAgICAgICAgIHsgeWllbGQ6IDcwLCAgdWx0aW1hdGU6IDIyMCwgRTogMTE3IH0sDQogICAgICAgIGN1c3RvbTogICAgICAgICAgeyB5aWVsZDogbnVsbCwgdWx0aW1hdGU6IG51bGwsIEU6IG51bGwgfQ0KICAgIH07DQoNCiAgICBjb25zdCBVTklUUyA9IHsNCiAgICAgICAgbWV0cmljOiB7DQogICAgICAgICAgICBsZW5ndGg6ICdtbScsDQogICAgICAgICAgICBhcmVhOiAnbW3CsicsDQogICAgICAgICAgICBzdHJlc3M6ICdNUGEnLA0KICAgICAgICAgICAgbW9kdWx1czogJ0dQYScsDQogICAgICAgICAgICBzdHJhaW46ICfOvM61JywNCiAgICAgICAgICAgIGVsb25nYXRpb246ICdtbScNCiAgICAgICAgfSwNCiAgICAgICAgaW1wZXJpYWw6IHsNCiAgICAgICAgICAgIGxlbmd0aDogJ2luJywNCiAgICAgICAgICAgIGFyZWE6ICdpbsKyJywNCiAgICAgICAgICAgIHN0cmVzczogJ3BzaScsDQogICAgICAgICAgICBtb2R1bHVzOiAncHNpJywNCiAgICAgICAgICAgIHN0cmFpbjogJ868zrUnLA0KICAgICAgICAgICAgZWxvbmdhdGlvbjogJ2luJw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIGNvbnN0IENPTlYgPSB7DQogICAgICAgIGxlbmd0aFRvSW50ZXJuYWw6ICh2LCBzeXMpID0+IHN5cyA9PT0gJ2ltcGVyaWFsJyA\/IHYgKiAyNS40IDogdiwNCiAgICAgICAgbGVuZ3RoRnJvbUludGVybmFsOiAodiwgc3lzKSA9PiBzeXMgPT09ICdpbXBlcmlhbCcgPyB2IC8gMjUuNCA6IHYsDQogICAgICAgIGFyZWFUb0ludGVybmFsOiAodiwgc3lzKSA9PiBzeXMgPT09ICdpbXBlcmlhbCcgPyB2ICogNjQ1LjE2IDogdiwNCiAgICAgICAgYXJlYUZyb21JbnRlcm5hbDogKHYsIHN5cykgPT4gc3lzID09PSAnaW1wZXJpYWwnID8gdiAvIDY0NS4xNiA6IHYsDQogICAgICAgIHN0cmVzc1RvSW50ZXJuYWw6ICh2LCBzeXMpID0+IHN5cyA9PT0gJ2ltcGVyaWFsJyA\/IHYgKiAwLjAwNjg5NDc2IDogdiwNCiAgICAgICAgc3RyZXNzRnJvbUludGVybmFsOiAodiwgc3lzKSA9PiBzeXMgPT09ICdpbXBlcmlhbCcgPyB2IC8gMC4wMDY4OTQ3NiA6IHYsDQogICAgICAgIG1vZHVsdXNUb0ludGVybmFsOiAodiwgc3lzKSA9PiBzeXMgPT09ICdpbXBlcmlhbCcgPyB2ICogMC4wMDY4OTQ3NiAvIDEwMDAgOiB2LA0KICAgICAgICBtb2R1bHVzRnJvbUludGVybmFsOiAodiwgc3lzKSA9PiBzeXMgPT09ICdpbXBlcmlhbCcgPyAodiAqIDEwMDApIC8gMC4wMDY4OTQ3NiA6IHYsDQogICAgICAgIGxvYWRUb0ludGVybmFsOiAodiwgdW5pdCkgPT4gew0KICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdrTicpIHJldHVybiB2ICogMTAwMDsNCiAgICAgICAgICAgIGlmICh1bml0ID09PSAnbGJmJykgcmV0dXJuIHYgKiA0LjQ0ODIyOw0KICAgICAgICAgICAgcmV0dXJuIHY7DQogICAgICAgIH0sDQogICAgICAgIGxvYWRGcm9tSW50ZXJuYWw6ICh2LCBzeXMsIHByZWZVbml0KSA9PiB7DQogICAgICAgICAgICBpZiAoc3lzID09PSAnaW1wZXJpYWwnKSByZXR1cm4geyB2YWx1ZTogdiAvIDQuNDQ4MjIsIHVuaXQ6ICdsYmYnIH07DQogICAgICAgICAgICBpZiAocHJlZlVuaXQgPT09ICdrTicpIHJldHVybiB7IHZhbHVlOiB2IC8gMTAwMCwgdW5pdDogJ2tOJyB9Ow0KICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHYsIHVuaXQ6ICdOJyB9Ow0KICAgICAgICB9DQogICAgfTsNCg0KICAgIGxldCB1bml0U3lzdGVtID0gJ21ldHJpYyc7DQoNCiAgICBjb25zdCBmb3JtID0gJCgnY2FsY0Zvcm0nKTsNCiAgICBjb25zdCB1bml0QnRucyA9ICRhbGwoJy55c2MtdW5pdC1idG4nKTsNCiAgICBjb25zdCBjYWxjTW9kZSA9ICQoJ2NhbGNNb2RlJyk7DQogICAgY29uc3Qgc2VjdGlvblR5cGUgPSAkKCdzZWN0aW9uVHlwZScpOw0KICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAkKCdjb21wb25lbnRUeXBlJyk7DQogICAgY29uc3QgbWF0ZXJpYWxTZWxlY3QgPSAkKCdtYXRlcmlhbCcpOw0KICAgIGNvbnN0IHJlc3VsdHNQYW5lbCA9ICQoJ3Jlc3VsdHNQYW5lbCcpOw0KDQogICAgZnVuY3Rpb24gaW5pdCgpIHsNCiAgICAgICAgYmluZEV2ZW50cygpOw0KICAgICAgICBzeW5jQ29tcG9uZW50U2VjdGlvbigpOw0KICAgICAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsNCiAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICBoaWRlUmVzdWx0c1BhbmVsKCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHsNCiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoZSkgPT4gew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgY2FsY3VsYXRlKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHVuaXRCdG5zLmZvckVhY2goKGJ0bikgPT4gew0KICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc3dpdGNoVW5pdFN5c3RlbShidG4uZGF0YXNldC51bml0KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGNhbGNNb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSk7DQogICAgICAgIHNlY3Rpb25UeXBlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsNCiAgICAgICAgICAgIHN5bmNDb21wb25lbnRTZWN0aW9uKGZhbHNlKTsNCiAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICB9KTsNCiAgICAgICAgY29tcG9uZW50VHlwZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7DQogICAgICAgICAgICBzeW5jQ29tcG9uZW50U2VjdGlvbih0cnVlKTsNCiAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBtYXRlcmlhbFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBhcHBseU1hdGVyaWFsUHJlc2V0KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93UmVzdWx0c1BhbmVsKCkgew0KICAgICAgICByZXN1bHRzUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgneXNjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGhpZGVSZXN1bHRzUGFuZWwoKSB7DQogICAgICAgIHJlc3VsdHNQYW5lbC5jbGFzc0xpc3QuYWRkKCd5c2MtaGlkZGVuJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc3dpdGNoVW5pdFN5c3RlbShzeXMpIHsNCiAgICAgICAgaWYgKHN5cyA9PT0gdW5pdFN5c3RlbSkgcmV0dXJuOw0KDQogICAgICAgIGNvbnN0IGZpZWxkcyA9IHsNCiAgICAgICAgICAgIGRpYW1ldGVyOiAnbGVuZ3RoJywNCiAgICAgICAgICAgIG91dGVyRGlhbWV0ZXI6ICdsZW5ndGgnLA0KICAgICAgICAgICAgaW5uZXJEaWFtZXRlcjogJ2xlbmd0aCcsDQogICAgICAgICAgICB3aWR0aDogJ2xlbmd0aCcsDQogICAgICAgICAgICB0aGlja25lc3M6ICdsZW5ndGgnLA0KICAgICAgICAgICAgY29tcG9uZW50TGVuZ3RoOiAnbGVuZ3RoJywNCiAgICAgICAgICAgIGN1c3RvbUFyZWE6ICdhcmVhJywNCiAgICAgICAgICAgIG5ldEFyZWE6ICdhcmVhJywNCiAgICAgICAgICAgIHlp\",\n    \"ZWxkU3RyZW5ndGg6ICdzdHJlc3MnLA0KICAgICAgICAgICAgdWx0aW1hdGVTdHJlbmd0aDogJ3N0cmVzcycsDQogICAgICAgICAgICBkaXJlY3ROb3JtYWxTdHJlc3M6ICdzdHJlc3MnLA0KICAgICAgICAgICAgZGlyZWN0U2hlYXJTdHJlc3M6ICdzdHJlc3MnLA0KICAgICAgICAgICAgeW91bmdzTW9kdWx1czogJ21vZHVsdXMnDQogICAgICAgIH07DQoNCiAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChbaWQsIHR5cGVdKSA9PiB7DQogICAgICAgICAgICBjb25zdCBlbCA9ICQoaWQpOw0KICAgICAgICAgICAgaWYgKCFlbCB8fCBlbC52YWx1ZSA9PT0gJycpIHJldHVybjsNCiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoZWwudmFsdWUpOw0KICAgICAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHJldHVybjsNCg0KICAgICAgICAgICAgbGV0IGludGVybmFsOw0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdsZW5ndGgnKSBpbnRlcm5hbCA9IENPTlYubGVuZ3RoVG9JbnRlcm5hbCh2YWwsIHVuaXRTeXN0ZW0pOw0KICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2FyZWEnKSBpbnRlcm5hbCA9IENPTlYuYXJlYVRvSW50ZXJuYWwodmFsLCB1bml0U3lzdGVtKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJlc3MnKSBpbnRlcm5hbCA9IENPTlYuc3RyZXNzVG9JbnRlcm5hbCh2YWwsIHVuaXRTeXN0ZW0pOw0KICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ21vZHVsdXMnKSBpbnRlcm5hbCA9IENPTlYubW9kdWx1c1RvSW50ZXJuYWwodmFsLCB1bml0U3lzdGVtKTsNCg0KICAgICAgICAgICAgbGV0IGRpc3BsYXk7DQogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2xlbmd0aCcpIGRpc3BsYXkgPSBDT05WLmxlbmd0aEZyb21JbnRlcm5hbChpbnRlcm5hbCwgc3lzKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdhcmVhJykgZGlzcGxheSA9IENPTlYuYXJlYUZyb21JbnRlcm5hbChpbnRlcm5hbCwgc3lzKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJlc3MnKSBkaXNwbGF5ID0gQ09OVi5zdHJlc3NGcm9tSW50ZXJuYWwoaW50ZXJuYWwsIHN5cyk7DQogICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnbW9kdWx1cycpIGRpc3BsYXkgPSBDT05WLm1vZHVsdXNGcm9tSW50ZXJuYWwoaW50ZXJuYWwsIHN5cyk7DQoNCiAgICAgICAgICAgIGVsLnZhbHVlID0gZm9ybWF0TnVtKGRpc3BsYXksIDQpOw0KICAgICAgICB9KTsNCg0KICAgICAgICB1bml0U3lzdGVtID0gc3lzOw0KICAgICAgICB1bml0QnRucy5mb3JFYWNoKChiKSA9PiBiLmNsYXNzTGlzdC50b2dnbGUoJ3lzYy1hY3RpdmUnLCBiLmRhdGFzZXQudW5pdCA9PT0gc3lzKSk7DQogICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgaGlkZVJlc3VsdHNQYW5lbCgpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgICAgIGNvbnN0IGxhYmVscyA9IFVOSVRTW3VuaXRTeXN0ZW1dOw0KICAgICAgICAkYWxsKCdbZGF0YS11bml0LWtleV0nKS5mb3JFYWNoKChlbCkgPT4gew0KICAgICAgICAgICAgY29uc3Qga2V5ID0gZWwuZGF0YXNldC51bml0S2V5Ow0KICAgICAgICAgICAgaWYgKGxhYmVsc1trZXldKSBlbC50ZXh0Q29udGVudCA9IGxhYmVsc1trZXldOw0KICAgICAgICB9KTsNCg0KICAgICAgICBjb25zdCBsb2FkVW5pdCA9ICQoJ2xvYWRVbml0Jyk7DQogICAgICAgIGNvbnN0IHNoZWFyTG9hZFVuaXQgPSAkKCdzaGVhckxvYWRVbml0Jyk7DQogICAgICAgIGlmICh1bml0U3lzdGVtID09PSAnaW1wZXJpYWwnKSB7DQogICAgICAgICAgICBsb2FkVW5pdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT0ibGJmIiBzZWxlY3RlZD5sYmY8L29wdGlvbj4nOw0KICAgICAgICAgICAgc2hlYXJMb2FkVW5pdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT0ibGJmIiBzZWxlY3RlZD5sYmY8L29wdGlvbj4nOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbG9hZFVuaXQuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9ImtOIiBzZWxlY3RlZD5rTjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Ik4iPk48L29wdGlvbj4nOw0KICAgICAgICAgICAgc2hlYXJMb2FkVW5pdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT0ia04iIHNlbGVjdGVkPmtOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iTiI+Tjwvb3B0aW9uPic7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBjb25zdCBDT01QT05FTlRfU0VDVElPTl9NQVAgPSB7DQogICAgICAgIHJvdW5kUm9kOiAnc29saWRSb3VuZCcsDQogICAgICAgIGhvbGxvd1R1YmU6ICdob2xsb3dSb3VuZCcsDQogICAgICAgIHJlY3RCYXI6ICdyZWN0YW5nbGUnLA0KICAgICAgICBmbGF0UGxhdGU6ICdyZWN0YW5nbGUnLA0KICAgICAgICBzaGFmdDogJ3NvbGlkUm91bmQnLA0KICAgICAgICBicmFja2V0OiAncmVjdGFuZ2xlJywNCiAgICAgICAgY3VzdG9tOiAnY3VzdG9tQXJlYScNCiAgICB9Ow0KDQogICAgZnVuY3Rpb24gc3luY0NvbXBvbmVudFNlY3Rpb24oZnJvbUNvbXBvbmVudCkgew0KICAgICAgICBpZiAoZnJvbUNvbXBvbmVudCkgew0KICAgICAgICAgICAgY29uc3QgY29tcCA9IGNvbXBvbmVudFR5cGUudmFsdWU7DQogICAgICAgICAgICBzZWN0aW9uVHlwZS52YWx1ZSA9IENPTVBPTkVOVF9TRUNUSU9OX01BUFtjb21wXSB8fCAnY3VzdG9tQXJlYSc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb25zdCBzZWMgPSBzZWN0aW9uVHlwZS52YWx1ZTsNCiAgICAgICAgICAgIGNvbnN0IHJldmVyc2UgPSB7DQogICAgICAgICAgICAgICAgc29saWRSb3VuZDogJ3JvdW5kUm9kJywNCiAgICAgICAgICAgICAgICBob2xsb3dSb3VuZDogJ2hvbGxvd1R1YmUnLA0KICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogJ3JlY3RCYXInLA0KICAgICAgICAgICAgICAgIGN1c3RvbUFyZWE6ICdjdXN0b20nDQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaWYgKHJldmVyc2Vbc2VjXSkgY29tcG9uZW50VHlwZS52YWx1ZSA9IHJldmVyc2Vbc2VjXTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpIHsNCiAgICAgICAgY29uc3QgbW9kZSA9IGNhbGNNb2RlLnZhbHVlOw0KICAgICAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvblR5cGUudmFsdWU7DQoNCiAgICAgICAgJGFsbCgnLnlzYy1nZW9tLWZpZWxkJykuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZWwuZGF0YXNldC5zZWN0aW9uLnNwbGl0KCcgJyk7DQogICAgICAgICAgICBjb25zdCBjb21wID0gY29tcG9uZW50VHlwZS52YWx1ZTsNCiAgICAgICAgICAgIGNvbnN0IG1hdGNoU2VjdGlvbiA9IHNlY3Rpb25zLmluY2x1ZGVzKHNlY3Rpb24pIHx8IHNlY3Rpb25zLmluY2x1ZGVzKGNvbXApOw0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgneXNjLWhpZGRlbicsICFtYXRjaFNlY3Rpb24pOw0KICAgICAgICB9KTsNCg0KICAgICAgICAkYWxsKCcueXNjLWxvYWQtZmllbGQnKS5mb3JFYWNoKChlbCkgPT4gew0KICAgICAgICAgICAgY29uc3QgbW9kZXMgPSBlbC5kYXRhc2V0Lm1vZGUuc3BsaXQoJyAnKTsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ3lzYy1oaWRkZW4nLCAhbW9kZXMuaW5jbHVkZXMobW9kZSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICAkYWxsKCcueXNjLWNyaXRlcmlvbi1maWVsZCcpLmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgICAgICBjb25zdCBtb2RlcyA9IGVsLmRhdGFzZXQubW9kZS5zcGxpdCgnICcpOw0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgneXNjLWhpZGRlbicsICFtb2Rlcy5pbmNsdWRlcyhtb2RlKSk7DQogICAgICAgIH0pOw0KDQogICAgICAgICRhbGwoJy55c2MtbG9hZC1maWVsZFtkYXRhLW1vZGUqPSJtYXhZaWVsZExvYWQiXScpLmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgICAgICBpZiAobW9kZSA9PT0gJ21heFlpZWxkTG9hZCcpIGVsLmNsYXNzTGlzdC5hZGQoJ3lzYy1oaWRkZW4nKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYXBwbHlNYXRlcmlhbFByZXNldCgpIHsNCiAgICAgICAgY29uc3QgbWF0ID0gTUFURVJJQUxTW21hdGVyaWFsU2VsZWN0LnZhbHVlXTsNCiAgICAgICAgaWYgKCFtYXQgfHwgbWF0ZXJpYWxTZWxlY3QudmFsdWUgPT09ICdjdXN0b20nKSByZXR1cm47DQoNCiAgICAgICAgJCgneWllbGRTdHJlbmd0aCcpLnZhbHVlID0gbWF0LnlpZWxkOw0KICAgICAgICAkKCd1bHRpbWF0ZVN0cmVuZ3RoJykudmFsdWUgPSBtYXQudWx0aW1hdGU7DQogICAgICAgIGlmIChtYXQuRSkgJCgneW91bmdzTW9kdWx1cycpLnZhbHVlID0gbWF0LkU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVhZElucHV0cygpIHsNCiAgICAgICAgY29uc3QgdmFsID0gKGlkKSA9PiB7DQogICAgICAgICAgICBjb25zdCBlbCA9\",\n    \"ICQoaWQpOw0KICAgICAgICAgICAgaWYgKCFlbCB8fCBlbC52YWx1ZSA9PT0gJycpIHJldHVybiBudWxsOw0KICAgICAgICAgICAgY29uc3QgbiA9IHBhcnNlRmxvYXQoZWwudmFsdWUpOw0KICAgICAgICAgICAgcmV0dXJuIGlzTmFOKG4pID8gbnVsbCA6IG47DQogICAgICAgIH07DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIG1vZGU6IGNhbGNNb2RlLnZhbHVlLA0KICAgICAgICAgICAgc2VjdGlvblR5cGU6IHNlY3Rpb25UeXBlLnZhbHVlLA0KICAgICAgICAgICAgZGlhbWV0ZXI6IHZhbCgnZGlhbWV0ZXInKSwNCiAgICAgICAgICAgIG91dGVyRGlhbWV0ZXI6IHZhbCgnb3V0ZXJEaWFtZXRlcicpLA0KICAgICAgICAgICAgaW5uZXJEaWFtZXRlcjogdmFsKCdpbm5lckRpYW1ldGVyJyksDQogICAgICAgICAgICB3aWR0aDogdmFsKCd3aWR0aCcpLA0KICAgICAgICAgICAgdGhpY2tuZXNzOiB2YWwoJ3RoaWNrbmVzcycpLA0KICAgICAgICAgICAgY3VzdG9tQXJlYTogdmFsKCdjdXN0b21BcmVhJyksDQogICAgICAgICAgICBuZXRBcmVhOiB2YWwoJ25ldEFyZWEnKSwNCiAgICAgICAgICAgIGNvbXBvbmVudExlbmd0aDogdmFsKCdjb21wb25lbnRMZW5ndGgnKSwNCiAgICAgICAgICAgIGFwcGxpZWRMb2FkOiB2YWwoJ2FwcGxpZWRMb2FkJykgPz8gMCwNCiAgICAgICAgICAgIGxvYWRVbml0OiAkKCdsb2FkVW5pdCcpLnZhbHVlLA0KICAgICAgICAgICAgYXBwbGllZFNoZWFyTG9hZDogdmFsKCdhcHBsaWVkU2hlYXJMb2FkJykgPz8gMCwNCiAgICAgICAgICAgIHNoZWFyTG9hZFVuaXQ6ICQoJ3NoZWFyTG9hZFVuaXQnKS52YWx1ZSwNCiAgICAgICAgICAgIGRpcmVjdE5vcm1hbFN0cmVzczogdmFsKCdkaXJlY3ROb3JtYWxTdHJlc3MnKSwNCiAgICAgICAgICAgIGRpcmVjdFNoZWFyU3RyZXNzOiB2YWwoJ2RpcmVjdFNoZWFyU3RyZXNzJyksDQogICAgICAgICAgICB5aWVsZFN0cmVuZ3RoOiB2YWwoJ3lpZWxkU3RyZW5ndGgnKSwNCiAgICAgICAgICAgIHVsdGltYXRlU3RyZW5ndGg6IHZhbCgndWx0aW1hdGVTdHJlbmd0aCcpLA0KICAgICAgICAgICAgeW91bmdzTW9kdWx1czogdmFsKCd5b3VuZ3NNb2R1bHVzJyksDQogICAgICAgICAgICBzYWZldHlGYWN0b3I6IHZhbCgnc2FmZXR5RmFjdG9yJyksDQogICAgICAgICAgICBzdHJlc3NDb25jZW50cmF0aW9uOiB2YWwoJ3N0cmVzc0NvbmNlbnRyYXRpb24nKSA\/PyAxLA0KICAgICAgICAgICAgeWllbGRDcml0ZXJpb246ICQoJ3lpZWxkQ3JpdGVyaW9uJykudmFsdWUNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2YWxpZGF0ZShpbnB1dHMsIGFyZWEpIHsNCiAgICAgICAgY29uc3QgZXJyb3JzID0gW107DQogICAgICAgIGNvbnN0IHdhcm5pbmdzID0gW107DQoNCiAgICAgICAgaWYgKCFpbnB1dHMueWllbGRTdHJlbmd0aCB8fCBpbnB1dHMueWllbGRTdHJlbmd0aCA8PSAwKSB7DQogICAgICAgICAgICBlcnJvcnMucHVzaCgnWWllbGQgc3RyZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWlucHV0cy5zYWZldHlGYWN0b3IgfHwgaW5wdXRzLnNhZmV0eUZhY3RvciA8PSAwKSB7DQogICAgICAgICAgICBlcnJvcnMucHVzaCgnRGVzaWduIHNhZmV0eSBmYWN0b3IgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaW5wdXRzLnN0cmVzc0NvbmNlbnRyYXRpb24gPD0gMCkgew0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ1N0cmVzcyBjb25jZW50cmF0aW9uIGZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlucHV0cy5zZWN0aW9uVHlwZSA9PT0gJ3NvbGlkUm91bmQnICYmIGlucHV0cy5kaWFtZXRlciAhPT0gbnVsbCAmJiBpbnB1dHMuZGlhbWV0ZXIgPD0gMCkgew0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0RpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlucHV0cy5zZWN0aW9uVHlwZSA9PT0gJ2hvbGxvd1JvdW5kJykgew0KICAgICAgICAgICAgaWYgKGlucHV0cy5vdXRlckRpYW1ldGVyIDw9IDAgfHwgaW5wdXRzLmlubmVyRGlhbWV0ZXIgPD0gMCkgew0KICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdPdXRlciBhbmQgaW5uZXIgZGlhbWV0ZXJzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoaW5wdXRzLm91dGVyRGlhbWV0ZXIgIT09IG51bGwgJiYgaW5wdXRzLmlubmVyRGlhbWV0ZXIgIT09IG51bGwgJiYNCiAgICAgICAgICAgICAgICBpbnB1dHMuaW5uZXJEaWFtZXRlciA+PSBpbnB1dHMub3V0ZXJEaWFtZXRlcikgew0KICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdJbm5lciBkaWFtZXRlciBtdXN0IGJlIGxlc3MgdGhhbiBvdXRlciBkaWFtZXRlci4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoaW5wdXRzLnNlY3Rpb25UeXBlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgaWYgKChpbnB1dHMud2lkdGggIT09IG51bGwgJiYgaW5wdXRzLndpZHRoIDw9IDApIHx8DQogICAgICAgICAgICAgICAgKGlucHV0cy50aGlja25lc3MgIT09IG51bGwgJiYgaW5wdXRzLnRoaWNrbmVzcyA8PSAwKSkgew0KICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdXaWR0aCBhbmQgdGhpY2tuZXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlucHV0cy5zZWN0aW9uVHlwZSA9PT0gJ2N1c3RvbUFyZWEnICYmIGlucHV0cy5jdXN0b21BcmVhICE9PSBudWxsICYmIGlucHV0cy5jdXN0b21BcmVhIDw9IDApIHsNCiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdDdXN0b20gY3Jvc3Mtc2VjdGlvbmFsIGFyZWEgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYXJlYSAhPT0gbnVsbCAmJiBhcmVhIDw9IDApIHsNCiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdDcm9zcy1zZWN0aW9uYWwgYXJlYSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICB9DQogICAgICAgIGlmIChpbnB1dHMubmV0QXJlYSAhPT0gbnVsbCAmJiBpbnB1dHMubmV0QXJlYSA8PSAwKSB7DQogICAgICAgICAgICBlcnJvcnMucHVzaCgnTmV0IHNlY3Rpb24gYXJlYSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgbmVlZHNMb2FkID0gWyd5aWVsZENoZWNrJywgJ2FsbG93YWJsZUxvYWQnLCAncmVxdWlyZWRBcmVhJywgJ3JlcXVpcmVkRGlhbWV0ZXInLCAnY29tYmluZWRTdHJlc3MnXTsNCiAgICAgICAgaWYgKG5lZWRzTG9hZC5pbmNsdWRlcyhpbnB1dHMubW9kZSkgJiYgaW5wdXRzLmFwcGxpZWRMb2FkIDwgMCkgew0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0FwcGxpZWQgbG9hZCBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geyBlcnJvcnMsIHdhcm5pbmdzIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY0dyb3NzQXJlYShpbnB1dHMpIHsNCiAgICAgICAgY29uc3QgZCA9IENPTlYubGVuZ3RoVG9JbnRlcm5hbChpbnB1dHMuZGlhbWV0ZXIgPz8gMCwgdW5pdFN5c3RlbSk7DQogICAgICAgIGNvbnN0IEQgPSBDT05WLmxlbmd0aFRvSW50ZXJuYWwoaW5wdXRzLm91dGVyRGlhbWV0ZXIgPz8gMCwgdW5pdFN5c3RlbSk7DQogICAgICAgIGNvbnN0IGRpID0gQ09OVi5sZW5ndGhUb0ludGVybmFsKGlucHV0cy5pbm5lckRpYW1ldGVyID8\/IDAsIHVuaXRTeXN0ZW0pOw0KICAgICAgICBjb25zdCB3ID0gQ09OVi5sZW5ndGhUb0ludGVybmFsKGlucHV0cy53aWR0aCA\/PyAwLCB1bml0U3lzdGVtKTsNCiAgICAgICAgY29uc3QgdCA9IENPTlYubGVuZ3RoVG9JbnRlcm5hbChpbnB1dHMudGhpY2tuZXNzID8\/IDAsIHVuaXRTeXN0ZW0pOw0KICAgICAgICBjb25zdCBjdXN0b20gPSBDT05WLmFyZWFUb0ludGVybmFsKGlucHV0cy5jdXN0b21BcmVhID8\/IDAsIHVuaXRTeXN0ZW0pOw0KDQogICAgICAgIHN3aXRjaCAoaW5wdXRzLnNlY3Rpb25UeXBlKSB7DQogICAgICAgICAgICBjYXNlICdzb2xpZFJvdW5kJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5QSSAqIGQgKiBkIC8gNDsNCiAgICAgICAgICAgIGNhc2UgJ2hvbGxvd1JvdW5kJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5QSSAqIChEICogRCAtIGRpICogZGkpIC8gNDsNCiAgICAgICAgICAgIGNhc2UgJ3JlY3RhbmdsZSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIHcgKiB0Ow0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tQXJlYSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbTsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICB9DQoNCiAg\",\n    \"ICBmdW5jdGlvbiBlZmZlY3RpdmVBcmVhKGlucHV0cykgew0KICAgICAgICBjb25zdCBncm9zcyA9IGNhbGNHcm9zc0FyZWEoaW5wdXRzKTsNCiAgICAgICAgaWYgKGlucHV0cy5uZXRBcmVhICE9PSBudWxsKSB7DQogICAgICAgICAgICByZXR1cm4gQ09OVi5hcmVhVG9JbnRlcm5hbChpbnB1dHMubmV0QXJlYSwgdW5pdFN5c3RlbSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGdyb3NzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGNOb3JtYWxTdHJlc3MoRiwgQSkgew0KICAgICAgICBpZiAoIUEgfHwgQSA8PSAwKSByZXR1cm4gbnVsbDsNCiAgICAgICAgcmV0dXJuIEYgLyBBOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGNTaGVhclN0cmVzcyhGcywgQSkgew0KICAgICAgICBpZiAoIUEgfHwgQSA8PSAwKSByZXR1cm4gbnVsbDsNCiAgICAgICAgcmV0dXJuIEZzIC8gQTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2b25NaXNlc0F4aWFsU2hlYXIoc2lnbWEsIHRhdSkgew0KICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHNpZ21hICogc2lnbWEgKyAzICogdGF1ICogdGF1KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0cmVzY2FBeGlhbFNoZWFyKHNpZ21hLCB0YXUpIHsNCiAgICAgICAgcmV0dXJuIE1hdGguc3FydChzaWdtYSAqIHNpZ21hICsgNCAqIHRhdSAqIHRhdSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZXF1aXZhbGVudFN0cmVzcyhzaWdtYSwgdGF1LCBjcml0ZXJpb24pIHsNCiAgICAgICAgaWYgKGNyaXRlcmlvbiA9PT0gJ3Zvbk1pc2VzJykgcmV0dXJuIHZvbk1pc2VzQXhpYWxTaGVhcihzaWdtYSwgdGF1KTsNCiAgICAgICAgaWYgKGNyaXRlcmlvbiA9PT0gJ3RyZXNjYScpIHJldHVybiB0cmVzY2FBeGlhbFNoZWFyKHNpZ21hLCB0YXUpOw0KICAgICAgICByZXR1cm4gTWF0aC5hYnMoc2lnbWEpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsNCiAgICAgICAgaGlkZU1lc3NhZ2VzKCk7DQogICAgICAgIHNob3dSZXN1bHRzUGFuZWwoKTsNCiAgICAgICAgY29uc3QgaW5wdXRzID0gcmVhZElucHV0cygpOw0KDQogICAgICAgIGNvbnN0IFN5ID0gQ09OVi5zdHJlc3NUb0ludGVybmFsKGlucHV0cy55aWVsZFN0cmVuZ3RoLCB1bml0U3lzdGVtKTsNCiAgICAgICAgY29uc3QgU0YgPSBpbnB1dHMuc2FmZXR5RmFjdG9yOw0KICAgICAgICBjb25zdCBLdCA9IGlucHV0cy5zdHJlc3NDb25jZW50cmF0aW9uOw0KICAgICAgICBjb25zdCBBID0gZWZmZWN0aXZlQXJlYShpbnB1dHMpOw0KDQogICAgICAgIGNvbnN0IHsgZXJyb3JzLCB3YXJuaW5nczogYmFzZVdhcm5pbmdzIH0gPSB2YWxpZGF0ZShpbnB1dHMsIEEpOw0KICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgew0KICAgICAgICAgICAgc2hvd0Vycm9ycyhlcnJvcnMpOw0KICAgICAgICAgICAgY29uc3QgYmFkZ2UgPSAkKCdzdGF0dXNCYWRnZScpOw0KICAgICAgICAgICAgYmFkZ2UudGV4dENvbnRlbnQgPSAnRXJyb3InOw0KICAgICAgICAgICAgYmFkZ2UuY2xhc3NOYW1lID0gJ3lzYy1zdGF0dXMtYmFkZ2UgeXNjLXN0YXR1cy1kYW5nZXInOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3Qgc2lnbWFBbGxvdyA9IFN5IC8gU0Y7DQogICAgICAgIGxldCBGID0gQ09OVi5sb2FkVG9JbnRlcm5hbChpbnB1dHMuYXBwbGllZExvYWQsIGlucHV0cy5sb2FkVW5pdCk7DQogICAgICAgIGNvbnN0IEZzID0gQ09OVi5sb2FkVG9JbnRlcm5hbChpbnB1dHMuYXBwbGllZFNoZWFyTG9hZCwgaW5wdXRzLnNoZWFyTG9hZFVuaXQpOw0KICAgICAgICBjb25zdCBFID0gaW5wdXRzLnlvdW5nc01vZHVsdXMNCiAgICAgICAgICAgID8gQ09OVi5tb2R1bHVzVG9JbnRlcm5hbChpbnB1dHMueW91bmdzTW9kdWx1cywgdW5pdFN5c3RlbSkNCiAgICAgICAgICAgIDogbnVsbDsNCiAgICAgICAgY29uc3QgTCA9IGlucHV0cy5jb21wb25lbnRMZW5ndGgNCiAgICAgICAgICAgID8gQ09OVi5sZW5ndGhUb0ludGVybmFsKGlucHV0cy5jb21wb25lbnRMZW5ndGgsIHVuaXRTeXN0ZW0pDQogICAgICAgICAgICA6IG51bGw7DQoNCiAgICAgICAgbGV0IHNpZ21hTm9tID0gbnVsbDsNCiAgICAgICAgbGV0IHRhdU5vbSA9IG51bGw7DQogICAgICAgIGxldCBzaWdtYUVxID0gbnVsbDsNCiAgICAgICAgbGV0IEZ5ID0gU3kgKiBBOw0KICAgICAgICBsZXQgRmFsbG93ID0gc2lnbWFBbGxvdyAqIEE7DQogICAgICAgIGxldCBBcmVxID0gbnVsbDsNCiAgICAgICAgbGV0IGRSZXEgPSBudWxsOw0KICAgICAgICBjb25zdCB3YXJuaW5ncyA9IFsuLi5iYXNlV2FybmluZ3NdOw0KDQogICAgICAgIHN3aXRjaCAoaW5wdXRzLm1vZGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ3lpZWxkQ2hlY2snOg0KICAgICAgICAgICAgY2FzZSAnY29tYmluZWRTdHJlc3MnOg0KICAgICAgICAgICAgICAgIGlmIChpbnB1dHMuZGlyZWN0Tm9ybWFsU3RyZXNzICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHNpZ21hTm9tID0gQ09OVi5zdHJlc3NUb0ludGVybmFsKGlucHV0cy5kaXJlY3ROb3JtYWxTdHJlc3MsIHVuaXRTeXN0ZW0pOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHNpZ21hTm9tID0gY2FsY05vcm1hbFN0cmVzcyhGLCBBKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGlucHV0cy5tb2RlID09PSAnY29tYmluZWRTdHJlc3MnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dHMuZGlyZWN0U2hlYXJTdHJlc3MgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRhdU5vbSA9IENPTlYuc3RyZXNzVG9JbnRlcm5hbChpbnB1dHMuZGlyZWN0U2hlYXJTdHJlc3MsIHVuaXRTeXN0ZW0pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdGF1Tm9tID0gY2FsY1NoZWFyU3RyZXNzKEZzLCBBKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzaWdtYUVxID0gZXF1aXZhbGVudFN0cmVzcyhzaWdtYU5vbSwgdGF1Tm9tIHx8IDAsIGlucHV0cy55aWVsZENyaXRlcmlvbik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc2lnbWFFcSA9IE1hdGguYWJzKHNpZ21hTm9tKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ21heFlpZWxkTG9hZCc6DQogICAgICAgICAgICAgICAgRiA9IEZ5Ow0KICAgICAgICAgICAgICAgIHNpZ21hTm9tID0gU3k7DQogICAgICAgICAgICAgICAgc2lnbWFFcSA9IFN5Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICdhbGxvd2FibGVMb2FkJzoNCiAgICAgICAgICAgICAgICBGID0gRmFsbG93Ow0KICAgICAgICAgICAgICAgIHNpZ21hTm9tID0gc2lnbWFBbGxvdzsNCiAgICAgICAgICAgICAgICBzaWdtYUVxID0gc2lnbWFBbGxvdzsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAncmVxdWlyZWRBcmVhJzoNCiAgICAgICAgICAgICAgICBpZiAoc2lnbWFBbGxvdyA+IDApIEFyZXEgPSBGIC8gc2lnbWFBbGxvdzsNCiAgICAgICAgICAgICAgICBzaWdtYU5vbSA9IEEgPiAwID8gRiAvIEEgOiBudWxsOw0KICAgICAgICAgICAgICAgIHNpZ21hRXEgPSBzaWdtYU5vbTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAncmVxdWlyZWREaWFtZXRlcic6DQogICAgICAgICAgICAgICAgaWYgKHNpZ21hQWxsb3cgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIGRSZXEgPSBNYXRoLnNxcnQoNCAqIEYgLyAoTWF0aC5QSSAqIHNpZ21hQWxsb3cpKTsNCiAgICAgICAgICAgICAgICAgICAgQXJlcSA9IE1hdGguUEkgKiBkUmVxICogZFJlcSAvIDQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHNpZ21hTm9tID0gQSA+IDAgPyBGIC8gQSA6IG51bGw7DQogICAgICAgICAgICAgICAgc2lnbWFFcSA9IHNpZ21hTm9tOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3Qgc2lnbWFMb2NhbCA9IHNpZ21hRXEgIT09IG51bGwgPyBLdCAqIHNpZ21hRXEgOiBudWxsOw0KICAgICAgICBjb25zdCBjb21wYXJlU3RyZXNzID0gc2lnbWFMb2NhbCA\/PyBzaWdtYUVxOw0KDQogICAgICAgIGNvbnN0IGFjdHVhbFNGID0gY29tcGFyZVN0cmVzcyA+IDAgPyBTeSAvIGNvbXBhcmVTdHJlc3MgOiBudWxsOw0KICAgICAgICBjb25zdCB1dGlsaXphdGlvbiA9IGNvbXBhcmVTdHJlc3MgIT09IG51bGwgPyAoY29tcGFyZVN0cmVzcyAvIFN5KSAqIDEwMCA6IG51bGw7DQogICAgICAgIGNvbnN0IHlpZWxkTWFyZ2luID0gY29tcGFyZVN0cmVzcyAhPT0gbnVsbCA\/IFN5IC0gY29tcGFyZVN0cmVzcyA6IG51bGw7DQoNCiAgICAgICAgbGV0IHN0cmFpbiA9IG51bGw7DQogICAgICAgIGxldCBlbG9uZ2F0aW9uID0g\",\n    \"bnVsbDsNCiAgICAgICAgaWYgKEUgJiYgRSA+IDAgJiYgc2lnbWFOb20gIT09IG51bGwpIHsNCiAgICAgICAgICAgIGlmIChjb21wYXJlU3RyZXNzIDw9IFN5KSB7DQogICAgICAgICAgICAgICAgc3RyYWluID0gc2lnbWFOb20gLyAoRSAqIDEwMDApOw0KICAgICAgICAgICAgICAgIGlmIChMICYmIEEgPiAwICYmIGlucHV0cy5tb2RlICE9PSAnbWF4WWllbGRMb2FkJykgew0KICAgICAgICAgICAgICAgICAgICBlbG9uZ2F0aW9uID0gKEYgKiBMKSAvIChBICogRSAqIDEwMDApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnRWxhc3RpYyBzdHJhaW4vZWxvbmdhdGlvbiBjYWxjdWxhdGVkIGJleW9uZCB5aWVsZCAtIGxpbmVhciBlbGFzdGljIGFzc3VtcHRpb25zIG1heSBubyBsb25nZXIgYmUgdmFsaWQuJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBzdGF0dXMgPSBjbGFzc2lmeVN0YXR1cyhjb21wYXJlU3RyZXNzLCBTeSwgc2lnbWFBbGxvdywgdXRpbGl6YXRpb24sIFNGLCBhY3R1YWxTRik7DQoNCiAgICAgICAgaWYgKGNvbXBhcmVTdHJlc3MgPiBTeSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnWWllbGRpbmcgRXhwZWN0ZWQgLSBwZXJtYW5lbnQgZGVmb3JtYXRpb24gbWF5IG9jY3VyLiBMaW5lYXIgZWxhc3RpYyBhc3N1bXB0aW9ucyBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLicpOw0KICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVTdHJlc3MgPiBzaWdtYUFsbG93KSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdFcXVpdmFsZW50IHN0cmVzcyBleGNlZWRzIGFsbG93YWJsZSBkZXNpZ24gc3RyZXNzIChTeSAvIFNGKS4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChLdCA+IDEgJiYgc2lnbWFOb20gIT09IG51bGwgJiYgS3QgKiAoc2lnbWFFcSA\/PyBzaWdtYU5vbSkgPiBTeSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnU3RyZXNzIGNvbmNlbnRyYXRpb24gY3JlYXRlcyBsb2NhbCB5aWVsZGluZyByaXNrIGV2ZW4gaWYgbm9taW5hbCBzdHJlc3MgYXBwZWFycyBhY2NlcHRhYmxlLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHdhcm5pbmdzLmxlbmd0aCkgc2hvd1dhcm5pbmdzKHdhcm5pbmdzKTsNCg0KICAgICAgICBjb25zdCByZXN1bHRzID0gew0KICAgICAgICAgICAgYXJlYTogQSwNCiAgICAgICAgICAgIHNpZ21hTm9tLA0KICAgICAgICAgICAgdGF1Tm9tLA0KICAgICAgICAgICAgc2lnbWFFcTogY29tcGFyZVN0cmVzcywNCiAgICAgICAgICAgIFN5LA0KICAgICAgICAgICAgRnksDQogICAgICAgICAgICBzaWdtYUFsbG93LA0KICAgICAgICAgICAgRmFsbG93LA0KICAgICAgICAgICAgQXJlcSwNCiAgICAgICAgICAgIGRSZXEsDQogICAgICAgICAgICBhY3R1YWxTRiwNCiAgICAgICAgICAgIHV0aWxpemF0aW9uLA0KICAgICAgICAgICAgeWllbGRNYXJnaW4sDQogICAgICAgICAgICBzdHJhaW4sDQogICAgICAgICAgICBlbG9uZ2F0aW9uLA0KICAgICAgICAgICAgRiwNCiAgICAgICAgICAgIHN0YXR1cywNCiAgICAgICAgICAgIG1vZGU6IGlucHV0cy5tb2RlLA0KICAgICAgICAgICAgY3JpdGVyaW9uOiBpbnB1dHMueWllbGRDcml0ZXJpb24sDQogICAgICAgICAgICBzZWN0aW9uVHlwZTogaW5wdXRzLnNlY3Rpb25UeXBlLA0KICAgICAgICAgICAgZGlhbWV0ZXI6IENPTlYubGVuZ3RoVG9JbnRlcm5hbChpbnB1dHMuZGlhbWV0ZXIgPz8gMCwgdW5pdFN5c3RlbSkNCiAgICAgICAgfTsNCg0KICAgICAgICBkaXNwbGF5UmVzdWx0cyhyZXN1bHRzKTsNCiAgICAgICAgZHJhd1Zpc3VhbGl6YXRpb25zKHJlc3VsdHMpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNsYXNzaWZ5U3RhdHVzKHN0cmVzcywgU3ksIHNpZ21hQWxsb3csIHV0aWxpemF0aW9uLCBkZXNpZ25TRiwgYWN0dWFsU0YpIHsNCiAgICAgICAgaWYgKHN0cmVzcyA9PT0gbnVsbCkgcmV0dXJuIHsgbGV2ZWw6ICduZXV0cmFsJywgbGFiZWw6ICdBd2FpdGluZyBJbnB1dCcgfTsNCg0KICAgICAgICBpZiAoc3RyZXNzID4gU3kpIHsNCiAgICAgICAgICAgIHJldHVybiB7IGxldmVsOiAnZGFuZ2VyJywgbGFiZWw6ICdZaWVsZGluZyBSaXNrJyB9Ow0KICAgICAgICB9DQogICAgICAgIGlmIChzdHJlc3MgPiBzaWdtYUFsbG93IHx8ICh1dGlsaXphdGlvbiAhPT0gbnVsbCAmJiB1dGlsaXphdGlvbiA+IDgwKSkgew0KICAgICAgICAgICAgcmV0dXJuIHsgbGV2ZWw6ICdjYXV0aW9uJywgbGFiZWw6ICdDYXV0aW9uJyB9Ow0KICAgICAgICB9DQogICAgICAgIGlmIChhY3R1YWxTRiAhPT0gbnVsbCAmJiBhY3R1YWxTRiA+PSBkZXNpZ25TRiAmJiB1dGlsaXphdGlvbiA8IDcwKSB7DQogICAgICAgICAgICByZXR1cm4geyBsZXZlbDogJ3NhZmUnLCBsYWJlbDogJ1NhZmUnIH07DQogICAgICAgIH0NCiAgICAgICAgaWYgKHN0cmVzcyA8PSBzaWdtYUFsbG93KSB7DQogICAgICAgICAgICByZXR1cm4geyBsZXZlbDogJ3NhZmUnLCBsYWJlbDogJ1NhZmUnIH07DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHsgbGV2ZWw6ICdjYXV0aW9uJywgbGFiZWw6ICdDYXV0aW9uJyB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZvcm1hdE51bShuLCBkZWNpbWFscyA9IDMpIHsNCiAgICAgICAgaWYgKG4gPT09IG51bGwgfHwgbiA9PT0gdW5kZWZpbmVkIHx8ICFpc0Zpbml0ZShuKSkgcmV0dXJuICctJzsNCiAgICAgICAgaWYgKE1hdGguYWJzKG4pID49IDEwMDAwKSByZXR1cm4gbi50b0V4cG9uZW50aWFsKDMpOw0KICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChuLnRvRml4ZWQoZGVjaW1hbHMpKS50b1N0cmluZygpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKHIpIHsNCiAgICAgICAgY29uc3QgYmFkZ2UgPSAkKCdzdGF0dXNCYWRnZScpOw0KICAgICAgICBiYWRnZS50ZXh0Q29udGVudCA9IHIuc3RhdHVzLmxhYmVsOw0KICAgICAgICBiYWRnZS5jbGFzc05hbWUgPSBgeXNjLXN0YXR1cy1iYWRnZSB5c2Mtc3RhdHVzLSR7ci5zdGF0dXMubGV2ZWx9YDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93RXJyb3JzKGVycm9ycykgew0KICAgICAgICBjb25zdCBib3ggPSAkKCdlcnJvckJveCcpOw0KICAgICAgICBib3guaW5uZXJIVE1MID0gJzxzdHJvbmc+UGxlYXNlIGNvcnJlY3QgdGhlIGZvbGxvd2luZzo8L3N0cm9uZz48dWw+JyArDQogICAgICAgICAgICBlcnJvcnMubWFwKChlKSA9PiBgPGxpPiR7ZX08L2xpPmApLmpvaW4oJycpICsgJzwvdWw+JzsNCiAgICAgICAgYm94LmNsYXNzTGlzdC5yZW1vdmUoJ3lzYy1oaWRkZW4nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93V2FybmluZ3Mod2FybmluZ3MpIHsNCiAgICAgICAgY29uc3QgYm94ID0gJCgnd2FybmluZ0JveCcpOw0KICAgICAgICBib3guaW5uZXJIVE1MID0gJzxzdHJvbmc+V2FybmluZ3M6PC9zdHJvbmc+PHVsPicgKw0KICAgICAgICAgICAgd2FybmluZ3MubWFwKCh3KSA9PiBgPGxpPiR7d308L2xpPmApLmpvaW4oJycpICsgJzwvdWw+JzsNCiAgICAgICAgYm94LmNsYXNzTGlzdC5yZW1vdmUoJ3lzYy1oaWRkZW4nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBoaWRlTWVzc2FnZXMoKSB7DQogICAgICAgICQoJ2Vycm9yQm94JykuY2xhc3NMaXN0LmFkZCgneXNjLWhpZGRlbicpOw0KICAgICAgICAkKCd3YXJuaW5nQm94JykuY2xhc3NMaXN0LmFkZCgneXNjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdWaXN1YWxpemF0aW9ucyhyKSB7DQogICAgICAgIGRyYXdBeGlhbERpYWdyYW0ocik7DQogICAgICAgIGRyYXdTdHJlc3NDb21wYXJpc29uKHIpOw0KICAgICAgICBkcmF3U3RyZXNzU3RyYWluQ3VydmUocik7DQogICAgICAgIGRyYXdVdGlsaXphdGlvbkdhdWdlKHIpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdBeGlhbERpYWdyYW0ocikgew0KICAgICAgICBjb25zdCBzdmcgPSAkKCdheGlhbERpYWdyYW0nKTsNCiAgICAgICAgY29uc3QgZCA9IHIuZGlhbWV0ZXIgfHwgMjA7DQogICAgICAgIGNvbnN0IHJvZFcgPSBNYXRoLm1pbigxODAsIE1hdGgubWF4KDQwLCBkICogMykpOw0KICAgICAgICBjb25zdCB4ID0gKDI4MCAtIHJvZFcpIC8gMjsNCg0KICAgICAgICBzdmcuaW5uZXJIVE1MID0gYA0KICAgICAgICAgICAgPGRlZnM+DQogICAgICAgICAgICAgICAgPG1hcmtlciBpZD0ieXNjLWFycm93UiIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNyIgcmVmWT0iMyIgb3JpZW50PSJhdXRvIj4NCiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTAsMCBMOCwzIEwwLDYiIGZpbGw9IiNlNjdlMjIiLz4NCiAgICAgICAgICAgICAgICA8L21hcmtlcj4NCiAgICAgICAgICAgICAgICA8bWFya2VyIGlkPSJ5c2MtYXJyb3dMIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSIxIiByZWZZPSIzIiBvcmllbnQ9ImF1dG8iPg0KICAgICAg\",\n    \"ICAgICAgICAgICAgICA8cGF0aCBkPSJNOCwwIEwwLDMgTDgsNiIgZmlsbD0iI2U2N2UyMiIvPg0KICAgICAgICAgICAgICAgIDwvbWFya2VyPg0KICAgICAgICAgICAgPC9kZWZzPg0KICAgICAgICAgICAgPHJlY3QgeD0iJHt4fSIgeT0iNDUiIHdpZHRoPSIke3JvZFd9IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2JkYzNjNyIgc3Ryb2tlPSIjN2Y4YzhkIiBzdHJva2Utd2lkdGg9IjEuNSIvPg0KICAgICAgICAgICAgPGxpbmUgeDE9IjIwIiB5MT0iNjAiIHgyPSIke3ggLSA1fSIgeTI9IjYwIiBzdHJva2U9IiNlNjdlMjIiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI3lzYy1hcnJvd1IpIi8+DQogICAgICAgICAgICA8bGluZSB4MT0iMjYwIiB5MT0iNjAiIHgyPSIke3ggKyByb2RXICsgNX0iIHkyPSI2MCIgc3Ryb2tlPSIjZTY3ZTIyIiBzdHJva2Utd2lkdGg9IjIuNSIgbWFya2VyLXN0YXJ0PSJ1cmwoI3lzYy1hcnJvd0wpIi8+DQogICAgICAgICAgICA8dGV4dCB4PSIzMCIgeT0iNTIiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9IiNlNjdlMjIiIGZvbnQtd2VpZ2h0PSJib2xkIj5GPC90ZXh0Pg0KICAgICAgICAgICAgPHRleHQgeD0iMTQwIiB5PSI5NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI5IiBmaWxsPSIjNWQ2ZDdlIj5BeGlhbGx5IExvYWRlZCBTcGVjaW1lbjwvdGV4dD4NCiAgICAgICAgICAgIDx0ZXh0IHg9IjE0MCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjgiIGZpbGw9IiM5NWE1YTYiPs+DID0gRiAvIEE8L3RleHQ+DQogICAgICAgIGA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZHJhd1N0cmVzc0NvbXBhcmlzb24ocikgew0KICAgICAgICBjb25zdCBzdmcgPSAkKCdzdHJlc3NDb21wYXJpc29uJyk7DQogICAgICAgIGNvbnN0IG1heFZhbCA9IE1hdGgubWF4KHIuU3ksIHIuc2lnbWFFcSB8fCAwLCByLnNpZ21hQWxsb3cpICogMS4xNSB8fCAxOw0KICAgICAgICBjb25zdCBiYXJNYXggPSAyMDA7DQogICAgICAgIGNvbnN0IHNjYWxlID0gYmFyTWF4IC8gbWF4VmFsOw0KDQogICAgICAgIGNvbnN0IGFjdHVhbFcgPSBNYXRoLm1pbihiYXJNYXgsIChyLnNpZ21hRXEgfHwgMCkgKiBzY2FsZSk7DQogICAgICAgIGNvbnN0IGFsbG93VyA9IE1hdGgubWluKGJhck1heCwgci5zaWdtYUFsbG93ICogc2NhbGUpOw0KICAgICAgICBjb25zdCB5aWVsZFcgPSBNYXRoLm1pbihiYXJNYXgsIHIuU3kgKiBzY2FsZSk7DQoNCiAgICAgICAgY29uc3QgYWN0dWFsQ29sb3IgPSByLnN0YXR1cy5sZXZlbCA9PT0gJ2RhbmdlcicgPyAnI2MwMzkyYicNCiAgICAgICAgICAgIDogci5zdGF0dXMubGV2ZWwgPT09ICdjYXV0aW9uJyA\/ICcjZjM5YzEyJyA6ICcjMjdhZTYwJzsNCg0KICAgICAgICBzdmcuaW5uZXJIVE1MID0gYA0KICAgICAgICAgICAgPHRleHQgeD0iMTAiIHk9IjIyIiBmb250LXNpemU9IjkiIGZpbGw9IiM1ZDZkN2UiPkFjdHVhbCDPgzwvdGV4dD4NCiAgICAgICAgICAgIDxyZWN0IHg9IjcwIiB5PSIxMiIgd2lkdGg9IiR7YWN0dWFsV30iIGhlaWdodD0iMTQiIHJ4PSIyIiBmaWxsPSIke2FjdHVhbENvbG9yfSIvPg0KICAgICAgICAgICAgPHRleHQgeD0iMjc1IiB5PSIyMiIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSI4IiBmaWxsPSIjNWQ2ZDdlIj4ke2Zvcm1hdE51bShDT05WLnN0cmVzc0Zyb21JbnRlcm5hbChyLnNpZ21hRXEgfHwgMCwgdW5pdFN5c3RlbSksIDApfTwvdGV4dD4NCg0KICAgICAgICAgICAgPHRleHQgeD0iMTAiIHk9IjQ4IiBmb250LXNpemU9IjkiIGZpbGw9IiM1ZDZkN2UiPkFsbG93YWJsZTwvdGV4dD4NCiAgICAgICAgICAgIDxyZWN0IHg9IjcwIiB5PSIzOCIgd2lkdGg9IiR7YWxsb3dXfSIgaGVpZ2h0PSIxNCIgcng9IjIiIGZpbGw9IiMzNDk4ZGIiIG9wYWNpdHk9IjAuOCIvPg0KICAgICAgICAgICAgPHRleHQgeD0iMjc1IiB5PSI0OCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSI4IiBmaWxsPSIjNWQ2ZDdlIj4ke2Zvcm1hdE51bShDT05WLnN0cmVzc0Zyb21JbnRlcm5hbChyLnNpZ21hQWxsb3csIHVuaXRTeXN0ZW0pLCAwKX08L3RleHQ+DQoNCiAgICAgICAgICAgIDx0ZXh0IHg9IjEwIiB5PSI3NCIgZm9udC1zaXplPSI5IiBmaWxsPSIjNWQ2ZDdlIj5ZaWVsZCBTeTwvdGV4dD4NCiAgICAgICAgICAgIDxyZWN0IHg9IjcwIiB5PSI2NCIgd2lkdGg9IiR7eWllbGRXfSIgaGVpZ2h0PSIxNCIgcng9IjIiIGZpbGw9IiMxYTUyNzYiIG9wYWNpdHk9IjAuNyIvPg0KICAgICAgICAgICAgPHRleHQgeD0iMjc1IiB5PSI3NCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSI4IiBmaWxsPSIjNWQ2ZDdlIj4ke2Zvcm1hdE51bShDT05WLnN0cmVzc0Zyb21JbnRlcm5hbChyLlN5LCB1bml0U3lzdGVtKSwgMCl9PC90ZXh0Pg0KDQogICAgICAgICAgICA8bGluZSB4MT0iNzAiIHkxPSI5MCIgeDI9IjI3MCIgeTI9IjkwIiBzdHJva2U9IiNiZGMzYzciIHN0cm9rZS13aWR0aD0iMSIvPg0KICAgICAgICAgICAgPHRleHQgeD0iMTQwIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOCIgZmlsbD0iIzk1YTVhNiI+WWllbGQgU3RyZXNzIENvbXBhcmlzb248L3RleHQ+DQogICAgICAgIGA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZHJhd1N0cmVzc1N0cmFpbkN1cnZlKHIpIHsNCiAgICAgICAgY29uc3Qgc3ZnID0gJCgnc3RyZXNzU3RyYWluQ3VydmUnKTsNCiAgICAgICAgY29uc3QgU3kgPSByLlN5Ow0KICAgICAgICBjb25zdCBFID0gci5zdHJhaW4gPyAoci5zaWdtYU5vbSAvIChyLnN0cmFpbikpIDogKDIxMDAwMCk7DQogICAgICAgIGNvbnN0IHlpZWxkU3RyYWluID0gU3kgLyBFOw0KDQogICAgICAgIGNvbnN0IG1hcmdpbiA9IHsgbDogMzUsIHI6IDE1LCB0OiAxNSwgYjogMzAgfTsNCiAgICAgICAgY29uc3QgdyA9IDI4MCAtIG1hcmdpbi5sIC0gbWFyZ2luLnI7DQogICAgICAgIGNvbnN0IGggPSAxNjAgLSBtYXJnaW4udCAtIG1hcmdpbi5iOw0KICAgICAgICBjb25zdCBtYXhTdHJlc3MgPSBTeSAqIDEuMzsNCiAgICAgICAgY29uc3QgbWF4U3RyYWluID0geWllbGRTdHJhaW4gKiAyLjU7DQoNCiAgICAgICAgY29uc3QgdG9YID0gKGUpID0+IG1hcmdpbi5sICsgKGUgLyBtYXhTdHJhaW4pICogdzsNCiAgICAgICAgY29uc3QgdG9ZID0gKHMpID0+IG1hcmdpbi50ICsgaCAtIChzIC8gbWF4U3RyZXNzKSAqIGg7DQoNCiAgICAgICAgY29uc3QgZWxhc3RpY0VuZFggPSB0b1goeWllbGRTdHJhaW4pOw0KICAgICAgICBjb25zdCBlbGFzdGljRW5kWSA9IHRvWShTeSk7DQogICAgICAgIGNvbnN0IHBsYXRZID0gdG9ZKFN5ICogMS4wNSk7DQoNCiAgICAgICAgbGV0IGN1cnJlbnRYID0gbnVsbDsNCiAgICAgICAgaWYgKHIuc3RyYWluICYmIHIuc3RyYWluID4gMCkgew0KICAgICAgICAgICAgY3VycmVudFggPSB0b1goTWF0aC5taW4oci5zdHJhaW4sIG1heFN0cmFpbikpOw0KICAgICAgICB9DQoNCiAgICAgICAgc3ZnLmlubmVySFRNTCA9IGANCiAgICAgICAgICAgIDxsaW5lIHgxPSIke21hcmdpbi5sfSIgeTE9IiR7bWFyZ2luLnQgKyBofSIgeDI9IiR7bWFyZ2luLmwgKyB3fSIgeTI9IiR7bWFyZ2luLnQgKyBofSIgc3Ryb2tlPSIjN2Y4YzhkIiBzdHJva2Utd2lkdGg9IjEiLz4NCiAgICAgICAgICAgIDxsaW5lIHgxPSIke21hcmdpbi5sfSIgeTE9IiR7bWFyZ2luLnR9IiB4Mj0iJHttYXJnaW4ubH0iIHkyPSIke21hcmdpbi50ICsgaH0iIHN0cm9rZT0iIzdmOGM4ZCIgc3Ryb2tlLXdpZHRoPSIxIi8+DQogICAgICAgICAgICA8dGV4dCB4PSIke21hcmdpbi5sICsgdyAvIDJ9IiB5PSIkezE2MCAtIDV9IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjgiIGZpbGw9IiM1ZDZkN2UiPlN0cmFpbiDOtTwvdGV4dD4NCiAgICAgICAgICAgIDx0ZXh0IHg9IjEyIiB5PSIke21hcmdpbi50ICsgaCAvIDJ9IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjgiIGZpbGw9IiM1ZDZkN2UiIHRyYW5zZm9ybT0icm90YXRlKC05MCAxMiAke21hcmdpbi50ICsgaCAvIDJ9KSI+U3RyZXNzIM+DPC90ZXh0Pg0KDQogICAgICAgICAgICA8cGF0aCBkPSJNJHttYXJnaW4ubH0sJHttYXJnaW4udCArIGh9IEwke2VsYXN0aWNFbmRYfSwke2VsYXN0aWNFbmRZfSIgc3Ryb2tlPSIjMjdhZTYwIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz4NCiAgICAgICAgICAgIDxwYXRoIGQ9Ik0ke2VsYXN0aWNFbmRYfSwke2VsYXN0aWNFbmRZfSBMJHtlbGFzdGljRW5kWCArIDMwfSwke3BsYXRZfSBMJHtlbGFzdGljRW5kWCArIDYwfSwke3BsYXRZICsgNX0iIHN0cm9rZT0iI2U2N2UyMiIgc3Ryb2tlLXdpZHRoPSIyIiBmaWxsPSJub25lIiBzdHJva2UtZGFzaGFycmF5PSI0LDIiLz4NCg0KICAgICAgICAgICAgPGxpbmUgeDE9IiR7ZWxhc3RpY0VuZFh9IiB5MT0iJHttYXJnaW4udH0iIHgyPSIke2VsYXN0aWNFbmRYfSIgeTI9IiR7bWFyZ2luLnQgKyBofSIgc3Ryb2tlPSIjYzAzOTJiIiBz\",\n    \"dHJva2Utd2lkdGg9IjEiIHN0cm9rZS1kYXNoYXJyYXk9IjMsMyIgb3BhY2l0eT0iMC42Ii8+DQogICAgICAgICAgICA8dGV4dCB4PSIke2VsYXN0aWNFbmRYICsgM30iIHk9IiR7bWFyZ2luLnQgKyAxMH0iIGZvbnQtc2l6ZT0iNyIgZmlsbD0iI2MwMzkyYiI+WWllbGQ8L3RleHQ+DQoNCiAgICAgICAgICAgIDxyZWN0IHg9IiR7bWFyZ2luLmx9IiB5PSIke3RvWShTeSl9IiB3aWR0aD0iJHt3fSIgaGVpZ2h0PSIke21hcmdpbi50ICsgaCAtIHRvWShTeSl9IiBmaWxsPSIjMjdhZTYwIiBvcGFjaXR5PSIwLjA2Ii8+DQogICAgICAgICAgICA8cmVjdCB4PSIke2VsYXN0aWNFbmRYfSIgeT0iJHttYXJnaW4udH0iIHdpZHRoPSIke3cgKyBtYXJnaW4ubCAtIGVsYXN0aWNFbmRYfSIgaGVpZ2h0PSIke2h9IiBmaWxsPSIjZTY3ZTIyIiBvcGFjaXR5PSIwLjA1Ii8+DQoNCiAgICAgICAgICAgICR7Y3VycmVudFggPyBgPGNpcmNsZSBjeD0iJHtjdXJyZW50WH0iIGN5PSIke3RvWShyLnNpZ21hTm9tIHx8IDApfSIgcj0iNCIgZmlsbD0iJHtyLnN0YXR1cy5sZXZlbCA9PT0gJ2RhbmdlcicgPyAnI2MwMzkyYicgOiAnIzFhNTI3Nid9Ii8+DQogICAgICAgICAgICA8bGluZSB4MT0iJHtjdXJyZW50WH0iIHkxPSIke3RvWShyLnNpZ21hTm9tIHx8IDApfSIgeDI9IiR7Y3VycmVudFh9IiB5Mj0iJHttYXJnaW4udCArIGh9IiBzdHJva2U9IiMxYTUyNzYiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWRhc2hhcnJheT0iMiwyIiBvcGFjaXR5PSIwLjUiLz5gIDogJyd9DQogICAgICAgIGA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZHJhd1V0aWxpemF0aW9uR2F1Z2UocmVzdWx0cykgew0KICAgICAgICBjb25zdCBzdmcgPSAkKCd1dGlsaXphdGlvbkdhdWdlJyk7DQogICAgICAgIGNvbnN0IHV0aWwgPSBNYXRoLm1pbihyZXN1bHRzLnV0aWxpemF0aW9uIHx8IDAsIDEyMCk7DQogICAgICAgIGNvbnN0IGN4ID0gMTAwLCBjeSA9IDg1LCByYWRpdXMgPSA1NTsNCiAgICAgICAgY29uc3Qgc3RhcnRBbmdsZSA9IE1hdGguUEk7DQogICAgICAgIGNvbnN0IGVuZEFuZ2xlID0gMDsNCiAgICAgICAgY29uc3QgdXRpbEFuZ2xlID0gc3RhcnRBbmdsZSAtICh1dGlsIC8gMTAwKSAqIE1hdGguUEk7DQoNCiAgICAgICAgY29uc3QgYXJjID0gKHN0YXJ0LCBlbmQsIGNvbG9yLCB3aWR0aCkgPT4gew0KICAgICAgICAgICAgY29uc3QgeDEgPSBjeCArIHJhZGl1cyAqIE1hdGguY29zKHN0YXJ0KTsNCiAgICAgICAgICAgIGNvbnN0IHkxID0gY3kgKyByYWRpdXMgKiBNYXRoLnNpbihzdGFydCk7DQogICAgICAgICAgICBjb25zdCB4MiA9IGN4ICsgcmFkaXVzICogTWF0aC5jb3MoZW5kKTsNCiAgICAgICAgICAgIGNvbnN0IHkyID0gY3kgKyByYWRpdXMgKiBNYXRoLnNpbihlbmQpOw0KICAgICAgICAgICAgY29uc3QgbGFyZ2UgPSBzdGFydCAtIGVuZCA+IE1hdGguUEkgPyAxIDogMDsNCiAgICAgICAgICAgIHJldHVybiBgPHBhdGggZD0iTSR7eDF9LCR7eTF9IEEke3JhZGl1c30sJHtyYWRpdXN9IDAgJHtsYXJnZX0gMSAke3gyfSwke3kyfSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIke2NvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3dpZHRofSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsNCiAgICAgICAgfTsNCg0KICAgICAgICBjb25zdCBuZWVkbGVYID0gY3ggKyAocmFkaXVzIC0gMTApICogTWF0aC5jb3ModXRpbEFuZ2xlKTsNCiAgICAgICAgY29uc3QgbmVlZGxlWSA9IGN5ICsgKHJhZGl1cyAtIDEwKSAqIE1hdGguc2luKHV0aWxBbmdsZSk7DQoNCiAgICAgICAgY29uc3QgZ2F1Z2VDb2xvciA9IHV0aWwgPiAxMDAgPyAnI2MwMzkyYicgOiB1dGlsID4gODAgPyAnI2YzOWMxMicgOiAnIzI3YWU2MCc7DQoNCiAgICAgICAgc3ZnLmlubmVySFRNTCA9IGANCiAgICAgICAgICAgICR7YXJjKHN0YXJ0QW5nbGUsIHN0YXJ0QW5nbGUgLSAwLjcgKiBNYXRoLlBJLCAnIzI3YWU2MCcsIDEwKX0NCiAgICAgICAgICAgICR7YXJjKHN0YXJ0QW5nbGUgLSAwLjcgKiBNYXRoLlBJLCBzdGFydEFuZ2xlIC0gMC45ICogTWF0aC5QSSwgJyNmMzljMTInLCAxMCl9DQogICAgICAgICAgICAke2FyYyhzdGFydEFuZ2xlIC0gMC45ICogTWF0aC5QSSwgZW5kQW5nbGUsICcjYzAzOTJiJywgMTApfQ0KICAgICAgICAgICAgPGxpbmUgeDE9IiR7Y3h9IiB5MT0iJHtjeX0iIHgyPSIke25lZWRsZVh9IiB5Mj0iJHtuZWVkbGVZfSIgc3Ryb2tlPSIke2dhdWdlQ29sb3J9IiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+DQogICAgICAgICAgICA8Y2lyY2xlIGN4PSIke2N4fSIgY3k9IiR7Y3l9IiByPSI0IiBmaWxsPSIjMmMzZTUwIi8+DQogICAgICAgICAgICA8dGV4dCB4PSIke2N4fSIgeT0iJHtjeSArIDI1fSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IiR7Z2F1Z2VDb2xvcn0iPiR7Zm9ybWF0TnVtKHV0aWwsIDEpfSU8L3RleHQ+DQogICAgICAgICAgICA8dGV4dCB4PSIke2N4fSIgeT0iJHtjeSArIDM4fSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI4IiBmaWxsPSIjOTVhNWE2Ij5ZaWVsZCBVdGlsaXphdGlvbjwvdGV4dD4NCiAgICAgICAgYDsNCiAgICB9DQoNCiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7DQogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBpbml0KCk7DQogICAgfQ0KfSkoKTsNCg==\"];\n    var s=document.createElement('script');\n    s.text=atob(p.join(''));\n    r.appendChild(s);\n  }catch(e){\n    console.error('Yield Strength Calculator load error:',e);\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Yield Strength Calculator is a practical engineering tool designed to calculate yield stress, allowable load, required cross-sectional area, safety factor, and yield utilization for&#8230;<\/p>","protected":false},"author":2,"featured_media":24771,"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":[8647],"tags":[8644,8649,8648,8650],"class_list":["post-24770","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-strength-analysis","tag-yield-load","tag-yield-strength","tag-yield-stress","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Yield-Strength-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24770"}],"version-history":[{"count":3,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24770\/revisions"}],"predecessor-version":[{"id":24775,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24770\/revisions\/24775"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24771"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}