{"id":24817,"date":"2026-09-04T07:15:58","date_gmt":"2026-09-04T07:15:58","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24817"},"modified":"2026-09-04T07:16:01","modified_gmt":"2026-09-04T07:16:01","slug":"reduction-of-area-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ru\/reduction-of-area-calculator\/","title":{"rendered":"Reduction of Area Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Reduction of Area Calculator<\/strong> is a practical engineering tool designed to calculate the percentage decrease in a material specimen\u2019s cross-sectional area after tensile fracture. By entering the original and final area or specimen dimensions, users can quickly determine area loss, remaining area, and reduction of area percentage. The Reduction of Area Calculator is useful for tensile testing, material ductility evaluation, quality control, failure analysis, and material comparison in mechanical and materials engineering applications.<\/p>\n\n\n\n<!-- WordPress \u81ea\u5b9a\u4e49 HTML \u533a\u5757\uff1a\u590d\u5236\u4e0b\u65b9\u5168\u90e8\u5185\u5bb9 -->\n<!-- \u8bf7\u52ff\u5305\u88f9 DOCTYPE\/html\/head\/body\uff0c\u8bf7\u4f7f\u7528\u4ee3\u7801\u7f16\u8f91\u5668\u6a21\u5f0f\u7c98\u8d34 -->\n<!-- \u6837\u5f0f\u4e0e\u811a\u672c\u5747\u9650\u5b9a\u5728 #roac-calculator \u5185\uff0c\u4e0d\u4f1a\u5f71\u54cd\u4e3b\u9898\u9875\u7709\u3001\u9875\u811a\u3001\u83dc\u5355\u3001\u4fa7\u8fb9\u680f\u53ca\u5176\u4ed6\u9875\u9762\u5185\u5bb9 -->\n<style>\n\/* Reduction of Area Calculator \u2014 WordPress-safe scoped styles\n * Every rule is scoped under #roac-calculator.roac-calculator.\n * Will NOT affect theme header, footer, sidebar, menus, or other page content.\n * No html, body, :root, or unscoped universal selectors.\n *\/\n\n.entry-content #roac-calculator.roac-calculator,\n.wp-block-html #roac-calculator.roac-calculator,\n.wp-block-group__inner-container #roac-calculator.roac-calculator,\n.elementor-widget-container #roac-calculator.roac-calculator,\n.et_pb_module #roac-calculator.roac-calculator,\n.fl-module-content #roac-calculator.roac-calculator,\n.site-content #roac-calculator.roac-calculator,\narticle #roac-calculator.roac-calculator,\n#roac-calculator.roac-calculator,\n.entry-content #roac-calculator.roac-calculator *,\n.wp-block-html #roac-calculator.roac-calculator *,\n.wp-block-group__inner-container #roac-calculator.roac-calculator *,\n.elementor-widget-container #roac-calculator.roac-calculator *,\n.et_pb_module #roac-calculator.roac-calculator *,\n.fl-module-content #roac-calculator.roac-calculator *,\n.site-content #roac-calculator.roac-calculator *,\narticle #roac-calculator.roac-calculator *,\n#roac-calculator.roac-calculator *,\n.entry-content #roac-calculator.roac-calculator *::before,\n.wp-block-html #roac-calculator.roac-calculator *::before,\n#roac-calculator.roac-calculator *::before,\n.entry-content #roac-calculator.roac-calculator *::after,\n.wp-block-html #roac-calculator.roac-calculator *::after,\n#roac-calculator.roac-calculator *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #roac-calculator.roac-calculator,\n.wp-block-html #roac-calculator.roac-calculator,\n.wp-block-group__inner-container #roac-calculator.roac-calculator,\n.elementor-widget-container #roac-calculator.roac-calculator,\n.et_pb_module #roac-calculator.roac-calculator,\n.fl-module-content #roac-calculator.roac-calculator,\n.site-content #roac-calculator.roac-calculator,\narticle #roac-calculator.roac-calculator,\n#roac-calculator.roac-calculator {\n    all: revert;\n    --roac-primary: #1a5276;\n    --roac-primary-light: #2471a3;\n    --roac-primary-dark: #0e3352;\n    --roac-accent: #e67e22;\n    --roac-danger: #c0392b;\n    --roac-neutral: #7f8c8d;\n    --roac-bg: #ecf0f1;\n    --roac-card-bg: #ffffff;\n    --roac-border: #d5dbdb;\n    --roac-text: #2c3e50;\n    --roac-text-muted: #5d6d7e;\n    --roac-shadow: 0 2px 12px rgba(26, 82, 118, 0.08);\n    --roac-radius: 8px;\n    --roac-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --roac-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(--roac-font) !important;\n    color: var(--roac-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    clear: both !important;\n    position: relative !important;\n    isolation: isolate !important;\n    contain: layout style paint !important;\n    z-index: auto !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    box-shadow: none !important;\n    overflow: visible !important;\n}\n\n#roac-calculator.roac-calculator form,\n#roac-calculator.roac-calculator fieldset,\n#roac-calculator.roac-calculator table {\n    all: revert !important;\n    box-sizing: border-box !important;\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    width: auto !important;\n    max-width: none !important;\n    font-family: inherit !important;\n    color: inherit !important;\n}\n\n#roac-calculator.roac-calculator [hidden] {\n    display: none !important;\n}\n\n#roac-calculator.roac-calculator h1,\n#roac-calculator.roac-calculator h2,\n#roac-calculator.roac-calculator h3,\n#roac-calculator.roac-calculator h4,\n#roac-calculator.roac-calculator p,\n#roac-calculator.roac-calculator ul,\n#roac-calculator.roac-calculator ol,\n#roac-calculator.roac-calculator li,\n#roac-calculator.roac-calculator section,\n#roac-calculator.roac-calculator div,\n#roac-calculator.roac-calculator span,\n#roac-calculator.roac-calculator strong,\n#roac-calculator.roac-calculator em,\n#roac-calculator.roac-calculator sub,\n#roac-calculator.roac-calculator sup {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: none !important;\n    box-shadow: none !important;\n    font-family: inherit !important;\n    font-size: inherit !important;\n    font-weight: inherit !important;\n    font-style: inherit !important;\n    line-height: inherit !important;\n    color: inherit !important;\n    letter-spacing: inherit !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n    float: none !important;\n}\n\n#roac-calculator.roac-calculator button,\n#roac-calculator.roac-calculator input,\n#roac-calculator.roac-calculator select,\n#roac-calculator.roac-calculator label,\n#roac-calculator.roac-calculator legend {\n    font: inherit !important;\n    font-family: var(--roac-font) !important;\n    color: inherit !important;\n    margin: 0 !important;\n    max-width: none !important;\n    min-width: 0 !important;\n    float: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n#roac-calculator.roac-calculator ul,\n#roac-calculator.roac-calculator ol {\n    list-style: none !important;\n    padding: 0 !important;\n    margin: 0 !important;\n}\n\n#roac-calculator.roac-calculator button {\n    cursor: pointer !important;\n    background: transparent !important;\n    border: none !important;\n    padding: 0 !important;\n    box-shadow: none !important;\n    text-decoration: none !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n    text-transform: none !important;\n    min-height: unset !important;\n    height: auto !important;\n    width: auto !important;\n}\n\n#roac-calculator.roac-calculator input[type=\"number\"],\n#roac-calculator.roac-calculator input[type=\"text\"],\n#roac-calculator.roac-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(--roac-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.95rem !important;\n    font-family: var(--roac-font) !important;\n    background: #ffffff !important;\n    color: var(--roac-text) !important;\n    min-height: 38px !important;\n    outline: none !important;\n    box-shadow: none !important;\n    margin: 0 !important;\n}\n\n#roac-calculator.roac-calculator input[type=\"number\"]:focus,\n#roac-calculator.roac-calculator input[type=\"text\"]:focus,\n#roac-calculator.roac-calculator select:focus {\n    border-color: var(--roac-primary-light) !important;\n    box-shadow: 0 0 0 2px rgba(36, 113, 163, 0.15) !important;\n}\n\n#roac-calculator.roac-calculator .roac-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 1.25rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-card {\n    background: var(--roac-card-bg) !important;\n    border: 1px solid var(--roac-border) !important;\n    border-radius: var(--roac-radius) !important;\n    padding: 1.25rem !important;\n    box-shadow: var(--roac-shadow) !important;\n}\n\n#roac-calculator.roac-calculator .roac-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: 1rem !important;\n    padding-bottom: 0.75rem !important;\n    border-bottom: 2px solid var(--roac-bg) !important;\n}\n\n#roac-calculator.roac-calculator .roac-panel-header h2 {\n    font-size: 1.25rem !important;\n    font-weight: 700 !important;\n    color: var(--roac-primary) !important;\n}\n\n#roac-calculator.roac-calculator .roac-unit-toggle {\n    display: flex !important;\n    border: 1px solid var(--roac-border) !important;\n    border-radius: 6px !important;\n    overflow: hidden !important;\n}\n\n#roac-calculator.roac-calculator .roac-unit-btn {\n    padding: 0.4rem 0.85rem !important;\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    background: #fff !important;\n    color: var(--roac-text-muted) !important;\n    border-right: 1px solid var(--roac-border) !important;\n    transition: background 0.15s, color 0.15s !important;\n}\n\n#roac-calculator.roac-calculator .roac-unit-btn:last-child {\n    border-right: none !important;\n}\n\n#roac-calculator.roac-calculator .roac-unit-btn.roac-active {\n    background: var(--roac-primary) !important;\n    color: #fff !important;\n}\n\n#roac-calculator.roac-calculator fieldset.roac-input-section {\n    border: 1px solid var(--roac-border) !important;\n    border-radius: var(--roac-radius) !important;\n    padding: 1rem !important;\n    margin: 0 0 1rem 0 !important;\n    background: #fafbfc !important;\n}\n\n#roac-calculator.roac-calculator legend {\n    font-weight: 600 !important;\n    font-size: 0.9rem !important;\n    color: var(--roac-primary) !important;\n    padding: 0 0.5rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-form-row {\n    display: grid !important;\n    grid-template-columns: 1fr !important;\n    gap: 0.75rem !important;\n    margin-bottom: 0.75rem !important;\n}\n\n@media (min-width: 540px) {\n    #roac-calculator.roac-calculator .roac-form-row {\n        grid-template-columns: 1fr 1fr !important;\n    }\n}\n\n#roac-calculator.roac-calculator .roac-form-group label {\n    display: block !important;\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    color: var(--roac-text) !important;\n    margin-bottom: 0.35rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-input-with-unit {\n    display: flex !important;\n    gap: 0 !important;\n}\n\n#roac-calculator.roac-calculator .roac-input-with-unit input {\n    flex: 1 !important;\n    border-radius: 6px 0 0 6px !important;\n    border-right: none !important;\n}\n\n#roac-calculator.roac-calculator .roac-inline-unit,\n#roac-calculator.roac-calculator .roac-unit-label {\n    min-width: 58px !important;\n    width: auto !important;\n    flex-shrink: 0 !important;\n    padding: 0.55rem 0.5rem !important;\n    font-size: 0.82rem !important;\n    border: 1px solid var(--roac-border) !important;\n    border-radius: 0 6px 6px 0 !important;\n    background: var(--roac-bg) !important;\n    color: var(--roac-text-muted) !important;\n    text-align: center !important;\n}\n\n#roac-calculator.roac-calculator .roac-unit-label {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n#roac-calculator.roac-calculator .roac-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    margin-left: 4px !important;\n    border-radius: 50% !important;\n    background: var(--roac-primary-light) !important;\n    color: #fff !important;\n    font-size: 10px !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    position: relative !important;\n    vertical-align: middle !important;\n}\n\n#roac-calculator.roac-calculator .roac-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    min-width: 180px !important;\n    max-width: 260px !important;\n    padding: 0.5rem 0.65rem !important;\n    background: var(--roac-primary-dark) !important;\n    color: #fff !important;\n    font-size: 0.75rem !important;\n    font-weight: 400 !important;\n    line-height: 1.4 !important;\n    border-radius: 4px !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n    transition: opacity 0.15s !important;\n    z-index: 10 !important;\n    white-space: normal !important;\n    text-align: left !important;\n}\n\n#roac-calculator.roac-calculator .roac-tooltip:hover::after {\n    opacity: 1 !important;\n}\n\n#roac-calculator.roac-calculator .roac-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: 0.5rem !important;\n    width: 100% !important;\n}\n\n#roac-calculator.roac-calculator .roac-btn {\n    padding: 0.65rem 1.25rem !important;\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    border-radius: 6px !important;\n    transition: background 0.15s !important;\n}\n\n#roac-calculator.roac-calculator .roac-btn-primary {\n    background: var(--roac-primary) !important;\n    color: #fff !important;\n    width: auto !important;\n    min-width: 120px !important;\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-btn-primary:hover {\n    background: var(--roac-primary-light) !important;\n}\n\n#roac-calculator.roac-calculator .roac-hidden {\n    display: none !important;\n}\n\n#roac-calculator.roac-calculator .roac-error-box {\n    padding: 0.85rem 1rem !important;\n    border-radius: 6px !important;\n    margin-bottom: 1rem !important;\n    font-size: 0.88rem !important;\n    background: rgba(192, 57, 43, 0.08) !important;\n    border: 1px solid rgba(192, 57, 43, 0.3) !important;\n    color: var(--roac-danger) !important;\n}\n\n#roac-calculator.roac-calculator .roac-error-box ul {\n    margin-top: 0.4rem !important;\n    padding-left: 1.2rem !important;\n    list-style: disc !important;\n}\n\n#roac-calculator.roac-calculator .roac-results-grid {\n    display: grid !important;\n    grid-template-columns: 1fr !important;\n    gap: 0.5rem !important;\n}\n\n@media (min-width: 480px) {\n    #roac-calculator.roac-calculator .roac-results-grid {\n        grid-template-columns: 1fr 1fr !important;\n    }\n}\n\n#roac-calculator.roac-calculator .roac-result-item {\n    display: flex !important;\n    flex-direction: column !important;\n    padding: 0.65rem 0.85rem !important;\n    background: var(--roac-bg) !important;\n    border-radius: 6px !important;\n    border-left: 3px solid var(--roac-border) !important;\n}\n\n#roac-calculator.roac-calculator .roac-result-highlight {\n    border-left-color: var(--roac-primary) !important;\n    background: rgba(36, 113, 163, 0.06) !important;\n}\n\n#roac-calculator.roac-calculator .roac-result-label {\n    font-size: 0.78rem !important;\n    color: var(--roac-text-muted) !important;\n    margin-bottom: 0.15rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-result-value {\n    font-size: 1rem !important;\n    font-weight: 700 !important;\n    font-family: var(--roac-mono) !important;\n    color: var(--roac-primary-dark) !important;\n}\n\n#roac-calculator.roac-calculator .roac-comparison-table-wrap {\n    overflow-x: auto !important;\n    margin-top: 1rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-comparison-table {\n    width: 100% !important;\n    border-collapse: collapse !important;\n    font-size: 0.82rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-comparison-table th,\n#roac-calculator.roac-calculator .roac-comparison-table td {\n    padding: 0.5rem 0.65rem !important;\n    border: 1px solid var(--roac-border) !important;\n    text-align: left !important;\n    background: #fff !important;\n}\n\n#roac-calculator.roac-calculator .roac-comparison-table th {\n    background: var(--roac-primary) !important;\n    color: #fff !important;\n    font-weight: 600 !important;\n}\n\n#roac-calculator.roac-calculator .roac-material-row {\n    border: 1px solid var(--roac-border) !important;\n    border-radius: 6px !important;\n    padding: 0.75rem !important;\n    margin-bottom: 0.75rem !important;\n    background: #fff !important;\n}\n\n#roac-calculator.roac-calculator .roac-material-row-header {\n    display: flex !important;\n    justify-content: space-between !important;\n    align-items: center !important;\n    margin-bottom: 0.5rem !important;\n}\n\n#roac-calculator.roac-calculator .roac-material-row-header span {\n    font-weight: 600 !important;\n    font-size: 0.85rem !important;\n    color: var(--roac-primary) !important;\n}\n\n#roac-calculator.roac-calculator .roac-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n<\/style>\n<div id=\"roac-calculator\" class=\"roac-calculator\">\n        <div class=\"roac-layout\">\n\n            <section class=\"roac-input-panel roac-card\" aria-label=\"Calculator inputs\">\n                <div class=\"roac-panel-header\">\n                    <h2>Reduction of Area Calculator<\/h2>\n                    <div class=\"roac-unit-toggle\" role=\"group\" aria-label=\"Unit system\">\n                        <button type=\"button\" class=\"roac-unit-btn roac-active\" data-unit=\"metric\">Metric<\/button>\n                        <button type=\"button\" class=\"roac-unit-btn\" data-unit=\"imperial\">Imperial<\/button>\n                    <\/div>\n                <\/div>\n\n                <form id=\"roac-calcForm\" novalidate>\n                    <fieldset class=\"roac-input-section\">\n                        <legend>Calculation Mode<\/legend>\n                        <div class=\"roac-form-row\">\n                            <div class=\"roac-form-group roac-span-full\">\n                                <label for=\"roac-calcMode\">Mode<\/label>\n                                <select id=\"roac-calcMode\" name=\"calcMode\">\n                                    <option value=\"fromDiameters\" selected>Reduction of Area from Diameters<\/option>\n                                    <option value=\"fromAreas\">Reduction of Area from Areas<\/option>\n                                    <option value=\"fromRectangle\">Reduction of Area from Rectangle Dimensions<\/option>\n                                    <option value=\"fromEllipse\">Elliptical Fracture Section<\/option>\n                                    <option value=\"finalArea\">Final Area Calculation<\/option>\n                                    <option value=\"originalArea\">Original Area Calculation<\/option>\n                                    <option value=\"areaLoss\">Area Loss Calculation<\/option>\n                                    <option value=\"tensileTest\">Tensile Test Workflow<\/option>\n                                    <option value=\"comparison\">Material \/ Specimen Comparison<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                        <div class=\"roac-form-row roac-mode-field\" data-mode=\"tensileTest\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-sectionType\">Specimen Cross-Section<\/label>\n                                <select id=\"roac-sectionType\" name=\"sectionType\">\n                                    <option value=\"circular\" selected>Circular<\/option>\n                                    <option value=\"rectangular\">Rectangular<\/option>\n                                    <option value=\"elliptical\">Elliptical Fracture<\/option>\n                                    <option value=\"custom\">Custom Area<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"roac-input-section roac-geometry-section\">\n                        <legend>Specimen Dimensions<\/legend>\n\n                        <div class=\"roac-form-row roac-geom-circular\" data-mode=\"fromDiameters tensileTest\" data-section=\"circular\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-d0\">\n                                    Original Diameter (d<sub>0<\/sub>)\n                                    <span class=\"roac-tooltip\" data-tip=\"Original specimen diameter before tensile testing\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-d0\" name=\"d0\" value=\"12.5\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-df\">\n                                    Final Diameter at Fracture (d<sub>f<\/sub>)\n                                    <span class=\"roac-tooltip\" data-tip=\"Minimum diameter at the fracture neck\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-df\" name=\"df\" value=\"8.0\" min=\"0\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-geom-areas roac-hidden\" data-mode=\"fromAreas areaLoss finalArea\" data-section=\"custom\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-A0\">\n                                    Original Area (A<sub>0<\/sub>)\n                                    <span class=\"roac-tooltip\" data-tip=\"Original cross-sectional area before testing\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-A0\" name=\"A0\" value=\"122.72\" min=\"0.001\" step=\"any\">\n                                    <select id=\"roac-areaUnit0\" class=\"roac-inline-unit\" aria-label=\"Original area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group roac-af-field\" data-mode=\"fromAreas areaLoss\">\n                                <label for=\"roac-Af\">\n                                    Final Area (A<sub>f<\/sub>)\n                                    <span class=\"roac-tooltip\" data-tip=\"Minimum cross-sectional area at fracture\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-Af\" name=\"Af\" value=\"50.27\" min=\"0\" step=\"any\">\n                                    <select id=\"roac-areaUnitF\" class=\"roac-inline-unit\" aria-label=\"Final area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-geom-rect roac-hidden\" data-mode=\"fromRectangle tensileTest\" data-section=\"rectangular\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-w0\">Original Width (w<sub>0<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-w0\" name=\"w0\" value=\"20\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-t0\">Original Thickness (t<sub>0<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-t0\" name=\"t0\" value=\"10\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-wf\">Final Width at Fracture (w<sub>f<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-wf\" name=\"wf\" value=\"16\" min=\"0\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-tf\">Final Thickness at Fracture (t<sub>f<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-tf\" name=\"tf\" value=\"7\" min=\"0\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-geom-ellipse roac-hidden\" data-mode=\"fromEllipse tensileTest\" data-section=\"elliptical\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-d0ellipse\">Original Diameter (d<sub>0<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-d0ellipse\" name=\"d0ellipse\" value=\"12.5\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-majorA\">\n                                    Major Fracture Diameter (a)\n                                    <span class=\"roac-tooltip\" data-tip=\"Major axis of elliptical fracture section\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-majorA\" name=\"majorA\" value=\"9.0\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-minorB\">\n                                    Minor Fracture Diameter (b)\n                                    <span class=\"roac-tooltip\" data-tip=\"Minor axis of elliptical fracture section\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-minorB\" name=\"minorB\" value=\"7.0\" min=\"0.001\" step=\"any\">\n                                    <span class=\"roac-unit-label\" data-unit-key=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-geom-custom roac-hidden\" data-mode=\"tensileTest\" data-section=\"custom\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-A0custom\">Original Area (A<sub>0<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-A0custom\" name=\"A0custom\" value=\"122.72\" min=\"0.001\" step=\"any\">\n                                    <select id=\"roac-areaUnit0custom\" class=\"roac-inline-unit\" aria-label=\"Original area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-Afcustom\">Final Area (A<sub>f<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-Afcustom\" name=\"Afcustom\" value=\"50.27\" min=\"0\" step=\"any\">\n                                    <select id=\"roac-areaUnitFcustom\" class=\"roac-inline-unit\" aria-label=\"Final area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-ra-field roac-hidden\" data-mode=\"finalArea originalArea\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-RA\">\n                                    Reduction of Area (RA)\n                                    <span class=\"roac-tooltip\" data-tip=\"Known percentage reduction of area\">?<\/span>\n                                <\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-RA\" name=\"RA\" value=\"59.07\" min=\"0\" max=\"99.99\" step=\"any\">\n                                    <span class=\"roac-unit-label\">%<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-final-area-field roac-hidden\" data-mode=\"finalArea\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-A0final\">Original Area (A<sub>0<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-A0final\" name=\"A0final\" value=\"122.72\" min=\"0.001\" step=\"any\">\n                                    <select id=\"roac-areaUnit0final\" class=\"roac-inline-unit\" aria-label=\"Original area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"roac-form-row roac-original-area-field roac-hidden\" data-mode=\"originalArea\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-Aforig\">Final Area (A<sub>f<\/sub>)<\/label>\n                                <div class=\"roac-input-with-unit\">\n                                    <input type=\"number\" id=\"roac-Aforig\" name=\"Aforig\" value=\"50.27\" min=\"0.001\" step=\"any\">\n                                    <select id=\"roac-areaUnitForig\" class=\"roac-inline-unit\" aria-label=\"Final area unit\">\n                                        <option value=\"mm2\" selected>mm\u00b2<\/option>\n                                        <option value=\"cm2\">cm\u00b2<\/option>\n                                        <option value=\"in2\">in\u00b2<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"roac-input-section roac-comparison-section roac-hidden\" data-mode=\"comparison\">\n                        <legend>Specimen Comparison (2\u20136 Specimens)<\/legend>\n                        <div class=\"roac-form-row\">\n                            <div class=\"roac-form-group\">\n                                <label for=\"roac-numSpecimens\">Number of Specimens<\/label>\n                                <select id=\"roac-numSpecimens\" name=\"numSpecimens\">\n                                    <option value=\"2\" selected>2<\/option>\n                                    <option value=\"3\">3<\/option>\n                                    <option value=\"4\">4<\/option>\n                                    <option value=\"5\">5<\/option>\n                                    <option value=\"6\">6<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                        <div id=\"roac-comparisonSpecimens\"><\/div>\n                    <\/fieldset>\n\n                    <div id=\"roac-inputErrorBox\" class=\"roac-error-box roac-hidden\" role=\"alert\"><\/div>\n\n                    <div class=\"roac-form-actions\">\n                        <button type=\"submit\" class=\"roac-btn roac-btn-primary\" id=\"roac-calculateBtn\">Calculate<\/button>\n                    <\/div>\n                <\/form>\n            <\/section>\n\n            <section class=\"roac-results-panel roac-card roac-hidden\" id=\"roac-resultsPanel\" aria-label=\"Calculation results\">\n                <div class=\"roac-results-grid\" id=\"roac-resultsGrid\"><\/div>\n                <div id=\"roac-comparisonResults\" class=\"roac-hidden\"><\/div>\n            <\/section>\n\n        <\/div>\n    <\/div>\n<script>\n(function(){\n  var r=document.getElementById('roac-calculator');\n  if(!r||r.dataset.roacLoaderDone==='1'){return;}\n  r.dataset.roacLoaderDone='1';\n  try{\n    var p=[\"LyoqDQogKiBSZWR1Y3Rpb24gb2YgQXJlYSBDYWxjdWxhdG9yDQogKiBTY29wZWQgZm9yIFdvcmRQcmVzcyBlbWJlZCDigJQgZG9lcyBub3QgYWZmZWN0IGVsZW1lbnRzIG91dHNpZGUgI3JvYWMtY2FsY3VsYXRvcg0KICovDQoNCihmdW5jdGlvbiAoKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb2FjLWNhbGN1bGF0b3InKTsNCiAgICBpZiAoIXJvb3QgfHwgcm9vdC5kYXRhc2V0LnJvYWNSZWFkeSA9PT0gJzEnKSByZXR1cm47DQogICAgcm9vdC5kYXRhc2V0LnJvYWNSZWFkeSA9ICcxJzsNCg0KICAgIGNvbnN0IFBJID0gTWF0aC5QSTsNCg0KICAgIGNvbnN0IERFRkFVTFRTID0gew0KICAgICAgICBkMDogMTIuNSwNCiAgICAgICAgZGY6IDguMCwNCiAgICAgICAgdzA6IDIwLA0KICAgICAgICB0MDogMTAsDQogICAgICAgIHdmOiAxNiwNCiAgICAgICAgdGY6IDcsDQogICAgICAgIG1ham9yQTogOS4wLA0KICAgICAgICBtaW5vckI6IDcuMA0KICAgIH07DQoNCiAgICBmdW5jdGlvbiAkKGlkKSB7DQogICAgICAgIHJldHVybiByb290LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0icm9hYy0nICsgaWQgKyAnIl0nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiAkYWxsKHNlbCkgew0KICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbCk7DQogICAgfQ0KDQogICAgY29uc3QgQ09OViA9IHsNCiAgICAgICAgbGVuZ3RoVG9JbnRlcm5hbCh2LCB1bml0KSB7DQogICAgICAgICAgICBpZiAodW5pdCA9PT0gJ2luJykgcmV0dXJuIHYgKiAyNS40Ow0KICAgICAgICAgICAgcmV0dXJuIHY7DQogICAgICAgIH0sDQogICAgICAgIGxlbmd0aEZyb21JbnRlcm5hbCh2LCB1bml0KSB7DQogICAgICAgICAgICBpZiAodW5pdCA9PT0gJ2luJykgcmV0dXJuIHYgLyAyNS40Ow0KICAgICAgICAgICAgcmV0dXJuIHY7DQogICAgICAgIH0sDQogICAgICAgIGFyZWFUb0ludGVybmFsKHYsIHVuaXQpIHsNCiAgICAgICAgICAgIGlmICh1bml0ID09PSAnY20yJykgcmV0dXJuIHYgKiAxMDA7DQogICAgICAgICAgICBpZiAodW5pdCA9PT0gJ2luMicpIHJldHVybiB2ICogNjQ1LjE2Ow0KICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdtMicpIHJldHVybiB2ICogMWU2Ow0KICAgICAgICAgICAgcmV0dXJuIHY7DQogICAgICAgIH0sDQogICAgICAgIGFyZWFGcm9tSW50ZXJuYWwodiwgdW5pdCkgew0KICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdjbTInKSByZXR1cm4gdiAvIDEwMDsNCiAgICAgICAgICAgIGlmICh1bml0ID09PSAnaW4yJykgcmV0dXJuIHYgLyA2NDUuMTY7DQogICAgICAgICAgICBpZiAodW5pdCA9PT0gJ20yJykgcmV0dXJuIHYgLyAxZTY7DQogICAgICAgICAgICByZXR1cm4gdjsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICBsZXQgdW5pdFN5c3RlbSA9ICdtZXRyaWMnOw0KDQogICAgY29uc3QgZm9ybSA9ICQoJ2NhbGNGb3JtJyk7DQogICAgY29uc3QgY2FsY01vZGUgPSAkKCdjYWxjTW9kZScpOw0KICAgIGNvbnN0IHNlY3Rpb25UeXBlID0gJCgnc2VjdGlvblR5cGUnKTsNCiAgICBjb25zdCByZXN1bHRzUGFuZWwgPSAkKCdyZXN1bHRzUGFuZWwnKTsNCg0KICAgIGZ1bmN0aW9uIGluaXQoKSB7DQogICAgICAgIGJ1aWxkQ29tcGFyaXNvblNwZWNpbWVucygpOw0KICAgICAgICBiaW5kRXZlbnRzKCk7DQogICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHsNCiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoZSkgPT4gew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgY2FsY3VsYXRlKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgICRhbGwoJy5yb2FjLXVuaXQtYnRuJykuZm9yRWFjaCgoYnRuKSA9PiB7DQogICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBzd2l0Y2hVbml0U3lzdGVtKGJ0bi5kYXRhc2V0LnVuaXQpKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgY2FsY01vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gew0KICAgICAgICAgICAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7DQogICAgICAgICAgICBoaWRlUmVzdWx0c1BhbmVsKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHNlY3Rpb25UeXBlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsNCiAgICAgICAgICAgIHVwZGF0ZVNlY3Rpb25GaWVsZHMoKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRzUGFuZWwoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJCgnbnVtU3BlY2ltZW5zJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gew0KICAgICAgICAgICAgYnVpbGRDb21wYXJpc29uU3BlY2ltZW5zKCk7DQogICAgICAgICAgICBoaWRlUmVzdWx0c1BhbmVsKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBoaWRlUmVzdWx0c1BhbmVsKTsNCiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBoaWRlUmVzdWx0c1BhbmVsKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBsZW5Vbml0KCkgew0KICAgICAgICByZXR1cm4gdW5pdFN5c3RlbSA9PT0gJ2ltcGVyaWFsJyA\/ICdpbicgOiAnbW0nOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGFyZWFVbml0S2V5KCkgew0KICAgICAgICByZXR1cm4gdW5pdFN5c3RlbSA9PT0gJ2ltcGVyaWFsJyA\/ICdpbjInIDogJ21tMic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVhZExlbmd0aChpZCkgew0KICAgICAgICBjb25zdCBlbCA9ICQoaWQpOw0KICAgICAgICBpZiAoIWVsIHx8IGVsLnZhbHVlID09PSAnJykgcmV0dXJuIG51bGw7DQogICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoZWwudmFsdWUpOw0KICAgICAgICBpZiAoaXNOYU4odmFsKSkgcmV0dXJuIG51bGw7DQogICAgICAgIHJldHVybiBDT05WLmxlbmd0aFRvSW50ZXJuYWwodmFsLCBsZW5Vbml0KCkpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlYWRBcmVhVmFsdWUodmFsLCB1bml0U2VsZWN0SWQpIHsNCiAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8IGlzTmFOKHZhbCkpIHJldHVybiBudWxsOw0KICAgICAgICBjb25zdCB1bml0RWwgPSAkKHVuaXRTZWxlY3RJZCk7DQogICAgICAgIGNvbnN0IHVuaXQgPSB1bml0RWwgPyB1bml0RWwudmFsdWUgOiBhcmVhVW5pdEtleSgpOw0KICAgICAgICByZXR1cm4gQ09OVi5hcmVhVG9JbnRlcm5hbCh2YWwsIHVuaXQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNpcmN1bGFyQXJlYShkKSB7DQogICAgICAgIHJldHVybiBQSSAqIGQgKiBkIC8gNDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBlbGxpcHRpY2FsQXJlYShhLCBiKSB7DQogICAgICAgIHJldHVybiBQSSAqIGEgKiBiIC8gNDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb21wdXRlRnJvbUFyZWFzKEEwLCBBZikgew0KICAgICAgICBjb25zdCBkZWx0YUEgPSBBMCAtIEFmOw0KICAgICAgICBjb25zdCBSQSA9IEEwID4gMCA\/IChkZWx0YUEgLyBBMCkgKiAxMDAgOiAwOw0KICAgICAgICBjb25zdCByZW1haW5pbmcgPSBBMCA+IDAgPyAoQWYgLyBBMCkgKiAxMDAgOiAwOw0KICAgICAgICByZXR1cm4geyBBMCwgQWYsIGRlbHRhQSwgUkEsIHJlbWFpbmluZyB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVNlY3Rpb25GaWVsZHMoKSB7DQogICAgICAgIGNvbnN0IG1vZGUgPSBjYWxjTW9kZS52YWx1ZTsNCiAgICAgICAgaWYgKG1vZGUgIT09ICd0ZW5zaWxlVGVzdCcpIHJldHVybjsNCiAgICAgICAgY29uc3QgdHlwZSA9IHNlY3Rpb25UeXBlLnZhbHVlOw0KDQogICAgICAgICRhbGwoJy5yb2FjLWdlb20tY2lyY3VsYXIsIC5yb2FjLWdlb20tcmVjdCwgLnJvYWMtZ2VvbS1lbGxpcHNlLCAucm9hYy1nZW9tLWN1c3RvbScpLmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdyb2FjLWhpZGRlbicpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBjb25zdCBtYXAgPSB7DQogICAgICAgICAgICBjaXJjdWxhcjogJy5yb2FjLWdlb20tY2lyY3VsYXInLA0KICAgICAgICAgICAgcmVjdGFuZ3VsYXI6ICcucm9hYy1nZW9tLXJlY3QnLA0KICAgICAgICAgICAgZWxsaXB0aWNhbDogJy5yb2FjLWdlb20tZWxsaXBzZScsDQogICAgICAgICAgICBjdXN0b206ICcucm9hYy1nZW9tLWN1c3RvbScNCiAgICAgICAgfTsNCiAgICAgICAgY29uc3Qgc2VsID0gbWFwW3R5cGVdOw0KICAgICAgICBpZiAoc2VsKSByb290LnF1ZXJ5U2VsZWN0b3Ioc2VsKS5jbGFzc0xpc3QucmVtb3ZlKCdyb2FjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpIHsNCiAgICAgICAgY29uc3QgbW9kZSA9IGNhbGNNb2RlLnZhbHVlOw0KDQogICAgICAgICRhbGwoJ1tkYXRhLW1vZGVd\",\n    \"JykuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICAgIGlmIChlbC50YWdOYW1lID09PSAnRklFTERTRVQnKSByZXR1cm47DQogICAgICAgICAgICBjb25zdCBtb2RlcyA9IGVsLmRhdGFzZXQubW9kZS5zcGxpdCgnICcpOw0KICAgICAgICAgICAgY29uc3QgbW9kZU1hdGNoID0gbW9kZXMuaW5jbHVkZXMobW9kZSk7DQogICAgICAgICAgICBsZXQgc2VjdGlvbk1hdGNoID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChlbC5kYXRhc2V0LnNlY3Rpb24gJiYgbW9kZSA9PT0gJ3RlbnNpbGVUZXN0Jykgew0KICAgICAgICAgICAgICAgIHNlY3Rpb25NYXRjaCA9IGVsLmRhdGFzZXQuc2VjdGlvbiA9PT0gc2VjdGlvblR5cGUudmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdyb2FjLWhpZGRlbicsICEobW9kZU1hdGNoICYmIHNlY3Rpb25NYXRjaCkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICAkYWxsKCdmaWVsZHNldFtkYXRhLW1vZGVdJykuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IG1vZGVzID0gZWwuZGF0YXNldC5tb2RlLnNwbGl0KCcgJyk7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdyb2FjLWhpZGRlbicsICFtb2Rlcy5pbmNsdWRlcyhtb2RlKSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGlmIChtb2RlID09PSAnZnJvbURpYW1ldGVycycpIHsNCiAgICAgICAgICAgIHJvb3QucXVlcnlTZWxlY3RvcignLnJvYWMtZ2VvbS1jaXJjdWxhcicpLmNsYXNzTGlzdC5yZW1vdmUoJ3JvYWMtaGlkZGVuJyk7DQogICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2Zyb21BcmVhcycgfHwgbW9kZSA9PT0gJ2FyZWFMb3NzJykgew0KICAgICAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcucm9hYy1nZW9tLWFyZWFzJykuY2xhc3NMaXN0LnJlbW92ZSgncm9hYy1oaWRkZW4nKTsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnZnJvbVJlY3RhbmdsZScpIHsNCiAgICAgICAgICAgIHJvb3QucXVlcnlTZWxlY3RvcignLnJvYWMtZ2VvbS1yZWN0JykuY2xhc3NMaXN0LnJlbW92ZSgncm9hYy1oaWRkZW4nKTsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnZnJvbUVsbGlwc2UnKSB7DQogICAgICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLWdlb20tZWxsaXBzZScpLmNsYXNzTGlzdC5yZW1vdmUoJ3JvYWMtaGlkZGVuJyk7DQogICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2ZpbmFsQXJlYScpIHsNCiAgICAgICAgICAgIHJvb3QucXVlcnlTZWxlY3RvcignLnJvYWMtZmluYWwtYXJlYS1maWVsZCcpLmNsYXNzTGlzdC5yZW1vdmUoJ3JvYWMtaGlkZGVuJyk7DQogICAgICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLXJhLWZpZWxkJykuY2xhc3NMaXN0LnJlbW92ZSgncm9hYy1oaWRkZW4nKTsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnb3JpZ2luYWxBcmVhJykgew0KICAgICAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcucm9hYy1vcmlnaW5hbC1hcmVhLWZpZWxkJykuY2xhc3NMaXN0LnJlbW92ZSgncm9hYy1oaWRkZW4nKTsNCiAgICAgICAgICAgIHJvb3QucXVlcnlTZWxlY3RvcignLnJvYWMtcmEtZmllbGQnKS5jbGFzc0xpc3QucmVtb3ZlKCdyb2FjLWhpZGRlbicpOw0KICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICd0ZW5zaWxlVGVzdCcpIHsNCiAgICAgICAgICAgIHVwZGF0ZVNlY3Rpb25GaWVsZHMoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHN3aXRjaFVuaXRTeXN0ZW0oc3lzKSB7DQogICAgICAgIGlmIChzeXMgPT09IHVuaXRTeXN0ZW0pIHJldHVybjsNCiAgICAgICAgY29uc3QgZnJvbUxlbiA9IHVuaXRTeXN0ZW0gPT09ICdpbXBlcmlhbCcgPyAnaW4nIDogJ21tJzsNCiAgICAgICAgY29uc3QgdG9MZW4gPSBzeXMgPT09ICdpbXBlcmlhbCcgPyAnaW4nIDogJ21tJzsNCg0KICAgICAgICBbJ2QwJywgJ2RmJywgJ3cwJywgJ3QwJywgJ3dmJywgJ3RmJywgJ2QwZWxsaXBzZScsICdtYWpvckEnLCAnbWlub3JCJ10uZm9yRWFjaCgoaWQpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IGVsID0gJChpZCk7DQogICAgICAgICAgICBpZiAoIWVsIHx8IGVsLnZhbHVlID09PSAnJykgcmV0dXJuOw0KICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdChlbC52YWx1ZSk7DQogICAgICAgICAgICBpZiAoaXNOYU4odmFsKSkgcmV0dXJuOw0KICAgICAgICAgICAgY29uc3QgaW50ZXJuYWwgPSBDT05WLmxlbmd0aFRvSW50ZXJuYWwodmFsLCBmcm9tTGVuKTsNCiAgICAgICAgICAgIGVsLnZhbHVlID0gZm9ybWF0TnVtKENPTlYubGVuZ3RoRnJvbUludGVybmFsKGludGVybmFsLCB0b0xlbiksIDQpOw0KICAgICAgICB9KTsNCg0KICAgICAgICB1bml0U3lzdGVtID0gc3lzOw0KICAgICAgICAkYWxsKCcucm9hYy11bml0LWJ0bicpLmZvckVhY2goKGIpID0+IGIuY2xhc3NMaXN0LnRvZ2dsZSgncm9hYy1hY3RpdmUnLCBiLmRhdGFzZXQudW5pdCA9PT0gc3lzKSk7DQogICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgYnVpbGRDb21wYXJpc29uU3BlY2ltZW5zKCk7DQogICAgICAgIGhpZGVSZXN1bHRzUGFuZWwoKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgew0KICAgICAgICBjb25zdCBsZW4gPSBsZW5Vbml0KCk7DQogICAgICAgICRhbGwoJ1tkYXRhLXVuaXQta2V5PSJsZW5ndGgiXScpLmZvckVhY2goKGVsKSA9PiB7IGVsLnRleHRDb250ZW50ID0gbGVuOyB9KTsNCiAgICAgICAgWydhcmVhVW5pdDAnLCAnYXJlYVVuaXRGJywgJ2FyZWFVbml0MGN1c3RvbScsICdhcmVhVW5pdEZjdXN0b20nLCAnYXJlYVVuaXQwZmluYWwnLCAnYXJlYVVuaXRGb3JpZyddLmZvckVhY2goKGlkKSA9PiB7DQogICAgICAgICAgICBjb25zdCBlbCA9ICQoaWQpOw0KICAgICAgICAgICAgaWYgKGVsKSBlbC52YWx1ZSA9IGFyZWFVbml0S2V5KCk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJ1aWxkQ29tcGFyaXNvblNwZWNpbWVucygpIHsNCiAgICAgICAgY29uc3QgY29tcGFyaXNvbkNvdW50ID0gcGFyc2VJbnQoJCgnbnVtU3BlY2ltZW5zJykudmFsdWUsIDEwKTsNCiAgICAgICAgY29uc3QgY29udGFpbmVyID0gJCgnY29tcGFyaXNvblNwZWNpbWVucycpOw0KICAgICAgICBjb25zdCBsZW4gPSBsZW5Vbml0KCk7DQogICAgICAgIGNvbnN0IGFyZWFMYWJlbCA9IHVuaXRTeXN0ZW0gPT09ICdpbXBlcmlhbCcgPyAnaW7CsicgOiAnbW3Csic7DQogICAgICAgIGxldCBodG1sID0gJyc7DQoNCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wYXJpc29uQ291bnQ7IGkrKykgew0KICAgICAgICAgICAgaHRtbCArPSBgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1tYXRlcmlhbC1yb3ciIGRhdGEtaWR4PSIke2l9Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1tYXRlcmlhbC1yb3ctaGVhZGVyIj48c3Bhbj5TcGVjaW1lbiAke2kgKyAxfTwvc3Bhbj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1mb3JtLXJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2FjLWZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5OYW1lIC8gTWF0ZXJpYWw8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0icm9hYy1jbXAtbmFtZSIgdmFsdWU9IlNwZWNpbWVuICR7aSArIDF9Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1mb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VjdGlvbiBUeXBlPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJyb2FjLWNtcC1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY2lyY3VsYXIiIHNlbGVjdGVkPkNpcmN1bGFyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InJlY3Rhbmd1bGFyIj5SZWN0YW5ndWxhcjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhcmVhcyI+RGlyZWN0IEFyZWFzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1yb3cgcm9hYy1jbXAtY2lyY3VsYXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1mb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFi\",\n    \"ZWw+ZOKCgCAoJHtsZW59KTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InJvYWMtY21wLWQwIiB2YWx1ZT0iJHtERUZBVUxUUy5kMH0iIG1pbj0iMC4wMDEiIHN0ZXA9ImFueSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPmQ8c3ViPmY8L3N1Yj4gKCR7bGVufSk8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJyb2FjLWNtcC1kZiIgdmFsdWU9IiR7REVGQVVMVFMuZGZ9IiBtaW49IjAiIHN0ZXA9ImFueSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1yb3cgcm9hYy1jbXAtcmVjdCByb2FjLWhpZGRlbiI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2FjLWZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD534oKAPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0icm9hYy1jbXAtdzAiIHZhbHVlPSIke0RFRkFVTFRTLncwfSIgbWluPSIwLjAwMSIgc3RlcD0iYW55Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1mb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+dOKCgDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InJvYWMtY21wLXQwIiB2YWx1ZT0iJHtERUZBVUxUUy50MH0iIG1pbj0iMC4wMDEiIHN0ZXA9ImFueSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnc8c3ViPmY8L3N1Yj48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJyb2FjLWNtcC13ZiIgdmFsdWU9IiR7REVGQVVMVFMud2Z9IiBtaW49IjAiIHN0ZXA9ImFueSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnQ8c3ViPmY8L3N1Yj48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJyb2FjLWNtcC10ZiIgdmFsdWU9IiR7REVGQVVMVFMudGZ9IiBtaW49IjAiIHN0ZXA9ImFueSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWMtZm9ybS1yb3cgcm9hYy1jbXAtYXJlYXMgcm9hYy1oaWRkZW4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hYy1mb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QeKCgCAoJHthcmVhTGFiZWx9KTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InJvYWMtY21wLUEwIiB2YWx1ZT0iMTIyLjcyIiBtaW49IjAuMDAxIiBzdGVwPSJhbnkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2FjLWZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5BPHN1Yj5mPC9zdWI+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0icm9hYy1jbXAtQWYiIHZhbHVlPSI1MC4yNyIgbWluPSIwIiBzdGVwPSJhbnkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2PmA7DQogICAgICAgIH0NCiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7DQoNCiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5yb2FjLWNtcC1zZWN0aW9uJykuZm9yRWFjaCgoc2VsKSA9PiB7DQogICAgICAgICAgICBzZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBlLnRhcmdldC5jbG9zZXN0KCcucm9hYy1tYXRlcmlhbC1yb3cnKTsNCiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZS50YXJnZXQudmFsdWU7DQogICAgICAgICAgICAgICAgcm93LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLWNtcC1jaXJjdWxhcicpLmNsYXNzTGlzdC50b2dnbGUoJ3JvYWMtaGlkZGVuJywgdHlwZSAhPT0gJ2NpcmN1bGFyJyk7DQogICAgICAgICAgICAgICAgcm93LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLWNtcC1yZWN0JykuY2xhc3NMaXN0LnRvZ2dsZSgncm9hYy1oaWRkZW4nLCB0eXBlICE9PSAncmVjdGFuZ3VsYXInKTsNCiAgICAgICAgICAgICAgICByb3cucXVlcnlTZWxlY3RvcignLnJvYWMtY21wLWFyZWFzJykuY2xhc3NMaXN0LnRvZ2dsZSgncm9hYy1oaWRkZW4nLCB0eXBlICE9PSAnYXJlYXMnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZWFkTWFpbklucHV0cygpIHsNCiAgICAgICAgY29uc3QgbW9kZSA9IGNhbGNNb2RlLnZhbHVlOw0KICAgICAgICBjb25zdCBpbnAgPSB7IG1vZGUsIHNlY3Rpb25UeXBlOiBzZWN0aW9uVHlwZS52YWx1ZSB9Ow0KDQogICAgICAgIGlmIChtb2RlID09PSAnZnJvbURpYW1ldGVycycgfHwgKG1vZGUgPT09ICd0ZW5zaWxlVGVzdCcgJiYgaW5wLnNlY3Rpb25UeXBlID09PSAnY2lyY3VsYXInKSkgew0KICAgICAgICAgICAgaW5wLmQwID0gcmVhZExlbmd0aCgnZDAnKTsNCiAgICAgICAgICAgIGlucC5kZiA9IHJlYWRMZW5ndGgoJ2RmJyk7DQogICAgICAgICAgICBpZiAoaW5wLmQwICE9IG51bGwpIGlucC5BMCA9IGNpcmN1bGFyQXJlYShpbnAuZDApOw0KICAgICAgICAgICAgaWYgKGlucC5kZiAhPSBudWxsKSBpbnAuQWYgPSBjaXJjdWxhckFyZWEoaW5wLmRmKTsNCiAgICAgICAgICAgIGlucC5zaGFwZSA9ICdjaXJjdWxhcic7DQogICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2Zyb21SZWN0YW5nbGUnIHx8IChtb2RlID09PSAndGVuc2lsZVRlc3QnICYmIGlucC5zZWN0aW9uVHlwZSA9PT0gJ3JlY3Rhbmd1bGFyJykpIHsNCiAgICAgICAgICAgIGlucC53MCA9IHJlYWRMZW5ndGgoJ3cwJyk7DQogICAgICAgICAgICBpbnAudDAgPSByZWFkTGVuZ3RoKCd0MCcpOw0KICAgICAgICAgICAgaW5wLndmID0gcmVhZExlbmd0aCgnd2YnKTsNCiAgICAgICAgICAgIGlucC50ZiA9IHJlYWRMZW5ndGgoJ3RmJyk7DQogICAgICAgICAgICBpZiAoaW5wLncwICE9IG51bGwgJiYgaW5wLnQwICE9IG51bGwpIGlucC5BMCA9IGlucC53MCAqIGlucC50MDsNCiAgICAgICAgICAgIGlmIChpbnAud2YgIT0gbnVsbCAmJiBpbnAudGYgIT0gbnVsbCkgaW5wLkFmID0gaW5wLndmICogaW5wLnRmOw0KICAgICAgICAgICAgaW5wLnNoYXBlID0gJ3JlY3Rhbmd1bGFyJzsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnZnJvbUVsbGlwc2UnIHx8IChtb2RlID09PSAndGVuc2lsZVRlc3QnICYmIGlucC5zZWN0aW9uVHlwZSA9PT0gJ2VsbGlwdGljYWwnKSkgew0KICAgICAgICAgICAgaW5wLmQwID0gcmVhZExlbmd0aCgnZDBlbGxpcHNlJyk7DQogICAgICAgICAgICBpbnAubWFqb3JBID0gcmVhZExlbmd0aCgnbWFqb3JBJyk7DQogICAgICAgICAgICBpbnAubWlub3JCID0gcmVhZExlbmd0aCgnbWlub3JCJyk7DQogICAgICAgICAgICBpZiAoaW5wLmQwICE9IG51bGwpIGlucC5BMCA9IGNpcmN1bGFyQXJlYShpbnAuZDApOw0KICAgICAgICAgICAgaWYgKGlucC5tYWpvckEgIT0gbnVsbCAmJiBpbnAubWlub3JCICE9IG51bGwpIGlucC5BZiA9IGVsbGlwdGljYWxBcmVhKGlucC5tYWpvckEsIGlucC5taW5vckIpOw0KICAgICAgICAgICAgaW5wLnNoYXBlID0gJ2VsbGlwdGljYWwnOw0KICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdmcm9tQXJlYXMnIHx8IG1vZGUgPT09ICdhcmVhTG9zcycpIHsNCiAgICAgICAgICAgIGlucC5BMCA9IHJlYWRBcmVhVmFsdWUocGFyc2VGbG9hdCgkKCdBMCcpLnZhbHVlKSwgJ2FyZWFVbml0MCcpOw0KICAgICAgICAgICAgaW5wLkFmID0gcmVhZEFyZWFWYWx1ZShwYXJzZUZsb2F0KCQo\",\n    \"J0FmJykudmFsdWUpLCAnYXJlYVVuaXRGJyk7DQogICAgICAgICAgICBpbnAuc2hhcGUgPSAnY3VzdG9tJzsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnZmluYWxBcmVhJykgew0KICAgICAgICAgICAgaW5wLkEwID0gcmVhZEFyZWFWYWx1ZShwYXJzZUZsb2F0KCQoJ0EwZmluYWwnKS52YWx1ZSksICdhcmVhVW5pdDBmaW5hbCcpOw0KICAgICAgICAgICAgaW5wLlJBID0gcGFyc2VGbG9hdCgkKCdSQScpLnZhbHVlKTsNCiAgICAgICAgICAgIGlucC5zaGFwZSA9ICdjdXN0b20nOw0KICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdvcmlnaW5hbEFyZWEnKSB7DQogICAgICAgICAgICBpbnAuQWYgPSByZWFkQXJlYVZhbHVlKHBhcnNlRmxvYXQoJCgnQWZvcmlnJykudmFsdWUpLCAnYXJlYVVuaXRGb3JpZycpOw0KICAgICAgICAgICAgaW5wLlJBID0gcGFyc2VGbG9hdCgkKCdSQScpLnZhbHVlKTsNCiAgICAgICAgICAgIGlucC5zaGFwZSA9ICdjdXN0b20nOw0KICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICd0ZW5zaWxlVGVzdCcgJiYgaW5wLnNlY3Rpb25UeXBlID09PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgaW5wLkEwID0gcmVhZEFyZWFWYWx1ZShwYXJzZUZsb2F0KCQoJ0EwY3VzdG9tJykudmFsdWUpLCAnYXJlYVVuaXQwY3VzdG9tJyk7DQogICAgICAgICAgICBpbnAuQWYgPSByZWFkQXJlYVZhbHVlKHBhcnNlRmxvYXQoJCgnQWZjdXN0b20nKS52YWx1ZSksICdhcmVhVW5pdEZjdXN0b20nKTsNCiAgICAgICAgICAgIGlucC5zaGFwZSA9ICdjdXN0b20nOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGlucDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0cyhpbnAsIGVycm9ycykgew0KICAgICAgICBjb25zdCBtb2RlID0gaW5wLm1vZGU7DQoNCiAgICAgICAgaWYgKG1vZGUgPT09ICdmaW5hbEFyZWEnKSB7DQogICAgICAgICAgICBpZiAoaW5wLkEwID09IG51bGwgfHwgaW5wLkEwIDw9IDApIGVycm9ycy5wdXNoKCdPcmlnaW5hbCBhcmVhIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICBpZiAoaW5wLlJBID09IG51bGwgfHwgaXNOYU4oaW5wLlJBKSkgZXJyb3JzLnB1c2goJ1JlZHVjdGlvbiBvZiBhcmVhIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQuJyk7DQogICAgICAgICAgICBlbHNlIGlmIChpbnAuUkEgPj0gMTAwKSBlcnJvcnMucHVzaCgnUmVkdWN0aW9uIHBlcmNlbnRhZ2UgbXVzdCBiZSBsZXNzIHRoYW4gMTAwJS4nKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGlucC5SQSA8IDApIGVycm9ycy5wdXNoKCdSZWR1Y3Rpb24gcGVyY2VudGFnZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4nKTsNCiAgICAgICAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKG1vZGUgPT09ICdvcmlnaW5hbEFyZWEnKSB7DQogICAgICAgICAgICBpZiAoaW5wLkFmID09IG51bGwgfHwgaW5wLkFmIDw9IDApIGVycm9ycy5wdXNoKCdGaW5hbCBhcmVhIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICBpZiAoaW5wLlJBID09IG51bGwgfHwgaXNOYU4oaW5wLlJBKSkgZXJyb3JzLnB1c2goJ1JlZHVjdGlvbiBvZiBhcmVhIHBlcmNlbnRhZ2UgaXMgcmVxdWlyZWQuJyk7DQogICAgICAgICAgICBlbHNlIGlmIChpbnAuUkEgPj0gMTAwKSBlcnJvcnMucHVzaCgnUmVkdWN0aW9uIHBlcmNlbnRhZ2UgbXVzdCBiZSBsZXNzIHRoYW4gMTAwJS4nKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGlucC5SQSA8IDApIGVycm9ycy5wdXNoKCdSZWR1Y3Rpb24gcGVyY2VudGFnZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4nKTsNCiAgICAgICAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlucC5BMCA9PSBudWxsIHx8IGlucC5BMCA8PSAwKSBlcnJvcnMucHVzaCgnT3JpZ2luYWwgYXJlYSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICBpZiAoaW5wLkFmID09IG51bGwgfHwgaW5wLkFmIDwgMCkgZXJyb3JzLnB1c2goJ0ZpbmFsIGFyZWEgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4nKTsNCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ2Zyb21EaWFtZXRlcnMnIHx8IChtb2RlID09PSAndGVuc2lsZVRlc3QnICYmIGlucC5zZWN0aW9uVHlwZSA9PT0gJ2NpcmN1bGFyJykpIHsNCiAgICAgICAgICAgIGlmIChpbnAuZDAgPT0gbnVsbCB8fCBpbnAuZDAgPD0gMCkgZXJyb3JzLnB1c2goJ09yaWdpbmFsIGRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICBpZiAoaW5wLmRmID09IG51bGwgfHwgaW5wLmRmIDwgMCkgZXJyb3JzLnB1c2goJ0ZpbmFsIGRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ2Zyb21SZWN0YW5nbGUnIHx8IChtb2RlID09PSAndGVuc2lsZVRlc3QnICYmIGlucC5zZWN0aW9uVHlwZSA9PT0gJ3JlY3Rhbmd1bGFyJykpIHsNCiAgICAgICAgICAgIGlmIChpbnAudzAgPT0gbnVsbCB8fCBpbnAudzAgPD0gMCB8fCBpbnAudDAgPT0gbnVsbCB8fCBpbnAudDAgPD0gMCkgew0KICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdPcmlnaW5hbCB3aWR0aCBhbmQgdGhpY2tuZXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ2Zyb21FbGxpcHNlJyB8fCAobW9kZSA9PT0gJ3RlbnNpbGVUZXN0JyAmJiBpbnAuc2VjdGlvblR5cGUgPT09ICdlbGxpcHRpY2FsJykpIHsNCiAgICAgICAgICAgIGlmIChpbnAuZDAgPT0gbnVsbCB8fCBpbnAuZDAgPD0gMCkgZXJyb3JzLnB1c2goJ09yaWdpbmFsIGRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICBpZiAoaW5wLm1ham9yQSA9PSBudWxsIHx8IGlucC5tYWpvckEgPD0gMCB8fCBpbnAubWlub3JCID09IG51bGwgfHwgaW5wLm1pbm9yQiA8PSAwKSB7DQogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goJ01ham9yIGFuZCBtaW5vciBmcmFjdHVyZSBkaWFtZXRlcnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNvbXB1dGVSZXN1bHRzKGlucCkgew0KICAgICAgICBsZXQgQTAgPSBpbnAuQTA7DQogICAgICAgIGxldCBBZiA9IGlucC5BZjsNCiAgICAgICAgY29uc3QgUkEgPSBpbnAuUkE7DQoNCiAgICAgICAgaWYgKGlucC5tb2RlID09PSAnZmluYWxBcmVhJykgew0KICAgICAgICAgICAgQWYgPSBBMCAqICgxIC0gUkEgLyAxMDApOw0KICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29tcHV0ZUZyb21BcmVhcyhBMCwgQWYpLCBBMCwgQWYgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChpbnAubW9kZSA9PT0gJ29yaWdpbmFsQXJlYScpIHsNCiAgICAgICAgICAgIEEwID0gQWYgLyAoMSAtIFJBIC8gMTAwKTsNCiAgICAgICAgICAgIHJldHVybiB7IC4uLmNvbXB1dGVGcm9tQXJlYXMoQTAsIEFmKSwgQTAsIEFmIH07DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geyAuLi5jb21wdXRlRnJvbUFyZWFzKEEwLCBBZiksIEEwLCBBZiwgaW5wIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KICAgICAgICBoaWRlSW5wdXRFcnJvcigpOw0KICAgICAgICBoaWRlUmVzdWx0c1BhbmVsKCk7DQoNCiAgICAgICAgY29uc3QgZXJyb3JzID0gW107DQogICAgICAgIGNvbnN0IG1vZGUgPSBjYWxjTW9kZS52YWx1ZTsNCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ2NvbXBhcmlzb24nKSB7DQogICAgICAgICAgICBydW5Db21wYXJpc29uKGVycm9ycyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBpbnAgPSByZWFkTWFpbklucHV0cygpOw0KICAgICAgICBpZiAoIXZhbGlkYXRlSW5wdXRzKGlucCwgZXJyb3JzKSkgew0KICAgICAgICAgICAgc2hvd0lucHV0RXJyb3IoZXJyb3JzKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXB1dGVSZXN1bHRzKGlucCk7DQogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBidWlsZFJlc3VsdEl0ZW1zKHJlc3VsdCwgaW5wKTsNCiAgICAgICAgcmVuZGVyUmVzdWx0cyhyZXN1bHRzKTsNCiAgICAgICAgJCgnY29tcGFyaXNvblJlc3VsdHMnKS5jbGFzc0xpc3QuYWRkKCdyb2FjLWhpZGRlbicpOw0KICAgICAgICBzaG93UmVzdWx0c1BhbmVsKCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYnVpbGRSZXN1bHRJdGVtcyhyZXN1bHQsIGlucCkgew0KICAgICAgICBjb25zdCBpdGVtcyA9IFsNCiAgICAgICAgICAgIHsgbGFiZWw6ICdPcmlnaW5hbCBDcm9zcy1TZWN0\",\n    \"aW9uYWwgQXJlYSAoQeKCgCknLCB2YWx1ZTogZm10QXJlYShyZXN1bHQuQTApLCBoaWdobGlnaHQ6IGZhbHNlIH0sDQogICAgICAgICAgICB7IGxhYmVsOiAnRmluYWwgQ3Jvc3MtU2VjdGlvbmFsIEFyZWEgKEE8c3ViPmY8L3N1Yj4pJywgdmFsdWU6IGZtdEFyZWEocmVzdWx0LkFmKSwgaGlnaGxpZ2h0OiBmYWxzZSB9LA0KICAgICAgICAgICAgeyBsYWJlbDogJ0FyZWEgTG9zcyAozpRBKScsIHZhbHVlOiBmbXRBcmVhKHJlc3VsdC5kZWx0YUEpLCBoaWdobGlnaHQ6IGlucC5tb2RlID09PSAnYXJlYUxvc3MnIH0sDQogICAgICAgICAgICB7IGxhYmVsOiAnUmVtYWluaW5nIEFyZWEnLCB2YWx1ZTogZm9ybWF0TnVtKHJlc3VsdC5yZW1haW5pbmcsIDIpICsgJyAlJywgaGlnaGxpZ2h0OiBmYWxzZSB9LA0KICAgICAgICAgICAgeyBsYWJlbDogJ1JlZHVjdGlvbiBvZiBBcmVhIChSQSknLCB2YWx1ZTogZm9ybWF0TnVtKHJlc3VsdC5SQSwgMikgKyAnICUnLCBoaWdobGlnaHQ6IHRydWUgfQ0KICAgICAgICBdOw0KDQogICAgICAgIGlmIChpbnAuc2hhcGUgPT09ICdjaXJjdWxhcicgJiYgaW5wLmQwICE9IG51bGwpIHsNCiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogJ09yaWdpbmFsIERpYW1ldGVyIChk4oKAKScsIHZhbHVlOiBmbXRMZW4oaW5wLmQwKSwgaGlnaGxpZ2h0OiBmYWxzZSB9KTsNCiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogJ0ZpbmFsIERpYW1ldGVyIChkPHN1Yj5mPC9zdWI+KScsIHZhbHVlOiBmbXRMZW4oaW5wLmRmKSwgaGlnaGxpZ2h0OiBmYWxzZSB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaW5wLnNoYXBlID09PSAncmVjdGFuZ3VsYXInKSB7DQogICAgICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdPcmlnaW5hbCBEaW1lbnNpb25zJywgdmFsdWU6IGZtdExlbihpbnAudzApICsgJyDDlyAnICsgZm10TGVuKGlucC50MCksIGhpZ2hsaWdodDogZmFsc2UgfSk7DQogICAgICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdGaW5hbCBEaW1lbnNpb25zJywgdmFsdWU6IGZtdExlbihpbnAud2YpICsgJyDDlyAnICsgZm10TGVuKGlucC50ZiksIGhpZ2hsaWdodDogZmFsc2UgfSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlucC5zaGFwZSA9PT0gJ2VsbGlwdGljYWwnKSB7DQogICAgICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdPcmlnaW5hbCBEaWFtZXRlciAoZOKCgCknLCB2YWx1ZTogZm10TGVuKGlucC5kMCksIGhpZ2hsaWdodDogZmFsc2UgfSk7DQogICAgICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdGcmFjdHVyZSBFbGxpcHNlIChhIMOXIGIpJywgdmFsdWU6IGZtdExlbihpbnAubWFqb3JBKSArICcgw5cgJyArIGZtdExlbihpbnAubWlub3JCKSwgaGlnaGxpZ2h0OiBmYWxzZSB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBpdGVtczsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBydW5Db21wYXJpc29uKGVycm9ycykgew0KICAgICAgICBjb25zdCByb3dzID0gJGFsbCgnLnJvYWMtbWF0ZXJpYWwtcm93Jyk7DQogICAgICAgIGNvbnN0IHNwZWNpbWVucyA9IFtdOw0KICAgICAgICBjb25zdCBsZW5VID0gbGVuVW5pdCgpOw0KICAgICAgICBjb25zdCBhcmVhVSA9IGFyZWFVbml0S2V5KCk7DQoNCiAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSByb3cucXVlcnlTZWxlY3RvcignLnJvYWMtY21wLW5hbWUnKS52YWx1ZSB8fCAnU3BlY2ltZW4nOw0KICAgICAgICAgICAgY29uc3QgdHlwZSA9IHJvdy5xdWVyeVNlbGVjdG9yKCcucm9hYy1jbXAtc2VjdGlvbicpLnZhbHVlOw0KICAgICAgICAgICAgbGV0IEEwLCBBZjsNCg0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjaXJjdWxhcicpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBkMCA9IENPTlYubGVuZ3RoVG9JbnRlcm5hbChwYXJzZUZsb2F0KHJvdy5xdWVyeVNlbGVjdG9yKCcucm9hYy1jbXAtZDAnKS52YWx1ZSkgfHwgMCwgbGVuVSk7DQogICAgICAgICAgICAgICAgY29uc3QgZGYgPSBDT05WLmxlbmd0aFRvSW50ZXJuYWwocGFyc2VGbG9hdChyb3cucXVlcnlTZWxlY3RvcignLnJvYWMtY21wLWRmJykudmFsdWUpIHx8IDAsIGxlblUpOw0KICAgICAgICAgICAgICAgIGlmIChkMCA8PSAwKSB7IGVycm9ycy5wdXNoKG5hbWUgKyAnOiBvcmlnaW5hbCBkaWFtZXRlciBtdXN0IGJlIHBvc2l0aXZlLicpOyByZXR1cm47IH0NCiAgICAgICAgICAgICAgICBpZiAoZGYgPCAwKSB7IGVycm9ycy5wdXNoKG5hbWUgKyAnOiBmaW5hbCBkaWFtZXRlciBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4nKTsgcmV0dXJuOyB9DQogICAgICAgICAgICAgICAgQTAgPSBjaXJjdWxhckFyZWEoZDApOw0KICAgICAgICAgICAgICAgIEFmID0gY2lyY3VsYXJBcmVhKGRmKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlY3Rhbmd1bGFyJykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHcwID0gQ09OVi5sZW5ndGhUb0ludGVybmFsKHBhcnNlRmxvYXQocm93LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLWNtcC13MCcpLnZhbHVlKSB8fCAwLCBsZW5VKTsNCiAgICAgICAgICAgICAgICBjb25zdCB0MCA9IENPTlYubGVuZ3RoVG9JbnRlcm5hbChwYXJzZUZsb2F0KHJvdy5xdWVyeVNlbGVjdG9yKCcucm9hYy1jbXAtdDAnKS52YWx1ZSkgfHwgMCwgbGVuVSk7DQogICAgICAgICAgICAgICAgY29uc3Qgd2YgPSBDT05WLmxlbmd0aFRvSW50ZXJuYWwocGFyc2VGbG9hdChyb3cucXVlcnlTZWxlY3RvcignLnJvYWMtY21wLXdmJykudmFsdWUpIHx8IDAsIGxlblUpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRmID0gQ09OVi5sZW5ndGhUb0ludGVybmFsKHBhcnNlRmxvYXQocm93LnF1ZXJ5U2VsZWN0b3IoJy5yb2FjLWNtcC10ZicpLnZhbHVlKSB8fCAwLCBsZW5VKTsNCiAgICAgICAgICAgICAgICBpZiAodzAgPD0gMCB8fCB0MCA8PSAwKSB7IGVycm9ycy5wdXNoKG5hbWUgKyAnOiBvcmlnaW5hbCBkaW1lbnNpb25zIG11c3QgYmUgcG9zaXRpdmUuJyk7IHJldHVybjsgfQ0KICAgICAgICAgICAgICAgIEEwID0gdzAgKiB0MDsNCiAgICAgICAgICAgICAgICBBZiA9IHdmICogdGY7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIEEwID0gQ09OVi5hcmVhVG9JbnRlcm5hbChwYXJzZUZsb2F0KHJvdy5xdWVyeVNlbGVjdG9yKCcucm9hYy1jbXAtQTAnKS52YWx1ZSkgfHwgMCwgYXJlYVUpOw0KICAgICAgICAgICAgICAgIEFmID0gQ09OVi5hcmVhVG9JbnRlcm5hbChwYXJzZUZsb2F0KHJvdy5xdWVyeVNlbGVjdG9yKCcucm9hYy1jbXAtQWYnKS52YWx1ZSkgfHwgMCwgYXJlYVUpOw0KICAgICAgICAgICAgICAgIGlmIChBMCA8PSAwKSB7IGVycm9ycy5wdXNoKG5hbWUgKyAnOiBvcmlnaW5hbCBhcmVhIG11c3QgYmUgcG9zaXRpdmUuJyk7IHJldHVybjsgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBzcGVjaW1lbnMucHVzaCh7IG5hbWUsIC4uLmNvbXB1dGVGcm9tQXJlYXMoQTAsIEFmKSB9KTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHsNCiAgICAgICAgICAgIHNob3dJbnB1dEVycm9yKGVycm9ycyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgaWYgKHNwZWNpbWVucy5sZW5ndGggPCAyKSB7DQogICAgICAgICAgICBzaG93SW5wdXRFcnJvcihbJ0F0IGxlYXN0IHR3byB2YWxpZCBzcGVjaW1lbnMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb24uJ10pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgc3BlY2ltZW5zLnNvcnQoKGEsIGIpID0+IGIuUkEgLSBhLlJBKTsNCg0KICAgICAgICBjb25zdCBSQXMgPSBzcGVjaW1lbnMubWFwKChzKSA9PiBzLlJBKTsNCiAgICAgICAgY29uc3QgYXZnID0gUkFzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gUkFzLmxlbmd0aDsNCiAgICAgICAgY29uc3QgbWluUkEgPSBNYXRoLm1pbiguLi5SQXMpOw0KICAgICAgICBjb25zdCBtYXhSQSA9IE1hdGgubWF4KC4uLlJBcyk7DQogICAgICAgIGNvbnN0IHJhbmdlID0gbWF4UkEgLSBtaW5SQTsNCiAgICAgICAgY29uc3Qgc3RkRGV2ID0gTWF0aC5zcXJ0KFJBcy5yZWR1Y2UoKHMsIHYpID0+IHMgKyAodiAtIGF2ZykgKiogMiwgMCkgLyBSQXMubGVuZ3RoKTsNCg0KICAgICAgICByZW5kZXJSZXN1bHRzKFsNCiAgICAgICAgICAgIHsgbGFiZWw6ICdBdmVyYWdlIFJlZHVjdGlvbiBvZiBBcmVhJywgdmFsdWU6IGZvcm1hdE51bShhdmcsIDIpICsgJyAlJywgaGlnaGxpZ2h0OiB0cnVlIH0sDQogICAgICAgICAgICB7IGxhYmVsOiAnTWluaW11bSBSQScsIHZhbHVlOiBmb3JtYXROdW0obWluUkEsIDIpICsgJyAlJywgaGlnaGxpZ2h0OiBmYWxzZSB9LA0KICAgICAgICAgICAgeyBsYWJlbDogJ01heGltdW0gUkEnLCB2YWx1ZTogZm9ybWF0TnVtKG1heFJBLCAyKSArICcgJScsIGhpZ2hsaWdodDogZmFsc2UgfSwNCiAgICAgICAgICAgIHsgbGFiZWw6ICdS\",\n    \"YW5nZScsIHZhbHVlOiBmb3JtYXROdW0ocmFuZ2UsIDIpICsgJyAlJywgaGlnaGxpZ2h0OiBmYWxzZSB9LA0KICAgICAgICAgICAgeyBsYWJlbDogJ1N0YW5kYXJkIERldmlhdGlvbicsIHZhbHVlOiBmb3JtYXROdW0oc3RkRGV2LCAyKSArICcgJScsIGhpZ2hsaWdodDogZmFsc2UgfQ0KICAgICAgICBdKTsNCg0KICAgICAgICBsZXQgdGFibGVIdG1sID0gYDxkaXYgY2xhc3M9InJvYWMtY29tcGFyaXNvbi10YWJsZS13cmFwIj48dGFibGUgY2xhc3M9InJvYWMtY29tcGFyaXNvbi10YWJsZSI+DQogICAgICAgICAgICA8dGhlYWQ+PHRyPjx0aD5SYW5rPC90aD48dGg+U3BlY2ltZW48L3RoPjx0aD5B4oKAPC90aD48dGg+QTxzdWI+Zjwvc3ViPjwvdGg+PHRoPs6UQTwvdGg+PHRoPlJlbWFpbmluZyAlPC90aD48dGg+UkEgJTwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT5gOw0KICAgICAgICBzcGVjaW1lbnMuZm9yRWFjaCgocywgaWR4KSA9PiB7DQogICAgICAgICAgICB0YWJsZUh0bWwgKz0gYDx0cj48dGQ+JHtpZHggKyAxfTwvdGQ+PHRkPiR7cy5uYW1lfTwvdGQ+PHRkPiR7Zm10QXJlYShzLkEwKX08L3RkPjx0ZD4ke2ZtdEFyZWEocy5BZil9PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+JHtmbXRBcmVhKHMuZGVsdGFBKX08L3RkPjx0ZD4ke2Zvcm1hdE51bShzLnJlbWFpbmluZywgMil9JTwvdGQ+PHRkPiR7Zm9ybWF0TnVtKHMuUkEsIDIpfSU8L3RkPjwvdHI+YDsNCiAgICAgICAgfSk7DQogICAgICAgIHRhYmxlSHRtbCArPSAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7DQogICAgICAgICQoJ2NvbXBhcmlzb25SZXN1bHRzJykuaW5uZXJIVE1MID0gdGFibGVIdG1sOw0KICAgICAgICAkKCdjb21wYXJpc29uUmVzdWx0cycpLmNsYXNzTGlzdC5yZW1vdmUoJ3JvYWMtaGlkZGVuJyk7DQogICAgICAgIHNob3dSZXN1bHRzUGFuZWwoKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZW5kZXJSZXN1bHRzKGl0ZW1zKSB7DQogICAgICAgICQoJ3Jlc3VsdHNHcmlkJykuaW5uZXJIVE1MID0gaXRlbXMubWFwKChpdGVtKSA9PiBgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2FjLXJlc3VsdC1pdGVtJHtpdGVtLmhpZ2hsaWdodCA\/ICcgcm9hYy1yZXN1bHQtaGlnaGxpZ2h0JyA6ICcnfSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJvYWMtcmVzdWx0LWxhYmVsIj4ke2l0ZW0ubGFiZWx9PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyb2FjLXJlc3VsdC12YWx1ZSI+JHtpdGVtLnZhbHVlfTwvc3Bhbj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICBgKS5qb2luKCcnKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmbXRMZW4odikgew0KICAgICAgICBjb25zdCB1ID0gbGVuVW5pdCgpOw0KICAgICAgICByZXR1cm4gZm9ybWF0TnVtKENPTlYubGVuZ3RoRnJvbUludGVybmFsKHYsIHUpLCA0KSArICcgJyArIHU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZm10QXJlYSh2KSB7DQogICAgICAgIGNvbnN0IHUgPSBhcmVhVW5pdEtleSgpOw0KICAgICAgICByZXR1cm4gZm9ybWF0TnVtKENPTlYuYXJlYUZyb21JbnRlcm5hbCh2LCB1KSwgMykgKyAnICcgKyAodSA9PT0gJ2luMicgPyAnaW7CsicgOiAnbW3CsicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZvcm1hdE51bSh2LCBkZWMpIHsNCiAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCAhaXNGaW5pdGUodikpIHJldHVybiAn4oCUJzsNCiAgICAgICAgaWYgKE1hdGguYWJzKHYpID49IDFlNiB8fCAoTWF0aC5hYnModikgPCAwLjAwMDEgJiYgdiAhPT0gMCkpIHJldHVybiB2LnRvRXhwb25lbnRpYWwoZGVjKTsNCiAgICAgICAgcmV0dXJuIHYudG9GaXhlZChkZWMpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNob3dSZXN1bHRzUGFuZWwoKSB7DQogICAgICAgIHJlc3VsdHNQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdyb2FjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGhpZGVSZXN1bHRzUGFuZWwoKSB7DQogICAgICAgIHJlc3VsdHNQYW5lbC5jbGFzc0xpc3QuYWRkKCdyb2FjLWhpZGRlbicpOw0KICAgICAgICAkKCdyZXN1bHRzR3JpZCcpLmlubmVySFRNTCA9ICcnOw0KICAgICAgICAkKCdjb21wYXJpc29uUmVzdWx0cycpLmlubmVySFRNTCA9ICcnOw0KICAgICAgICAkKCdjb21wYXJpc29uUmVzdWx0cycpLmNsYXNzTGlzdC5hZGQoJ3JvYWMtaGlkZGVuJyk7DQogICAgICAgIGhpZGVJbnB1dEVycm9yKCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaGlkZUlucHV0RXJyb3IoKSB7DQogICAgICAgICQoJ2lucHV0RXJyb3JCb3gnKS5jbGFzc0xpc3QuYWRkKCdyb2FjLWhpZGRlbicpOw0KICAgICAgICAkKCdpbnB1dEVycm9yQm94JykuaW5uZXJIVE1MID0gJyc7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2hvd0lucHV0RXJyb3IoZXJyb3JzKSB7DQogICAgICAgICQoJ2lucHV0RXJyb3JCb3gnKS5pbm5lckhUTUwgPSAnPHN0cm9uZz5QbGVhc2UgY29ycmVjdCB0aGUgZm9sbG93aW5nOjwvc3Ryb25nPjx1bD4nICsNCiAgICAgICAgICAgIGVycm9ycy5tYXAoKGUpID0+ICc8bGk+JyArIGUgKyAnPC9saT4nKS5qb2luKCcnKSArICc8L3VsPic7DQogICAgICAgICQoJ2lucHV0RXJyb3JCb3gnKS5jbGFzc0xpc3QucmVtb3ZlKCdyb2FjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGluaXQoKTsNCn0pKCk7DQo=\"];\n    var bin=atob(p.join(''));\n    var bytes=new Uint8Array(bin.length);\n    for(var i=0;i<bin.length;i++){bytes[i]=bin.charCodeAt(i);}\n    var src=new TextDecoder('utf-8').decode(bytes);\n    (new Function(src))();\n  }catch(e){\n    console.error('Reduction of Area Calculator load error:',e);\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Reduction of Area Calculator is a practical engineering tool designed to calculate the percentage decrease in a material specimen\u2019s cross-sectional area after tensile fracture&#8230;.<\/p>","protected":false},"author":2,"featured_media":24818,"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":[8685,8686,8684,8682],"class_list":["post-24817","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-area-reduction","tag-fracture-analysis","tag-material-ductility","tag-tensile-testing","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/09\/Reduction-of-Area-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/comments?post=24817"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24817\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media\/24818"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media?parent=24817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/categories?post=24817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/tags?post=24817"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}